hellonagi

Rails 7 マイグレーションコマンド 自分用チートシート

マイグレーションファイルを扱う時に、いつもコマンドを忘れてしまうので、この記事では自分用にまとめたいと思います。 コマンドで指定するマイグレーションクラス名はパスカルケースでもスネークケースでもOKです。 ただし、慣習的にパスカルケースで書くと良いそうです。

# どちらでも出力される内容は変わりません。
rails generate migration CreateTableName
rails generate migration create_table_name

テーブル作成

rails generate migration CreateTableName column1:datatype column2:datatype

# 例1: usersテーブルを作成
rails generate migration CreateUsers

#出力
class CreateUsers < ActiveRecord::Migration[7.1]
  def change
    create_table :users do |t|
      # 手動で記述

      t.timestamps
    end
  end
end

# 例2: カラムを指定してusersテーブルを作成
rails generate migration CreateUsers name:string email:string:index age:integer

# 出力
class CreateUsers < ActiveRecord::Migration[7.1]
  def change
    create_table :users do |t|
      t.string :name
      t.string :email
      t.integer :age

      t.timestamps
    end
    add_index :users, :email
  end
end

既存のテーブルにカラムを追加

rails generate migration AddColumnNameToTableName column_name:data_type

# 例1: usersテーブルにis_adminカラムを追加
rails generate migration AddIsAdminToUsers is_admin:boolean

# 出力
class AddIsAdminToUsers < ActiveRecord::Migration[7.1]
  def change
    add_column :users, :is_admin, :boolean
  end
end

カラム名変更、カラムのデータ型を変更

# 例1: usersテーブルを変更
rails generate migration ChangeColumnInUsers

# 出力
class ChangeColumnInUsers < ActiveRecord::Migration[7.1]
  def change
    # 手動で記述
  end
end

# 記述例
class ChangeColumnInUsers < ActiveRecord::Migration[7.1]
  def change
    # カラム名変更
    rename_column :users, :name, :display_name
    # カラムの型変更
    change_column :users, :age, :string
  end
end

カラム削除

rails generate migration RemoveColumnNameFromTableName column_name:data_type

# 例1: usersテーブルからageカラムを削除
rails generate migration RemoveAgeFromUsers age:string

# 出力
class RemoveAgeFromUsers < ActiveRecord::Migration[7.1]
  def change
    remove_column :users, :age, :string
  end
end