【Rails】scaffoldを使用したアプリケーションの作成手順

先日、**scaffold**を初めて使ってみたのですが、めちゃめちゃ便利だったので、scaffoldを使用したRailsアプリケーションの作成手順について記事を書かせていただきます。

おそらく**「scaffoldってなんだ？」**という方もいらっしゃると思うので、まずはscaffoldについて簡単に。

##scaffoldとは？
**Railsの開発に必要なルーティング、コントローラ、ビューの作成に加え、基本的なアクションの設定なども自動ですべてやってくれる便利ツールのこと**

**【個人的に感じたscaffoldの良さ】**
**①コントローラの作成だけでなく、7つの基本アクションも自動で設定してくれる**
scaffoldで作成されたコントローラには、「index」「show」「new」「edit」「create」「update」「destroy」の7つのアクションが自動で定義されています。そのため、自分でアクションを設定しなくても、すぐにデータの参照や新規作成、変更、削除を行うことができます。

**②作成されたコントローラに対応するルーティングも自動で設定してくれる**
scaffoldコマンド後のroutes.rbには、「resources :コントローラ名」という記述が追加されており、新たに作成されたコントローラに対応するルーティングが自動で設定されています。

**③コントローラで定義されたアクションに対応するビューも全て自動生成してくれる**
scaffoldを使用した場合、コントローラで定義されたアクションに対応するビューファイルも全て自動で生成されます。

**④必要なモデルおよびマイグレーションファイルも自動生成してくれる**
scaffoldでは、コマンド入力時に「カラム名：データ型」を指定すると、指定された情報を含むモデルおよびマイグレーションファイルを自動生成してくれます。
そのため、あとは「$ rake db:migrate」コマンドを入力するだけで、データベースのテーブルも簡単に作成できます。（この辺りの詳細は後ほど）

→もちろん、scaffoldを使って世の中に出すアプリケーションをつくるのはちょっと違う（というより逆に無駄が多い）と思いますが、個人的には興味のある機能を試しに実装するための試作品をつくる上ではめちゃめちゃ便利だなと感じています。

ということで、以下scaffoldを使用したRailsアプリケーションの作成手順について記載します。
本当に簡単なので、もしよかったら実際に使ってみて下さい！

##scaffoldを使用したRailsアプリケーションの生成手順
**＜想定読者＞**
Railsを使用したアプリケーション開発の初学者
または、これからRailsを使用したアプリケーション開発を行いたいと考えている方

**＜環境やバージョン＞**
・MacOS
・Rails 5.2.3

**＜作成手順＞**
まずは、通常通りrails new（`$ rails new アプリケーション名 -d mysql`）でrailsアプリケーションを作成しましょう。
※例ではtodoリストのアプリケーションをつくる想定で「todo_list」というアプリケーション名にしています。

```:ターミナル
$ rails new todo_list -d mysql
```
コマンドを使用して作成したアプリケーション（todo_list）へ移動

```:ターミナル
$ cd todo_list
```

いよいよ本題のscaffoldを使用した各種ファイルの生成を行います。
scaffoldを使用する場合、ターミナルで以下のコマンドを入力します。
`$ rails generate scaffold モデル名 カラム名1:データ型1 カラム名2:データ型 2 …`
こうすることにより、ルーティング、コントローラ、ビューのファイルだけではなく、モデルやマイグレーションファイルの作成も自動で行なってくれます。
※例では、content、priority、limitの3つのカラムを作成するための設定を行なっています。

```:ターミナル
$ rails g scaffold todo content:text priority:string limit:date
```

これでscaffoldを使用したRailsアプリケーションの雛形は作成できました。
最後に、データベースの作成とテーブル作成を実施しましょう。

```:ターミナル
$ rake db:create
```

```:ターミナル
$ rake db:migrate
```

以上でscaffoldを使用したアプリケーションの作成手順は終了です。
いかがでした？めちゃめちゃ簡単じゃないですか？

ちなみに、ここでローカルのサーバにアクセスしてみると、以下のページが表示されるかと思います。

<img width="1437" alt="スクリーンショット 2019-10-10 16.26.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508644/acd508a1-e77f-cb55-8bec-59cda9b1cc9a.png">

「ん？たしかに必要なファイルは作成されたけど、ビューファイルに記載された内容がブラウザに表示されない、、」という方↓


そうなんです。各種アクションやビューに対応したルーティングの設定はされていますが、rootの設定はされないので、そこは個別設定しましょう。

```ruby:config/routes.rb
root to: "todos#index"
```

すると、以下のようにビューがきちんと表示されたかと思います。
これでもう完璧ですね！
<img width="1440" alt="スクリーンショット 2019-10-10 16.37.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508644/5fadf30b-b230-f2a2-2b37-c12ed53442db.png">

参考までにですが、今回作成したtodoリストの場合、その他のビューはこんな感じになります。
**＜todoの新規作成ページ＞**
![alt](https://gyazo.com/11f1ae7937d0aaae50d081466122c169/raw)

**＜todoリストの一覧ページ＞**
<img width="1440" alt="スクリーンショット 2019-10-10 16.51.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508644/9d53ca14-e096-bbf9-1fb6-82408fef1408.png">

それでは、最後になりましたが、今回使用したscaffoldで生成された（もしくは追加、変更された）ファイルを記載しますので、もし興味があれば今後のアプリケーション開発の参考にしてみてください。

**①コントローラ**
・app/controllers/todos_controller.rb

**②ルーティング**
・config/routes.rb
※ファイルの中には「resources :todos」という記述が自動追加
 
**③ビュー**
・app/views/todos/index.html.erb
・app/views/todos/edit.html.erb
・app/views/todos/show.html.erb
・app/views/todos/new.html.erb
・app/views/todos/_form.html.erb

**④モデル、およびマイグレーションファイル**
・db/migrate/2019xxxxxxx_create_todos.rb
・app/models/todo.rb

【参考記事】
覚えておくと超便利！Ruby on Railsのscaffoldの使い方【初心者向け】
https://techacademy.jp/magazine/7204