テクノロジー

2022年1月19日

マイグレーションとは?

マイグレーションとは

一言で表現すると、Rubyの記述(= マイグレーションファイル)でデータベースのテーブル操作をしてしまおうとするものです。「テーブル操作」とは以下を指します。

  • テーブルを作成する
  • テーブルを削除する
  • カラムを追加する
  • カラムを削除する
  • カラムの名前やデータ型を変更する
  • 外部キーを設定する

マイグレーションはよく「テーブルを作成するための仕組み」と勘違いされがちなので、認識を間違えないように気をつけましょう。

SQLを使い慣れていない方でも、Railsを使用することで直感的にデータベースを操作することが可能です。

マイグレーションファイルとは

こちらも一言で表現すると、データベースの設計図です。これを用いてデータベースに加える変更内容を設定していきます。

マイグレーションファイルはRailsアプリケーションのdb/migrateディレクトリに存在します。

https://t.gyazo.com/teams/diveintocode/24c6fd00238943f6135ae61324cd085e.png

仕組みについては後ほど触れていきます。

db:migrate と db:create の違い

この両者は混在しやすいため、定義をしっかり覚えましょう。

db:migrate

テーブルはデータベースと言われる「入れ物」に格納されます。つまりdb:migrateコマンドは、マイグレーションファイルを元にデータベースの中にあるテーブル操作を行うコマンドです。

db:create

一方でdb:createコマンドは、名前の通りデータベース自体を作成するコマンドです。しかし「どのファイルを元にデータベースを作成するか?」と受講生に質問したら、ほとんどの方が答えられなかったので、以下のファイルも一緒に覚えてしまいましょう。

config/database.yml

ここにはデータベースの種類やポート番号、ユーザー名やパスワードの設定が載っています。このdatabse.ymlを元にデータベースを作成するのがdb:createコマンドです。

マイグレーションファイルの生成

マイグレーションファイルは「モデル」を作ったタイミングで生成されます。つまり以下のコマンドを打ったタイミングで生成されます。

bin/rails g model ○○○○○○

さらにマイグレーションファイルは単体で生成することも可能です。これは次回に触れていきます。

bin/rails g migration ○○○○○○

マイグレーションファイルはRailsが用意している上記のrails generateコマンドで生成するようにしましょう。

コマンドを使用せずに、ルールを破って手動で作成することも可能ですが、後々のファイル管理が煩雑になってしまうのでコマンドを使用しましょう。

マイグレーションの仕組み

マイグレーションファイルは「ファイルが作成された日時」で管理されます。そのため、ファイルの実行順に関するルールが存在するのです。

Railsアプリケーション ファイル名は作成された日時から始まっており、昇順で並んでいます。読み込みは古いものから新しいものへと一方通行で行われます。

https://t.gyazo.com/teams/diveintocode/3c4de9b6f488daf2437c674dc38fd142.png

以下のコマンドで未反映のマイグレーションファイルを反映させます。

Rails4系から多少コマンドに差異はありますが、現在のRails7でもどちらのコマンドも使用できます。

基本は新しいコマンドを使用していきましょう。

bin/rake db:migrate (Rails 4.x)
bin/rails db:migrate (Rails 5.x, 6.x, 7.x)

するとマイグレーションが実行され、schema.rbが自動的に更新されます。

https://t.gyazo.com/teams/diveintocode/8ad85524075804cf0afa98df40ddbd22.png

マイグレーションファイルを作成してからデータベースに設定を反映させるまでのステップ


  1. モデルとマイグレーションファイルを作成
  2. マイグレーションファイルの編集
  3. bin/rails db:migrateを実行してマイグレーションファイルの内容をデータベースに反映

マイグレーションファイルの実行順序を理解していないと、既にデータベースに反映済みのマイグレーションファイルを編集し、bin/rails db:migrateを実行したが、何もデータベースに反映されないといったことが発生してしまいます。

また、実行済みのマイグレーションファイルを編集してデータベースに変更を反映しないままにしてしまうと、後々のエラーに繋がることも多いので注意しておきましょう。

いかがでしょうか?次回はマイグレーションのオプションやマイグレーションファイルの書き方について触れていきます!

この技術についてさらに深く学びたい方は 1週間無料! DIVER Learnings Rails入門シリーズで学習できます。是非ご利用ください。

DIVE INTO CODEのことをもっと知ってみませんか?