【Rails】マイグレーション
今日は「マイグレーション」について調べたものをまとめていきます。
マイグレーションとは
マイグレーション(migration)は、
Active Recordの機能の1つです。
通常テーブルを操作したい場合は、SQLを書かなればいけませんが、
マイグレーションには「SQLを書くことなく、Rubyのデータベース内にテーブル作成することが出来る」機能を持っています。
SQLを書く必要がない理由
ActiveRecordという機能がRubyをSQLに自動翻訳しています。
この機能により、Rubyが記載された所定のファイルを使い翻訳処理を経由してSQLでデータベース操作が可能です。
SQLに翻訳される元となるRubyで記載された命令文を、マイグレーションファイルというものに記載します。
❏ マイグレーションファイルとは
マイグレーションファイルとは、データベースの設計図です。
このファイルを実行すると、記述した内容がデータベースに反映されます。
❏ 実行の仕方
$rails db:migrate
このコマンドは、
マイグレーションファイルを実行し、データベースに反映させるためのコマンドです。
❏ schema_migrationsテーブル
これは、migrateが実行されると自動でデータベースに作成されるテーブルです。
マイグレーションファイルのバージョンがこのテーブルにどんどん保存されていきます。
マイグレーションファイルは`20XXXXXXXXXXXX_hoge_hoge.rb`のような名前で作成されます。
`20XXXXXXXXXXXX`の部分には日時の情報が自動的に入り、この部分がバージョンを表します。
❏ マイグレーションファイルの状態確認
$ rails db:migrate:status
scheme_migrationsテーブルにversionがあればup、なければdownと表示されます。
< 間違えてカラムを作成してしまったとき>
$ rails db:rollback
このコマンドを実行すると、最新のマイグレーションファイルのバージョンがscheme_migrationsテーブルから削除されます。
upからdownになったことを確認したあと、マイグレーションファイルを修正し、再度
rails db:migrate
コマンドを実行します。
複数のマイグレーションファイルをrollbackさせたいときには、以下のように記述します。
$ rails db:rollback STEP=3
<rollbackする際の注意点>
マイグレーションファイルを削除するときは注意が必要です。
マイグレーションファイルはデータベースを作成した歴史であり、実行されているマイグレーションファイルは絶対に編集したり削除したりしてはいけません。
(私は何もわかっていないまま編集&削除して、大変な思いをしました笑)
エラーのパレード状態になります。
<間違って削除してしまったときは>
一旦、rails db:migrate:status
コマンドでマイグレーションファイルの状態を確認します。おそらく、NO FILE
と表示されます。
なぜNO FILE
と表示されるかというと、
schema_migrationsテーブルにバージョンが保存されているためです。
なので、schema_migrationsテーブルから削除してしまったマイグレーションファイルのレコードを削除すれば、NO FILE
の表示は消えます。
スキーマファイル
マイグレーションが実行されると、dbフォルダにschema.rb
というファイルが作成されます。これをスキーマファイルといいます。
スキーマファイルにはschema_migrationsテーブルの最後のレコードのversionが記録されます。
参考
Active Record マイグレーション - Railsガイド
DIVE INTO CODE | Railsにおけるマイグレーションとは
【Rails】マイグレーションファイルを徹底解説! | Pikawaka - ピカ1わかりやすいプログラミング用語サイト