【週末Rails勉強会】マイグレーションの基礎

ruby開発
スポンサーリンク

Rails勉強中です。DB管理するためにどうしたらいいのか分からない、Rails初学者を対象としています。
まずはRails標準のマイグレーションについて理解したい、そんな方向けです。

スポンサーリンク

マイグレーション is 何

テーブルの作成、変更するためのRailsの標準機能。以下の図のようなしくみになっている。

 

migration
 

基本的なマイグレーションの使い方

使用できるマイグレーションのメソッドの詳細はこちら

検証環境

  • ruby 2.6.1
  • Rails5.2.2.1

作成

マイグレーションファイルの作成にはメインとして以下の2パターンがある。

  1. rails generate model コマンドを使用してモデルと併せて作成する。
  2. rails generate migration コマンドを使用してマイグレーションファイル単体で作成する。

例(コマンド)

rails generate migration 名前 [フィールド名 :データ型] [オプション]

作成するときの名前(ファイル名)には形式に沿った名前にすることで、マイグレーションの骨組みコードだけでなく、具体的な追加、削除のコードも自動生成してくれる。

手動で作成する場合はcreate_tableメソッドを使用してマイグレーションファイルに記載していく。
作成されたマイグレーションファイルにて以下記述
def change
  create_table :tests do |t|
    t.string :hoge, :null => false
    t.string :fuga, :null => false
    t.timestamps
  end
end
また、Railsは基本的に主キー列idが自動生成される、 t.timestamps でcreated_at, updated_atも生成されるので、この辺りは上手に使用していきたい。
というか、これらは基本的に付けたまま使用するのが好ましい。

 

rakeコマンドを使用して紹介している情報もあるが、rails4以前はrailsコマンドとrakeコマンドで行える処理が分かれていたかららしい。
それがややこしいので、rails5になり、全てrailsコマンドで行えるようになった。(rakeも従来通り使える)
つまりrailsコマンドが正義。rails5以降はrailsコマンドだけ覚えておけば良い!!
サンキューrails

変更

例(コマンド)
rails generate migration change_テーブル名
何を行ったかわかりやすい名前をつけるchange_テーブル名_追加内容 とかでも良いかも
 
作成されたマイグレーションファイルにて以下記述
def change
  change_table テーブル名 do |t|
    修正の為の命令(列の追加、削除、リネーム、etc)
    t.string :name (string型のname追加)
    t.remove :hoge (hoge列を削除) 
  end
end

change_tableメソッドを使用することで、add_columnのようなメソッドと異なりテーブル名を何度も記述せずにすむので、コードがスマートになる。

削除

例(コマンド)
rails generate migration change_テーブル名
作成したマイグレーションファイルにて以下記述
def change
  drop_table :テーブル名
end

反映方法

コマンド(実行していないマイグレーションファイルの実行)
rails db:migrate
この時の注意点としてmigrateはデフォルトでdevelopment環境を対象としているため、test環境や本番環境では環境を指定してmigrateする必要がある。

 

例(productionへ反映)
rails db:migrate RAILS_ENV=production
 
その他、開発時などに使用するであろうコマンド(DBを一度削除してもう一度作成し db:migrateの実行
rails db:migrate:reset
 

ドキュメント等

コメント