テクノロジー

2018年12月28日
  • #Rails

マイグレーションとは?

Aws4 request&x amz signedheaders=host&x amz signature=4f56fb018b875b49f945722100aa780b74df8e668b75b6d416042cc41fdbda9d

マイグレーションとは

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

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

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

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

https://diveintocode.gyazo.com/24c6fd00238943f6135ae61324cd085e

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

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アプリケーション
一方通行です。

https://diveintocode.gyazo.com/3c4de9b6f488daf2437c674dc38fd142

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

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

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

https://diveintocode.gyazo.com/8ad85524075804cf0afa98df40ddbd22

マイグレーションの実行順序を知らない方は反映済のマイグレーションを編集し、rake db:migrateを実行したが何も起こらないと言ってきます。
そのため、マイグレーションの実行順序は正しく理解する必要があるのです。

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

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