Rails(以下RoR)を使ってプロトタイプを作成し、アジャイルかつ正確にクライアントからの機能要件を取りまとめることを提案する連載「Rubyでアジャイルプロトタイピング」の第4回目です。これまでの連載では、アジャイルプロトタイピングについての解説、そしてプロトタイピングにおいてRubyやRoRがPDS(Plan/Do/See)サイクルの中でどのような効能をもたらすかについて解説を行ってきました。});今回はRoRでアジャイルプロトタイピングの実践編として、筆者が特に気に入っているデータベースのマイグレーション機能を紹介したいと思います。データベースのマイグレーションはプロトタイピングのみならず、それ以降のフェーズでも活用できる非常に有用な機能であると考えています。マイグレーション、特にデータベースにおけるマイグレーションとは、新しい環境に移行する際、整合性を保持したまま移行を行うためのツールであるといえるかと思います。参考:IT用語辞典e-Wordsのマイグレーションの説明。RoRにおけるマイグレーションRoRにおけるマイグレーション機能はActiveRecord::Migrationとそれを利用するフロントエンドに当たるRakeによって実現されています。Make、つまり、Ruby版makeとでもいえるビルドツールですが、記述言語としてRubyを使用しているため、makeとはまったく異なる性質を持つものです。Rakeについての解説は今回の趣旨からは外れるため紹介は割愛させていただきますが、より詳しくRakeについてお知りになりたい方は、下記URLなどを参照ください。ビルド言語RakeActiveRecord::MigrationActiveRecord::Migrationによって以下のスキーマ操作を行うことができます。上記のような簡単なスキーマ変更をこのマイグレーション機能により行うことが可能ですが、ActiveRecordの現在のバージョン1.13.2では外部キーの操作などの複雑なテーブルの設定は、SQLを直接記述する必要があります。今後RoRがバージョンアップを重ね洗練されていくに従い、マイグレーション時にSQLをいちいち記述しなければならない機会はどんどん必要なくなっていくでしょう。頻繁なバージョンアップに伴う機能の充実と使い勝手の向上(本当に目覚ましいものがあります)もRoRの1つの魅力です。以下のデータベースに対応しています。MySQLPostgreSQLOracleSQLiteDB2の対応は含まれていませんが、プロトタイプを作成する場合においては、ターゲットのデータベースを使用する必要はないため、特に問題にはならないでしょう。テーブルの作成Migration機能を使用してテーブルを作成してみましょう。簡単な例として、次のようなテーブルを考えます。サブクラスをgenerateスクリプトにより作成します。いうファイルが生成されます。バージョン番号(バージョン1)になります。メソッドにテーブル生成のための記述を追加します。endendテーブルが生成されたかどうか、データベースに接続し確認してみます(ここでは、開発用データベースをdevelopment.sqlite3という名前で作成しました)。integer);schema_infoというテーブルが追加されていますが、これは、Migrationがバージョン管理を行うためのもので、中身は現在のバージョン番号が格納されています。3で作成したmembersテーブルに住所を格納するためのカラムaddressを追加してみましょう。バージョン1のmembersテーブルは以下のような定義でした。varchar(255));generateスクリプトでaddressカラム追加用のMigrationのサブクラスを作成します。db/migrate/002_add_address_members.rbaddressカラムの追加をメソッドupに記述します。endendrakeでMigrationを実行します。migrate≫addressカラムが追加されたことを確認します。integer);スキーマのダウングレードスキーマのダウングレードは、Migrationのサブクラスのdownメソッドに変更内容を記述します。スキーマのアップグレードで適用したバージョン2のスキーマをダウングレードするには、以下のようにバージョン2のdownメソッドを定義します。integer);rakeでMigrationを実行します。VERSION=1≫ダウングレードする場合は、バージョンを明記します。上記の例では、バージョン2から1つダウングレードするため、1を指定します。バージョンを明記する場合は、現在のバージョンから指定したバージョンへのアップ/ダウングレードになります。バージョンを明記しない場合は、最新のバージョンへのアップグレードになります。カラムが削除されたことを確認します。integer);このようにアップグレードで追加したカラムをダウングレード時には削除しておくといったように、対称的に定義しておくことによって、スキーマの変更管理が容易になります。プロトタイプを作成していると、さまざまなアイデアを試してみたくなることでしょう。思い付いたアイデアは、モデルの設計から変更を加える必要があることもしばしばあるかと思います。実際にあるアイデアを試してみたが、やはりうまくいかないので、モデルを元に戻したい−−ActiveRecord::Migrationによってスキーマの変更管理がカンタンに行えるようになったため、プロトタイピング本来の目的であるさまざまなアイデアを試行錯誤することが可能になるのです。ActiveRecord::Migrationがアジャイルプロトタイピングを支える柱の1つであるといっても過言ではないでしょう。次回は、RoR実践編の続きです。ついてお伝えしたいと思います。広告に関するお問い合わせメールマガジンSpecialインデックスRSSfacebooktwitter利用規約ITmediaはアイティメディア株式会社の登録商標です。