Ruby on Rails でCRUD機能を実装するまで

# **CRUD・・・・？**
CRUD（クラッド）とは、ほとんど全てのコンピュータソフトウェアが持つ永続性の4つの基本機能のイニシャルを並べた用語。その4つとは、Create（生成）、Read（読み取り）、Update（更新）、Delete（削除）である。

[CRUD - Wikipedia](https://ja.wikipedia.org/wiki/CRUD)

# **環境**
- Ruby 2.2.3
- RubyGem 2.5.2
- Ruby on Rails 4.2.5
- CentOS6.7
- `git`インストール済み

# **流れ**
1. `rbenv`のインストール
2. `ruby`のインストール
3. `Ruby on Rails`のインストール
4. `rails new`でプロジェクト作成
5. 必要な`Gem`のインストール
6. `scaffold`でModelやらもろもろ作成
7. `rails server`でサーバ起動
8. CRUD実装確認

※項番5.以降は作業ディレクトリ上（今回は`project`）でコマンドを実行して下さい。

# **手順**
## **1. rbenvのインストール**
### 1.1 `git clone rbenv`

```shell-session
$ git clone https://github.com/sstephenson/rbenv.git /opt/
```

### 1.2 `git clone ruby-build`
```shell-session
$ mkdir /opt/rbenv/plugins
$ git clone https://github.com/sstephenson/ruby-build.git /opt/rbenv/plugins
```

### 1.3 `.bashrc` 設定
- `.bashrc`に下記を追記

```shell-session
$ vim ~/.bashrc
# rbenv global config
export RBENV_ROOT="/opt/rbenv"
export PATH="${RBENV_ROOT}/bin:${PATH}"
eval "$(rbenv init -)"
```

## **2. rubyのインストール**
### 2.1 モジュールインストール
```shell-session
$ yum -y install gcc make openssl-devel libffi-devel ruby-devel readline-devel rubygems sqlite-devel
```

### 2.2 rubyインストール
```shell-session
$ rbenv install 2.2.3
$ rbenv rehash
$ rbenv global 2.2.3
```

### 2.3 確認
```shell-session
$ rbenv versions
  system
* 2.2.3 (set by /opt/rbenv/version)

$ ruby -v
ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux]

$ which ruby
/opt/rbenv/shims/rub
```

## **3. Ruby on Railsのインストール**
### 3.1 インストール
```shell-session
$ gem install rails --no-ri --no-rdoc
```

いかのようにすることでバージョン指定可能

```shell-session
$ gem install rails -v 4.2.5 --no-ri --no-rdoc
```

### 3.2 確認
```shell-session
$ rails --version
Rails 4.2.5
```

## **4. プロジェクト作成**
### 4.1 railsのプロジェクトを作成
```shell-session
$ rails new project
```

## **5. 必要なGemのインストール**
### 5.1 GemfileへインストールするGemを記載
- なんかエラーが出てしまうので下記を追記してインストールします。

```shell-session
$ vim Gemfile
gem 'therubyracer'
```

### 5.2 `bundle install`
```shell-session
$ bundle install
Installing therubyracer 0.12.2 with native extensions
```

## **6. `scaffold`でModelやらもろもろ作成**
### 6.1 `scaffold`
```shell-session
$ rails g scaffold Note title:string content:text
```

### 6.2 `db:migrate`
```shell-session
$ rake db:migrate
== 20160215044755 CreateNotes: migrating ======================================
-- create_table(:notes)
   -> 0.0019s
== 20160215044755 CreateNotes: migrated (0.0020s) =============================
```

## **7. サーバ起動**
### 7.1 `rails server`
- `rails s`だとローカルからのアクセスしか許可されない為、下記のようなオプションを指定する。

```shell-session
$ rails s -b 0.0.0.0
=> Booting WEBrick
=> Rails 4.2.5 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[2016-02-15 13:51:22] INFO  WEBrick 1.3.1
[2016-02-15 13:51:22] INFO  ruby 2.2.3 (2015-08-18) [x86_64-linux]
[2016-02-15 13:51:22] INFO  WEBrick::HTTPServer#start: pid=4901 port=3000
```

## **8. CRUD実装確認**
### 8.1 ルーティングの確認
- `URI Pattern`の部分を`{IPAddress}:3000`の後ろにつけてアクセスしてあげれば該当ページへアクセスできます。
  - ※`/home/top`のページは作成していないのでアクセスできません。

```shell-session
$ rake routes
   Prefix Verb   URI Pattern               Controller#Action
    notes GET    /notes(.:format)          notes#index
          POST   /notes(.:format)          notes#create
 new_note GET    /notes/new(.:format)      notes#new
edit_note GET    /notes/:id/edit(.:format) notes#edit
     note GET    /notes/:id(.:format)      notes#show
          PATCH  /notes/:id(.:format)      notes#update
          PUT    /notes/:id(.:format)      notes#update
          DELETE /notes/:id(.:format)      notes#destroy
 home_top GET    /home/top(.:format)       home#top
```

### 8.2 `{IPaddress}:3000/notes`へアクセスし、CRUDの機能が実装されていることを確認
## **`Create`**
- 新規作成

>![WS000521.png](https://qiita-image-store.s3.amazonaws.com/0/79134/ae301bcb-45e7-a43d-cccf-040c2f6e2276.png)

- 内容作成

>![WS000514.png](https://qiita-image-store.s3.amazonaws.com/0/79134/9d6e443a-e76c-ae7c-9d25-1f3214310aa2.png)

- 作成確認

>![WS000515.png](https://qiita-image-store.s3.amazonaws.com/0/79134/a6d8b39a-e0cb-2302-971d-eb35ba3beda7.png)


## **`Read`**
- 内容確認選択

>![WS000522.png](https://qiita-image-store.s3.amazonaws.com/0/79134/75ee9174-babc-e601-ecd0-0bbe9a1e1994.png)

- 確認結果

>![WS000516.png](https://qiita-image-store.s3.amazonaws.com/0/79134/787b7c3f-d5c2-7f95-8b8b-bcca07c57810.png)


## **`Update`**
- 更新選択

>![WS000523.png](https://qiita-image-store.s3.amazonaws.com/0/79134/559bb038-3f83-031e-56cc-9dba4af089a8.png)

- 内容更新

>![WS000524.png](https://qiita-image-store.s3.amazonaws.com/0/79134/b70b89b8-b025-d0e3-7196-9e0383ec3836.png)

- 更新結果確認

>![WS000525.png](https://qiita-image-store.s3.amazonaws.com/0/79134/e8edd9be-2be2-ff39-7935-adb9cefad5de.png)


## **`Destroy`**
- 削除

>![WS000518.png](https://qiita-image-store.s3.amazonaws.com/0/79134/36032129-5201-5318-3a83-602b2a9aa719.png)

- 削除確認

>![WS000519.png](https://qiita-image-store.s3.amazonaws.com/0/79134/fba60caf-9bb2-a657-d9ff-0e5686379e66.png)

- 削除結果確認

>![WS000520.png](https://qiita-image-store.s3.amazonaws.com/0/79134/e1fbb67f-da80-537d-d043-8c332abcfdd0.png)

# 感想
実は`yum`かなんかでインストールしたと思われる`Ruby1.8`が入っていたことに気づかず、`gem`で`rails`がインストールできずハマっておりました・・・＾＾；
しかしRailsの便利さにびっくりですね。
応用すればホームページからWebサービスまで簡単に作成できそうですね！
今後はWebサーバに`Nginx`や`Apache`を使ったり、DBに`MySQL`を使ってみたりして、
なんか簡単なサービスやホームページ的なものを公開していければいいなとか夢見ています！