後へ      Topへ      次へ

db:migrate (データベースのマイグレーション)

データベース

Rails が使用するデータベースは、
デフォルトが SQLite3 です。
小規模であれば十分使える上に、ファイル1つなので開発時に重宝します。

本番環境では、PostgreSQL や MySQL などが良く利用されます。

3つの環境

Rails には、動作モードというか環境が3つあります。

Windows であれば、
環境変数 RAILS_ENV にて指定する事が多いです。
set RAILS_ENV=development
など。
オプションとして指定できるコマンドもあります。
ruby bin/rails db:migrate RAILS_ENV=test
など。

データベースも、環境毎に独立したものが使えます。
どの環境でどのデータベースを使うかは、
\config\database.yml で設定します。
development と test は SQLite3 で、production は PostgreSQL とかも可。

rails db:migrate

データベースを構成する事を「マイグレーション」するといいます。
どういうテーブルに、どんなカラムを用意するか、などです。

Scaffold では generate コマンド実行時のオプションでカラム名と型を指定しました。
rails generate model コマンドでモデルだけを指定する事も可能です。
詳細が必要であれば Rails ドキュメント を参照してください。

これらのコマンドを実行すると、
db\migrate フォルダにマイグレーション・ファイルが生成されます。
その後、 ruby bin/rails db:migrate
を実行することで、データベースに実際の設定が行われます。

この2段階の操作は一見冗長ですが、
マイグレーション・ファイルがあれば、
データベースの初期化が簡単に行えます。
特に SQLite3 のデータベースは \storage フォルダにあるので、
このファイルを削除して、
再度 ruby bin/rails db:migrate すればOKです。

マイグレーションの対応状況は、
Rails が自動で用意する schema_migrations テーブルに保存されています。
開発環境での変更点を本番環境に移植する場合も、
普通にリポジトリをマージした後、
本番環境上で、
ruby bin/rails db:migrate RAILS_ENV=production
すればOKです。
Rails が schema_migrations テーブルを参照し、
必要な変更だけをデータベースに反映してくれます。
どこまで反映したか?とか気にしないで良いのでラクです。

なお、
db:migrate でデータベースにテーブルを追加する際、
各テーブル毎に id, created_at, updated_at カラムが自動で追加されます。


後へ      Topへ      次へ