Ruby on Rails 始めました

Javaやphpはそこそこ書ける程度の人が、Ruby on Railsを一から習得する過程を記したサイト

初めてのRuby on Rails入門

マイグレーションファイルとスキーマファイルについて

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

 さて、前回の続きになりますが、モデル作成コマンドによって、モデルと一緒に作られたマイグレーションファイル(20161206045030_create_members.rb)というのがありました。

 マイグレーションファイルというのは、テーブルを作成するための設計図みたいなものです。マイグレーションファイルを実行することで初めてテーブルが作られます。

 マイグレーションファイルの中身を見てみましょう。
create_members

 クラス名が、CreateMembersになっており、ファイル名(xxxxxxx_create_members.rb)との関係から、これらもRailsの命名規則に則っているのが分かると思います

ファイル名xxxxxxxxxx_create_テーブル名.rb
クラス名Createテーブル名(先頭のみ大文字)

 CreateMembersクラスで定義されているのは、changeメソッドのみです。changeメソッドは、このマイグレーションファイルが実行された際に呼ばれるメソッドです。

 changeメソッドの中で、create_tableというメソッドが呼ばれていますが、これがその名の通りテーブルを作成する処理を行っています。

 モデル作成コマンドで入力したように、3つのカラム(name、yomi、phone)をそれぞれのデータ型(string)で作っているのが分かると思います。

 t.timestampsというのは、このテーブルに書き込み・修正した際にそのタイムスタンプを保存しておく為のカラムを作っています。これはモデル作成時に指定したカラムとは別に付随してきます。

 このマイグレーションファイルを実行することで、その指示通りに、データベース内にmembersテーブルが作られるわけです。

マイグレーションファイルを実行する

 では実際に、このマイグレーションファイルを実行してみましょう。マイグレーションファイルは、コンソールにてコマンド操作で実行します。以下のコマンドを打ちましょう。

注)railsじゃなくてrakeです

 すると、以下のようにmembersテーブルを作成した旨がコンソールに出力されます。

 これだけです。簡単ですね。

 しかしながら、上記のコマンドは特にどのマイグレーションファイルを実行するかを指定していないですよね?? にも関わらずmembersテーブルが正確に作られました。

 このrake db:migrateというコマンドは何をしているのかと言うと、/db/migrateディレクトリに在るマイグレーションファイルの中から未実行のファイルを見つけて実行しているんです。

 つまりマイグレーションファイルというのは、各々のファイルについて実行したかどうかを内部で全て管理されており、たった一度だけ実行されるようになっているものなんです。

マイグレーションファイルとスキーマファイルの関係

 マイグレーションファイルが実行されたことよって、テーブルが作られたわけですが、それとは別に自動的に作成されたファイルがあります。/db/schema.rbです。

 確認してみて下さい。
schema

 このファイル(schema.rb)はスキーマファイルと呼ばれる、現在のデータベースの構造を記録したファイルです。

 自分でモデル作成時に指定したnameyomiphoneといったカラムだけでなく、created_atと、updated_atというタイムスタンプ用のカラムも作られているのが分かると思います(マイグレーションファイルのt.timestampsによるものです)。
※idカラムに関してはスキーマファイルには表示されません。

 実行ファイルであるマイグレーションファイルを実行したことによって、スキーマファイルが更新されたわけです。言わばスキーマファイルはマイグレーションファイルが実行された結果を表しています。

 もし後から、テーブルにカラムを1つ追加したいという場合などは、「membersテーブルにこういうカラムを追加します」という指示を書いたマイグレーションファイルを作って実行することで、テーブル構造を変化させることができます。

 新たなマイグレーションファイルを実行するたびに、データベースの構造が変化し、スキーマファイルは最新の状態に自動更新されることになります。

 そういう意味では、マイグレーションファイルは設計図というよりも指示書というニュアンスに近いと言えます。マイグレーションファイルに書いているのはデータベースの完成予定図ではなく、作り方(手順)です。

 ここでは詳しくやりませんが、この仕組み(マイグレーションファイルとスキーマファイル)はデータベースのバージョン管理(1つ前の状態に戻すとか)や、データベースを1から再構築したいといった際に、非常に役立ちます。

 データベースが壊れるのはwebアプリケーションにとって最悪の事態なので、データベース周りの変更は出来る限り安全にやりたいものです。その為に、この一見面倒なマイグレーションという仕組みがあるわけです。

 さて、いよいよ準備は整いました。次回からはこのデータベースを使って、電話帳の機能を作っていきましょう。

コメントを残す




関連記事

Pick Up