iioka@マイグレーション中...
です。
「連載Ruby on Railsを始めよう」の第5弾です。
そんな連載名がいつついたのかは内緒です。
今回はDBのマイグレーションについて書いてみます。
■これまでのお話
・Aptana Eclipseプラグインで始めるRuby on Rails
・RubyでHello World!
・Ruby on RailsでHello World!
・Ruby on Railsの文字コード指定場所
Railsでは、DBのテーブルを作成するSQLを記述したファイルを作り、
それを実行して、テーブルを作成します。
また、DBのテーブル構成は開発前にきちんと決めておくものですが、
開発が進むと新しい列が必要になったり、テーブルが必要になったりします。
そのたびに列やテーブルを作るのですが、
Railsでは、その履歴も管理するため、仮に、前のバージョンに戻したいときでも
すぐに戻すことができます。
なお、以降はMySQLを使ったときのやり方です。
1.スキーマの作成
なにはともあれスキーマを作成します。
やり方はなんでもいいのですが、個人的にはMySQLのGUIツールが好きです。
MySQL AB :: MySQL GUI Tools Downloads
セットでいろんなツールがインストールされますが、
その中にある「MySQL Query Browser」を使います。
ログインできれば直感的に使えると思います。
ここではスキーマ名を「hoge」にしました。
また、ID、パスワードは「root」にしています。
2.database.ymlの編集
Eclipseを起動し、前回まで使っていたプロジェクトを開き、
「config/database.yml」ファイルを開きます。
ここにデータベース接続情報を記述します。
接続先は「development」「test」「production」が用意されていますが、
「development」だけを編集すればOKです。
下記のように編集します。

3.modelファイルの作成
次にmodel用のrubyファイルを作成します。
これはMVCで言うところのMにあたるファイルです。
RailsではmodelファイルはDBのテーブルと対になります。
いわゆるO/Rマッピングというやつです。
(↑最初、この仕様がわかってなくて、すんごい苦労した…)
作り方はControllerを作ったとき同様、ジェネレータで作ります。
ジェネレータビューを開き、
「model」を選択します。
ブックマークを管理するテーブルを作ろうと思うので、
「bookmark」と入力し、実行します。
※ビューがうまく表示されないときはプロジェクトが選択されていることを確認してください。

ちょっと時間がかかりますが、いろんなファイルが作成されます。
4.migrateファイルの編集
modelファイルを作ると、自動的にmigrateファイル(という名のrubyファイル)も作成されます。
「db/migrate/001_create_bookmarks.rb」というファイルがあるはずです。
このファイルにテーブルを作成・編集する命令を記述します。
1つのmigrationファイルが1つのバージョンを表します。
ここでは「title」「url」を持ったbookmarkテーブルを作成するので、
ファイル全体を下記のように編集します(主に書き加えるのはself.upメソッドのみ)
class CreateBookmarks < ActiveRecord::Migration
def self.up
create_table :bookmarks do |t|
t.column :title, :string
t.column :url, :string
end
end
def self.down
drop_table :bookmarks
end
end
5.migrateの実行
それではmigrateを実行して、テーブルを作ってみます。
Rake tasksタブから「db:migrate」を選択します。
オプション(右側のテキストボックス)は空欄でOKです。
GOボタンを押すと実行され、テーブルが作成されます。

6.bookmarksテーブルが完成!
やったね!
QueryBrowserやEclipseに入っているDBプラグイン
(ビューの表示→その他→data→Data Navigator)などで
テーブルが作成されていることを確認してみてください。
次回はバージョンアップの方法とバージョンダウンの方法について書いてみたいと思います。
■続き書きました(ちょっと話が脇にそれてます)
・Ruby on RailsでDBが文字化けしてしまう→database.ymlに設定で解決
・Ruby on Rails データベースmigration入門2(どちらかというと本編)



