【Rails入門】generate migrationコマンドの分かりやすいまとめ

こんにちは!システムエンジニアのオオイシです。

Ruby on Railsのgenerate migrationコマンドをご存知ですか?

generate migrationコマンドは、データベーステーブルの継続的な追加・変更するためのマイグレーション(migration)ファイルを作成します。

この記事では

  • generate migrationコマンドとは
  • generate migrationコマンドを使ってみよう

といった基本的な解説から、

  • migrationクラスの命名規則
  • migrationファイルを作成する2つの方法
  • migrationファイルのデータ型一覧
  • migrationファイルのカラムオプション一覧
  • migrationファイルの使い方まとめ
  • migrationを管理するコマンド

などの応用的な使い方に関しても解説していきます。

今回はそんなgenerate migrationコマンドの使い方をわかりやすく解説します!

generate migrationコマンドとは

generate migrationとは、マイグレーション(migration)ファイルを作成するためのrailsコマンドです。

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

  • データベーステーブルのカラムの追加・変更・削除
  • indexの追加・変更・削除
  • カラムの名称やデータ型の変更

を実行するためのプログラムファイルのことです。

このマイグレーションファイルは、Ruby on Railsの機能の1つであるマイグレーション(migration)が実行します。

rails_g_migration5

マイグレーション(migration)は、データベーススキーマへの追加・変更・削除を何度でも繰り返し実行できることが特徴です。

それでは、次項でgenerate migrationコマンドを使って見ましょう!

generate migrationコマンドを使ってみよう

generate migrationコマンドの使い方は、

  • bin/rails generate migration マイグレーションクラス名 カラム名:型 …
  • bin/rails g migration マイグレーションクラス名 カラム名:型 …

で実行できます。

「マイグレーションクラス名」は、

  • キャメルケース →  “CreateSample”
  • スネークケース → “create_sample”

のどちらの命名方法でも使えます。

それでは、「g migration コマンド」を実行してサンプルテーブル(samples)を作成してみましょう。

コマンド:

マイグレーションファイル:

このようにマイグレーションファイルが作成されました。

データベースに反映して見ましょう。なお、利用するRDMSはMySQLとします。

マイグレート(bin/rails db:migrate):

MySQLでテーブルの定義を確認してみます。

テーブル定義:

このようにサンプルテーブル(samples)が作成されていることが確認できました。

次項では「bin/rails g migration マイグレーションクラス名」の命名規則について解説して行きます。

なお、migrationの基礎については、こちらで解説しているので参考にしてみてください。

migrationとの関係が深いモデル(model)の解説については、こちらで解説しています。

migrationファイルの設定一覧

ここでは、migrationファイルの命名規則や指定できるデータ型、データベースカラムのオプションについて一覧でまとめてみました。

migrationクラスの命名規則

マイグレーションクラス名は、Railsの命名規則にしたがって次のように命名することをオススメします。

操作内容クラス名コマンド実行例
テーブルを作成Createテーブル名bin/rails g migration CreateSample
テーブルの削除Dropテーブル名bin/rails g migration DropSample
カラムの追加Addカラム名Toテーブル名bin/rails g migration AddColumnToSample
カラムの削除Removeカラム名Fromテーブル名bin/rails g migration RemoveColmnFromSample
カラム名の変更RenameFrom変更前カラム名To変更後カラム名Onテーブル名bin/rails g migration RenameFromBeforeColumnToAfterCoulumnOnSample
カラムの定義を変更Change変更するカラムOnテーブル名bin/rails g migration ChangeColumnOnSample
Indexの作成AddIndexカラム名Toテーブル名bin/rails g migration AddIndexColumnToSample
Indexの削除RemoveIndexカラム名Fromサンプルbin/rails g migration RemoveIndexColumnFromSample

Railsの命名規則に従うと、いつどのようにマイグレートしたかが時系列でわかるので、開発中のテーブル定義のやり直しが容易です。

migrationファイルを作成する2つの方法

マイグレーションファイルを作成するには2つの方法があります。

  1. 「bin/rails g migration クラス名 カラム名:型」で引数にテーブル定義を渡す
  2. 「bin/rails g migration クラス名」でテーブル定義をマイグレーションファイルに記述

前者は、簡単なテーブル操作の場合は使い勝手がよいですが、複雑なテーブル定義の場合は煩雑で使いにくいため、後者の方法で作成することをオススメします。

以降ではマイグレーションファイルの記述方法の詳細について解説していきます。

migrationファイルのデータ型一覧

マイグレーションファイルで扱えるデータ型を一覧にまとめました。

MySQLでのテーブル定義の状態も比較したので確認してみてください。

マイグレーションファイル:

テーブル定義:

なお、PostgreSQLやSQLiteなどの利用するRDMSの違いを意識しなくてもいいようにマイグレートは行われているので、データベースごとの記述を変える必要はありません。

便利ですね!

migrationファイルのカラムオプション一覧

マイグレーションファイルは、NULL制約、デフォルト値、長さなどのカラムオプションを任意に定義することができます。

マイグレーションファイル:

テーブル定義:

このように、カラムオプションを定義することができました。

つづいて、マイグレーションファイルのいろいろな書き方について詳しく解説していきます。

migrationファイルの使い方まとめ

ここでは、マイグレーションファイルの詳しい書き方をまとめました。

マイグレーションファイルの基本構造

「bin/rails g migration マイグレーションクラス名」コマンドを実行すると空のchangeメソッドが定義されたマイグレーションファイルが作成されます。

具体的なテーブル追加などのテーブル定義するためにはchangeメソッドの内容を記述する必要があります。

次項を参照ください。

データベーステーブルへの定義メソッド一覧

changeメソッド内に記述できるテーブル定義のためのメソッド一覧は次のとおりです。

メソッド説明簡単な例
create_tableテーブルの作成create_table :テーブル名 do |t|
t.型 :カラム名
end
drop_tableテーブルの削除drop_table :テーブル名
add_columnカラムの追加add_column :テーブル名, :カラム名, :型
remove_column
カラムの削除remove_column :テーブル名, :カラム名
change_columnカラムの定義の変更change_column :テーブル名, :カラム名, :型 [, カラムオプション]
rename_columnカラム名の変更rename_column :テーブル名, :変更前カラム名, :変更後カラム名
add_indexインデックスの作成add_index :テーブル名, :カラム名
# 複合Index
add_index :テーブル名, [:カラム名,:カラム名]
remove_indexインデックスの削除remove_index :テーブル名, :カラム名
add_referenceリファレンス(外部参照)の作成add_reference :テーブル名, :参照名,[ polymorphic: true, index: true]

このように、SQLのテーブル定義と同等のことがマイグレーションファイルで定義できることがお分かり頂けたと思います。

以降では、代表的なメソッドをサンプルコードを交えて紹介していきます。

カラムの追加(add_column)

カラム追加の定義は、

  • add_column :テーブル名, :カラム名, :データ型 [,カラムオプション]

となります。

string_colカラムを追加するサンプルを確認してみましょう。

マイグレート(bin/rails db:migrate)する前:

コマンド:

マイグレーションファイル:

マイグレート(bin/rails db:migrate)した後:

このように、カラム追加されたことが確認できました。

カラム定義の変更(change_column)

カラムの定義の変更は

  • change_column :テーブル名, :カラム名, 変更後の定義

となります。

string型のカラムをintegerに変更し、カラムの名変更するサンプルを確認してみましょう。

マイグレーションファイル:

マイグレート(bin/rails db:migrate)した後:

このようにマイグレーションファイルの作成はとてもカンタンなことがお分かり頂けたと思います。

migrationを管理するコマンド

マイグレーションの反映状況やマイグレーションをロールバックをするための便利なコマンドについて紹介していきます。

migrationの状況を見る(rails db:migrate:status)

マイグレーションファイルを実行するためには「bin/rails db:migrate」コマンドを実行しますが、どのマイグレーションをどこまで実行したかを確認するためには、

  • bin/rails db:migrate:status

を実行します。

サンプルを確認してみましょう。

Statusの見方は、

  • up   → データベース反映済
  • down    →データベース未反映

となります。

マイグレートした後のステータスの状態を確認してみましょう。

マイグレートコマンド:

マイグレートステータス確認:

このように、downからupしデータベースに反映されたことが確認できました。

migrationをロールバックする(rails db:rollback)

反映したマイグレーションを戻すためには、「bin/rails db:rollback」を実行します。

サンプルで確認してみましょう。

マイグレートロールバック:

マイグレートステータス確認:

このようにup→downに変わり、マイグレーションを1つ戻すことが確認できました。

なお、今回の手順を上から順に実行した場合、change_columnの部分でエラーが発生します。これはchangeメソッドの行える処理にchange_columnが定義されていないためです。対処法に関しては公式に手順が記されていますので、こちらをご覧ください。

参照:Active Record マイグレーション

まとめ

いかかでしたか?

今回はgenerate migrationコマンドについて解説しました。

generate migrationとは、マイグレーション(migration)ファイルを作成するためのRuby on Railsのコマンドです。

マイグレーション(migration)の使い方を覚えると、データベーステーブルへの追加・変更・削除を何度でも繰り返し実行できるので、ぜひ活用してください。

そして、generate migrationの使い方を忘れてしまったらこの記事を確認してくださいね!

エラーばかりでプログラミング学習が進まない、と悩んでいませんか?

プログラミング学習を始めたけれど、エラーの原因がよく分からなかったり、調べてみたけれど解決されず「どうやって進めればいいんだろう」と放置してそのまま挫折しかけていませんか?

一度進め方が分からなくなるとやる気も失せてしまいますよね。

そんなあなたにオススメしたいのが、「侍エンジニア塾」の無料体験レッスンです。独学で1000時間以上の学習が必要と言われているところを300時間に短縮する「プログラミング独学法」をお伝えします。

下記の無料体験レッスン予約カレンダーよりお申し込みいただけます。あなたのご相談を心よりお待ちしております。

LINEで送る
Pocket

書いた人

オオイシ

オオイシ

システムエンジニア歴15年のオオイシです!好物は Java と Ruby。プログラミング、システムアーキテクトからマネジメントに到るまでなんでも食べます。
システム開発の相談やお困りごとがあればお気軽に
[email protected] まで連絡頂けると幸いです

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説