Output Diary

プログラミング × 読書 のアウトプットを発信しています

【Rails】マイグレーション

緑, ミント, 茶

 

今日はマイグレーションについて調べたものをまとめていきます。

 

マイグレーションとは 

 

マイグレーション(migration)は、

Active Recordの機能の1つです。

 

通常テーブルを操作したい場合は、SQLを書かなればいけませんが、

マイグレーションにはSQLを書くことなく、Rubyのデータベース内にテーブル作成することが出来る」機能を持っています。

 

 SQLを書く必要がない理由

 

ActiveRecordという機能がRubySQLに自動翻訳しています。

この機能により、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初心者がつまずきやすい「マイグレーション」

【Rails】マイグレーションファイルを徹底解説! | Pikawaka - ピカ1わかりやすいプログラミング用語サイト