簡単なアプリケーションを作ってみる（scaffoldとは、そしてUserをつくりたい）

## railsでは簡単にこんなことができる！
「Ruby on RailsとはRubyのフレームワークだ」と聞きますね！
rails を使うとWebアプリケーションがつくれますが、rails を勉強していて、 <img width=100 alt="スクリーンショット 2020-02-07 18.34.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553732/80c0fbe6-1870-b6a1-60c8-e6cae4dfb42b.png">


本当に簡単に（魔法のように）、簡単な（簡易的な）アプリケーションを作る方法を知りました。
それが、**scaffoldジェネレータ**を利用した方法です。紹介したいと思います〜。

## scaffoldとは？
rails のアプリケーションでは、MVC（モデル、ビュー、コントローラー）を使って一つ一つ作成していき、ルーティングを設定しますが、そういうのをまとめて自動的に作ってくれるのが**scaffoldジェネレータ**なのですね。




## どんなときに使う？メリット・デメリットは？
（私の中では）**scaffoldジェネレータ**を使用するときは、このような時があげられます。

- アプリケーションをすばやく作りたい！
- アプリケーションを手っ取り早く作りたい！
- アプリケーションをかーんたんに作りたい！  
- アプリケーションを試しに作りたい！

メリットはこちらです。


- 技術力なくてもやってみたら作れる
- アプリケーションの雛形となる部分を簡単に作成できる
- 開発が効率的に進む
- なので、とても便利！
- rails の大まかな概要がある程度わかる

もちろんデメリットもあります。

- あやふやな知識のままでもサービスを作れてしまう
- なので、rails の深い理解が困難である




## こんなのを作ってみる

ユーザーを作成し、投稿ができます。
ユーザーや投稿を、編集・削除できます。
### アプリケーションの骨組みを作成する
ターミナルでお好きなディレクトリに、下のコマンドを実行し、アプリケーションの骨組みを作成します。

```
$ rails new greeting_app
$ cd greeting_app
```




### ユーザーモデルを作る
アプリケーションのユーザーで使うモデルを作成します。
文字列には`string`を、整数には`integer`という型を使います！
`integer`型のidは、重複のないキーを割り当てられます。

|カラム名 |型      |
|-------|--------|
|id     |integer |
|name   |string  |
|email  |string  |

Usersリソースを**scaffoldジェネレータ**で生成します。
`scaffold`の引数には、リソース名を単数形にしたもの（user）にします。
データモデルの属性も一緒に追加します。
（idカラムはrailsによって自動的に自動的に追加されます！）

```
$ rails generate scaffold User name:string email:string
```

マイグレーションという１つのファイルが生成されました！（↓）
エディタで見ると、ファイル名の先頭には生成された時間が追加されているのがわかります。
そして、さっきのコマンドではオプションを追加していない`t.timestamps`が作られています。
これは、`created_at`と`updated_at`という２つのカラムを作成してくれます。

```db/migrate/[timestamp]_create_users.rb
class CreateUsers < ActiveRecord::Migration[6.0]
  def change
    create_table :users do |t|
      t.string :name
      t.string :email

      t.timestamps
    end
  end
end
```

次のコマンドで、データベースにテーブルを作ります。

```
$ rails db:migrate
```


### ブラウザで見る
生成されたページをブラウザで見てみましょう！
別のターミナルで`greeting_app`に移動し、ローカルサーバーを立ち上げます。

```
$ rails server
```

http://localhost:3000/ をブラウザで開きます。
このような画面になっているとOKですね！
🗣「わーい！ Railsを使用しています！」って書いてます。
<img width=80% alt="わーい" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553732/8da7f711-22ea-ffb1-6288-e3268bb3fbff.png">

http://localhost:3000/users を開いて、ユーザー一覧を見てみましょう！
`/users`をつけると、insexアクション（ユーザー一覧）が呼び出されます。

<img width=80% alt="スクリーンショット 2020-02-07 19.21.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553732/9faa37e2-05df-9cf2-79ae-d9992c6dfa09.png">


まだユーザーは１人もつくられていないので、「New User」リンクを押し、「Name」「Email」を入力、「Create User」ボタンを押して作ってみましょう！作れました！
<img width=80% alt="スクリーンショット 2020-02-07 18.34.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553732/4477ec9c-ccea-4c3f-ee4a-5d23bb516276.png">



※ちなみに、ユーザーをCreateした直後に画面上にでる緑の文字「User was successfully created.」は`flash`という機能を使っています！
<img width=80% alt="スクリーンショット 2020-02-07 18.34.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553732/09ae5bbc-8280-30b0-e18e-c5093c384f5a.png">

画面にリンクが色々あるのでなんとなく分かると思いますが、この時点でユーザーの編集も削除もできますね！

### ユーザーに関するページ
ページごとにURLも作られています。

| URL   　　      | アクション  | ページ内容                  |
|----------------|----------|---------------------------|
| /users         | index    | すべてのユーザーを一覧するページ
| /users/1       | show     | idが1のユーザーを表示するページ
| /users/new     | new      | 新規ユーザーを作成するページ
| /users/1/edit  | edit     | id=1のユーザーを編集するページ



### URLとアクションの組み合わせを変更する
今のままでは、`/`にアクセスしたときに「わーい！ Railsを使用しています！」のままになっていて、`/users`まで入力しないとアプリケーションを開けません。
そこで、ルーティングを変更してみましょう！（３行目を追加します。）

```config/routes.rb
Rails.application.routes.draw do
  resources :users
  root 'users#index'
end
```
これで、「わーい！ Railsを使用しています！」の代わりに、indexアクションが呼び出されることになります！

※scaffoldで生成されたユーザーコントローラー内のアクションは、`app/controllers/users_controller.rb`で確認することができます。ここを深く見てみるとどういうふうにページを表示しているかが見れて面白いですね〜。

## つづくよ
ポストモデルも**scaffoldジェネレータ**を利用して作っていきたいのですが、長くなってしまったので、次か、次の次かの記事に書こうと思います！てげっててすみません。
↓こちら参考にしました🎒
[scaffoldを利用した開発(1)](https://www.techscore.com/tech/Ruby/Rails/quick-start/Rails4/4-1/)
[scaffoldを利用した開発(2)](https://www.techscore.com/tech/Ruby/Rails/quick-start/Rails4/4-2/)
[rails tutorial](https://railstutorial.jp/) 「魔法のように」というのは、rails tutorial で使われていた言葉でした！

<img width=100 alt="わーい" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553732/eb85170b-c69e-31d0-ac4c-b67f61659e51.png"><img width=100 alt="わーい" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553732/4f5dca64-f805-9208-b0b1-e835e182215a.png"><img width=100 alt="わーい" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553732/cb8307c1-34cc-4b02-6abd-8b16991ba61f.png"><img width=100 alt="わーい" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553732/1c2cd4e9-3a1b-34c9-bdb3-1083e8357a7a.png"><img width=100 alt="わーい" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553732/d824cfb4-10c9-eb4a-d4b6-16f36ef45026.png">


<img width=200 alt="わーい" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553732/0feb9049-781b-1ddd-d4d4-0e7c4a8e2dd2.png">