👌

Railsのマイグレーション名のルール一覧

2 min read

bin/rails g migration <マイグレーション名> <フィールド名:データ型>でマイグレーションファイルを作成するのはRailsユーザーにはお馴染みですが、マイグレーション名のパターンによってマイグレーションファイルのパターンは変わってきます。

これもRailsユーザーにはお馴染みなのかもしれませんが、RailsチュートリアルやRailsの書籍にはあまり書かれていなかったので、パターンをまとめておきます。

マイグレーション名のパターン 生成されるマイグレーションファイル
add_<*>_to_TABLENAME add_column
remove_<*>_from_TABLENAME remove_column
create_TABLENAME create_table
<*>join_table create_join_table

RailsガイドのActive Record マイグレーションを確認すると、マイグレーション名のパターンによって生成されるマイグレーションファイルのパターンが異なっているのがわかります。

add_<>_to_TABLENAME

add_<>_to_TABLENAMEではadd_columnが作られます。

$ rails generate migration AddPartNumberToProducts part_number:string
class AddPartNumberToProducts < ActiveRecord::Migration[5.0]
  def change
    add_column :products, :part_number, :string
  end
end

remove_<>_from_TABLENAME

remove_<>_from_TABLENAMEではremove_columnが作られます。

$ rails generate migration RemovePartNumberFromProducts part_number:string
class RemovePartNumberFromProducts < ActiveRecord::Migration[5.0]
  def change
    remove_column :products, :part_number, :string
  end
end

create_TABLENAME

create_TABLENAMEではcreate_tableが作られます。

$ rails generate migration CreateProducts name:string 
class CreateProducts < ActiveRecord::Migration[5.0]
  def change
    create_table :products do |t|
      t.string :name
      t.string :part_number

      t.timestamps
    end
  end
end

create_join_table

create_join_table_<>だとcreate_join_tableが作られます。

$ rails g migration CreateJoinTableCustomerProduct customer product
class CreateJoinTableCustomerProduct < ActiveRecord::Migration[5.0]
  def change
    create_join_table :customers, :products do |t|
      # t.index [:customer_id, :product_id]
      # t.index [:product_id, :customer_id]
    end
  end
end

マイグレーションのメソッド

メソッド 説明
add_column カラムの追加
remove_column カラムの削除
change_column カラムのデータ型・オプションを変更
change_column_null カラムのnull許可設定を変更
change_column_default カラムのデフォルト値を変更
rename_column カラム名を変更
add_index インデックスの追加
remove_index インデックスの削除
create_table テーブルの作成
drop_table テーブルの削除
rename_table テーブル名の変更

スキーマファイルの役割

db/schema.rbがスキーマファイルです。
過去に実行したマイグレーションの結果がすべて統合されたものです。

schema.rbはRubyのDSLですが、SQLとして保存することもできます。

config/application.rb内でconfig.active_record.schema_format = :sqlを指定することでスキーマ情報をSQLに変更できます。

Discussion

ログインするとコメントできます