LoginSignup
4
3

More than 5 years have passed since last update.

マイグレーションの基礎

Posted at

これは何?

Railsガイドのマイグレーションを後で扱いやすいようにまとめました。

コマンドで生成するマイグレーション

bundle exec rails generate migration hogehoge
hogehogeの部分を変えることで色々作成できるようなのでまとめます。

  • AddXXXToYYY カラム名:型 カラム名:型 ・・・
  • RemoveXXXFromYYY カラム名:型 カラム名:型 ・・・
  • CreateYYY カラム名:型 カラム名:型 ・・・

YYY:テーブル名(複数形)
XXX:カラム名(複数カラム追加する場合は適当で良い)

上記はよく使うやつですが、こちらを参照するといかにいろんなコマンドが用意されてるかがわかるので必要に応じて使ってください。

僕の場合は、上記だけ最低限押さえた上で、あとはマイグレーションファイルを自作して行く形でいいのかなーと思ってます。

注意点

ちなみに、上記ではテーブル名を指定するために複数形でYYYを記載してましたが、
モデルを生成する時にはテーブル名ではなくてモデルのクラス名を指定するので単数形となる点を注意してください。

bundle exec rails generate model User name:string
bundle exec rails generate migration CreateUsers name:string

自作するマイグレーション

まずは基礎

下記は、usersにnameカラムがあるテーブルを作成するファイルです。

create_table :users do |t|
 t.string :name
end

なお、これだけでも主キーのidが追加されるので安心して下さい。

よく使うオプションを付け加えると下記のようになります。

create_table :users do |t|
 t.string :name
 t.string :email, null: false
 t.boolean :dev, null: false, default: false
end

テーブル変更

change_table :users do |t|
 t.remove :email, :password
 t.string :name
 t.index :name
 t.rename :latitude, :lat
end

カラム変更

コマンドでカラム変更をする方法がなかったですが、簡単です。
すでに、
add_column :users, :name, :string
でカラムが作成されてるものの型を変更したいときは下記のようにします。
change_column :users, :name, :text

後で、よくNullを禁止したいとかDefault値を入れたくなることが多いので、その参考を記載しておきます。

change_column :users, :email, :string, null: false, default: "test@gmail.com"

ロールバック

直前に行ったマイグレーションが間違っていて、訂正したい場合は下記のコマンドを入力すれば元に戻ります。

bundle exec rails db:rollback

これは直前のマイグレーションのロールバックとなりますが、
マイグレーションを複数ロールバックしたい場合はSTEPパラメータを含めれば一気に元に戻すことができます。

bundle exec rails db:rollback STEP=4

これで最後に行った4つのマイグレーションがロールバックされます。

その他

  • DB削除
    • bundle exec rails db:drop
  • 別環境でのマイグレーション実行
    • bundle exec rails db:migrate RAILS_ENV=test
4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3