Rails マイグレーションファイルの作り方

マイグレーションファイルは、データベースの設計図のようなもの。

マイグレーションファイルの作り方はいくつかあるが、以下のようなコマンドを実行すると自動的に作られる(このコマンドの違いは昨日の記事を参照)。

$ bin/rails g scaffold User name:string email:string
$ bin/rails g model User name:string email:string

name:string email:stringの部分がカラム名:データ型である。

コマンドを実行すると、db/migrate/20200701020124_create_users.rb のようにファイル名に日付が入ったマイグレーションファイルができる。

ファイルの中身は以下のようになっている。

class CreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users do |t|
      t.string :name
      t.string :email

      t.timestamps
    end
  end
end

マイグレーションファイルだけを作る

データベースに変更を加えたいときなど、マイグレーションファイルだけを作りたいときは以下のコマンド(カラムを追加する例)。

$ bin/rails g migration AddAgeToUsers age:integer
$ bin/rails g migration Addカラム名Toテーブル名 カラム名:データ型

db/migrate/20200701021235_add_age_to_users.rb のようなマイグレーションファイルができる。

ファイルの中身は以下のようになっている。

class AddAgeToUsers < ActiveRecord::Migration[5.2]
  def change
    # カラムを追加 テーブル名, カラム名, データ型
    add_column :users, :age, :integer
  end
end

$ bin/rails g migration マイグレーションファイル名のように、カラム名などを指定せずにコマンドを実行すると、changeメソッドが空のマイグレーションファイルができるので、マイグレーションファイルを直接編集することもできる。

class AddAgeToUsers < ActiveRecord::Migration[5.2]
  def change
    # 自分で処理を書く
  end
end

マイグレーションファイルだけでは意味がない

$ bin/rails db:maigrate

このコマンドを実行することで、はじめてマイグレーションファイルの内容がデータベースに反映される。

マイグレーションファイルも$ rails db:migrateも、はじめは意味がわからず恐ろしかったが、何がどうなるのか理解できるとこわくない。便利。