tyoshikawa1106のブログ

- Force.com Developer Blog -

Rails:ユーザモデルの作成とマイグレーションについて

Railsチュートリアルの6章の勉強しました。モデルについてとマイグレーションについてやりました。


最初にトピックブランチを作成します。

$ git checkout master
$ git checkout -b modeling-users
$ git branch

f:id:tyoshikawa1106:20150722231104p:plain

※checkout masterはマスタブランチにいることを確認するために実行しています。

ユーザモデルの作成

Railsでは、データモデルで使用するデフォルトのデータ構造のことをモデルと呼びます (MVCのMのことです)。Railsでは、データを永続化するデフォルトの解決策として、データベースを使用してデータを長期間保存します。


今回はユーザ情報を登録しておくためのユーザモデルを作成します。ユーザモデル作成のコマンドです。

$ rails generate model User name:string email:string

f:id:tyoshikawa1106:20150722231529p:plain


コントローラ名には複数形を使い、モデル名には単数形を用いるという慣習があるみたいです。コントローラはUsersでモデルはUserです。


generateコマンドの結果のひとつとして、マイグレーションと呼ばれる新しいファイルが生成されます。マイグレーションは、データベースの構造をインクリメンタルに変更する手段を提供します。それにより、要求が変更された場合にデータモデルを適合させることができます。

Userモデルのマイグレーション

db/migrate/[timestamp]_create_users.rb

f:id:tyoshikawa1106:20150722231831p:plain


マイグレーションファイル名の先頭には、それが生成された時間のタイムスタンプが追加されます。以前はインクリメンタルな整数が追加されましたが、複数の開発者によるチームでは、複数のプログラマが同じ整数を持つマイグレーションを生成してしまい、コンフリクトを引き起こしていました。現在のタイムスタンプによる方法であれば、まったく同時にマイグレーションが生成されるという通常ではありえないことが起きない限り、そのようなコンフリクトは避けられます。


マイグレーションは、以下のようにrakeコマンドを使って実行することができます。これを「マイグレーションの適用 (migrating up)」と呼びます。

$ bundle exec rake db:migrate

f:id:tyoshikawa1106:20150722232121p:plain


初めてdb:migrateが実行されると、db/development.sqlite3という名前のファイルが生成されます。これはSQLite5データベースです。db/development.sqlite3ファイルを開くためのSQLite Database Browserというツールを使って、データベースの構造を詳しく参照することができます。

DB Browser for SQLite

f:id:tyoshikawa1106:20150722232350p:plain


db:rollbackというRakeタスクで変更を取り消せることを意味します。これを“マイグレーションの取り消し (migrate down)”と呼びます。

$ bundle exec rake db:rollback

f:id:tyoshikawa1106:20150722232522p:plain


チュートリアルを進めるのでデータベースのロールバックを実行した場合は、先に進む前にもう一度以下のようにマイグレーションを適用しておきます。

$ bundle exec rake db:migrate