<Ruby on Rails> migrationの管理

マイグレーションの実行

実行されていないchangeアタはupメソッドを実行する。
マイグレーションの実行順序は日付に基づく。

# マイグレーションを実行するrailsコマンド。db:schema:dumpコマンドも同時に呼び出される
$ rails db:migrate

db:schema:dumpコマンドは、db/schema.rbスキーマファイルを更新し、
スキーマ(DB構造の設計図)がデータベースの構造に一致するようにする。
articleモデル(title:string, text:text)をgenerateした場合、rails db:migrate実行で作成されるschema.rbは以下の通り。

# db/schema.rb
create_table "articles", force: :cascade do |t|
    t.string "title"
    t.text "text"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
end

migrationの状態を確認

migrationのupまたはdown状態を確認するには以下のコマンドを使用する。

$ rails db:migrate:status


例えば、userモデルを作成するとき、以下のようになる。

# rails g model user前
database: db/development.sqlite3(以降省略)

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20201106213850  Create articles
   up     20201107132603  Create comments

# rails g model user後
 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20201106213850  Create articles
   up     20201107132603  Create comments
  down    20201123074249  Create users

# rails db:migrate後
 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20201106213850  Create articles
   up     20201107132603  Create comments
   up     20201123074249  Create users


rails db:rollbackすると以下のようになる。

Status   Migration ID    Migration Name
--------------------------------------------------
   up     20201106213850  Create articles
   up     20201107132603  Create comments
  down    20201123074249  Create users

rails db:rollbackせずにmigrationを消してしまうと、migration nameの箇所がno fileという記載になり、
rails db:migrateやrollbackなどのコマンドが全てエラーになってしまう。
その時はtouchコマンドでno fileになっているmigration fileを新規作成し、
中にデフォルトの情報を入力して仮のfileを作成し、rollbackをさせてrails db:versionで表示される最新migration fileを合わせ、削除する等を行うことでエラーを回避できる。

最新のversionを確認

$ rails db:version

この状態の時にコマンドを使用すると、以下のようになる。

 # rails db:migrate:status
 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20201106213850  Create articles
   up     20201107132603  Create comments
  down    20201123074249  Create users

# rails db:version
Current version: 20201107132603


参考文献:Active Record マイグレーション - Railsガイド