テクノロジー
2018年12月28日マイグレーションとは?

マイグレーションとは
一言で表現すると、Rubyの記述(= マイグレーションファイル)でテーブル操作をしてしまおうとするものです。「テーブル操作」とは以下を指します。
- テーブルを作成する
- カラムを削除する
- 外部キーを設定する
- カラムの名前や型を変更する
- テーブルを削除する
マイグレーションはよく「テーブルを作成するための仕組み」と勘違いされがちなので、認識を間違えないように気をつけましょう。
マイグレーションファイルはRailsアプリケーションのdb/migrateディレクトリに存在します。
仕組みについては後ほど触れていきます。
db:migrate と db:create の違い
この両者は混在しやすいため、定義をしっかり覚えましょう。
db:migrate
テーブルはデータベースと言われる「入れ物」に格納されます。つまりdb:migrateコマンドは、マイグレーションファイルを元にデータベースの中にあるテーブル操作を行うコマンドです。
db:create
一方でdb:createコマンドは、名前の通りデータベース自体を作成するコマンドです。しかし「どのファイルを元にデータベースを作成するか?」と受講生に質問したら、ほとんどの方が答えられなかったので、以下のファイルも一緒に覚えてしまいましょう。
config/database.yml
ここにはDBの種類やポート番号、ユーザー名やパスワードの設定が載っています。このdatabse.ymlを元にデータベースを作成するのがdb:createコマンドです。
マイグレーションファイルの生成
マイグレーションファイルは「モデル」を作ったタイミングで生成されます。つまり以下のコマンドを打ったタイミングで生成されます。
bin/rails g model ○○○○○○
さらにマイグレーションファイルは単体で生成することも可能です。これは次回に触れていきます。
bin/rails g migration ○○○○○○
マイグレーションの仕組み
マイグレーションファイルは「日時」で管理されます。そのため、マイグレーションファイルのファイル名に関するルールが存在するのです。
Railsアプリケーション
一方通行です。
以下のコマンドで未反映のマイグレーションファイルを反映させます。
bin/rake db:migrate (Rails 4.x)
bin/rails db:migrate (Rails 5.x)
するとマイグレーションが実行され、schema.rbが自動的に更新されます。
マイグレーションの実行順序を知らない方は反映済のマイグレーションを編集し、rake db:migrateを実行したが何も起こらないと言ってきます。
そのため、マイグレーションの実行順序は正しく理解する必要があるのです。
いかがでしたでしょうか?次回はマイグレーションのオプションやマイグレーションファイルの書き方について触れていきます!