Railsのジェネレーターでテーブルを作成するための、マイグレーションファイルを作成するコマンドについて簡単にまとめてみた

Railsのジェネレーターでテーブルを作成するための、
マイグレーションファイルを作成するコマンドは2種類あるらしいので、

`rails g migration CreateXXX`
`rails g model XXX`

整理するために、簡単にまとめてみた

## rails g migration CreateXXX

マイグレーションファイルのみを作成する場合には、
`rails g migration`を使用する

今回はテーブルを作成するマイグレーションファイルを作成したので、
`CreateXXX`を後につける（XXXは作成したいテーブル名を設定）

例えば、下記を実行すると、

```:sh
rails g migration CreateUsers
```

下記のマイグレーションファイルが作成される

```:/db/migrate/(作成時間)_create_users.rb
class CreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users do |t|
    end
  end
end
```

`create_table :users`が、
テーブルを作成するための部分になる

`CreateXXX`の後に、テーブルで作成したいカラム名を指定すると、

```:sh
rails g migration CreateUsers name:string
```

```:/db/migrate/(作成時間)_create_users.rb
class CreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users do |t|
      t.string :name
    end
  end
end
```

`t.string :name`がカラムを追加するための部分になる

カラムを複数してすると、

```:sh
rails g migration CreateUsers name:string age:integer
```

```:/db/migrate/(作成時間)_create_users.rb
class CreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users do |t|
      t.string :name
      t.integer :age
    end
  end
end
```

複数カラムを追加するように記述される
`t.string :name`
`t.integer :age`

ちなみに、カラムのデータ型の部分をしていないと、

```:sh
rails g migration CreateUsers name age
```

```:/db/migrate/(作成時間)_create_users.rb
class CreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users do |t|
      t.string :name
      t.string :age
    end
  end
end
```

デフォルトでstring型が設定される
`t.string :name`
`t.string :age`

## rails g model XXX

テーブルを作成するマイグレーションファイルを作成するもう一つのコマンドが、
`rails g model XXX`（XXXは作成したいテーブル名を設定）

下記を実行すると、

```:sh
rails g model Users
```

4つファイルが作成される

`/app/models/user.rb`
`/db/migrate/20190818035207_create_users.rb`
`/test/fixtures/users.yml`
`/test/models/user_test.rb`

* O/Rマッピングファイル

DBに対してデータを登録したり、取得したりするためのファイル
(ApplicationRecordについては、別の記事でまとめる予定)

```:/app/models/user.rb
class User < ApplicationRecord
end
```

* マイグレーションファイル

```:/db/migrate/(作成時間)_create_users.rb
class CreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users do |t|

      t.timestamps
    end
  end
end
```

`t.timestamps`で、
レコードの作成日時と更新日時のカラムが作成される
`created_at`
`updated_at`

* テストデータを作成するためのファイル

(fixtureについては、別の記事でまとめる予定)

```:/test/fixtures/users.yml
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html

# This model initially had no columns defined. If you add columns to the
# model remove the '{}' from the fixture names and add the columns immediately
# below each fixture, per the syntax in the comments below
#
one: {}
# column: value
#
two: {}
# column: value
```

* テストケースを書くファイル

(テストケースについては、別の記事でまとめる予定)

```:/test/models/user_test.rb
require 'test_helper'

class UserTest < ActiveSupport::TestCase
  # test "the truth" do
  #   assert true
  # end
end
```

カラムを後に指定すると、

```:sh
rails g model Users name:string age:integer
```

```:/db/migrate/(作成時間)_create_users.rb
class CreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users do |t|
      t.string :name
      t.integer :age

      t.timestamps
    end
  end
end
```

カラムが追加される
`t.string :name`
`t.integer :age`

```:/test/fixtures/users.yml
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html

one:
  name: MyString
  age: 1

two:
  name: MyString
  age: 1
```

テストデータの雛形が追加されてる

## 終わり

はじめにテーブル作るなら、`rails g model`が楽なのかな？