Ruby on Rails ~Migration機能を使ってみよう。~

この記事は2014年1月23日に書かれたものです。内容が古い可能性がありますのでご注意ください。


Ruby on Rails ~Migration機能を使ってみよう。~

Ruby on RailsのMigration機能を使ってみました。
その内容を簡単にまとめます。

Migration機能とは

Migrationとは、Rubyスクリプトによってテーブルの作成やカラム構成の変更を行う機能のことです。
この機能の特徴として、テーブル・カラム構成(スキーマ)にリビジョン管理的概念を導入している点が挙げられます。
このことにより、次のようなことが可能になります。
・スキーマを過去のある時点のものに簡単に戻すことができる(テーブル・カラム構成のみ)。
・過去のバージョンを動作させるのに必要なデータベース構成を簡単に作成できる。
・実行環境移行の際のデータベースセットアップを自動化できる。
また、スキーマの変更をデータベースエンジンに依存せず記述できる点も特徴の1つとして挙げられます。

このようなメリットを十分に活用するには、直接データベースのスキーマをいじらずに、
Migrationを介してデータベースを管理するよう作業フローを統一するとよいでしょう。

それでは早速Migration機能を使ってみます。

実行環境は、
・Windows7
・Ruby1.9
・Rails3.2
・postgres9.2
です。

手順1:Migration用ファイルの作成

まず、Migration用のファイルを作成します。
下記のコマンドで生成できます。

$ rails generate migration [操作内容][テーブル名]
[操作内容]には例えば「CreateTable」や「AddColumn」など、
[テーブル名]にはテーブル名を入れてあげましょう。
必須ではありませんが、大体この命名が一般的です。
「AddColumn」などの場合はカラム名を指定するのもよいでしょう。

この指定で、migration用のクラス名が定義されることになります。
また、ファイル名も自動で作成されます。

上記のコマンドを実行すると、Migration用のファイルが
YYYYMMDDhhmmss_[操作内容][テーブル名].rb
の形式で「migrate」ディレクトリに生成されます。

手順2:ファイルの確認

生成されたファイルをテキストエディタなどで開いてみましょう。
次のようになっていることがわかります。

class [操作内容][テーブル名] < ActiveRecord::Migration
  def up
  end

  def down
  end
end

「def up」と「end」の間に、実行する内容、
「def down」と「end」の間に、ロールバックする内容を記述します。

手順3:ファイルの編集

内容の記述はいくつか特徴があるので別途確認頂くとして、
今回は一例としてカラムの型変更の方法を記述してみましょう。

class AlterColumnMasters < ActiveRecord::Migration
  def up
    change_column :[テーブル名], :[カラム名], :[変更後のカラムの型] (, :limit=>[サイズ])
  end

  def down
    change_column :[テーブル名], :[カラム名], :[変更前のカラムの型] (, :limit=>[サイズ])
  end
end

「:limit=>[サイズ]」はサイズを指定する場合に記述してあげましょう。

手順4:Migrationの実行

下記のコマンドでMigrationが実行されます。

$ rake db:migrate

実行したらデータベースを確認してみてください。
指定したカラムの型が変わっていたらmigration成功です。

手順5:Migrationの実行(ロールバック)

下記のコマンドでMigrationが実行されます。

$ rake db:rollback

実行したらデータベースを確認してみてください。
指定したカラムの型が戻っていたらロールバック成功です。

感想

今回のサンプルではロールバックが簡単にできる点が非常によいということがわかりましたが、
簡単な例を一つあげただけですのでまだまだ使いようがありそうですね。

  • このエントリーをはてなブックマークに追加

PAGE TOP