Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

rails db:rollbackって一つずつしか差し戻せないんだよって話

More than 1 year has passed since last update.

先日、学習中のスクールで同期からテーブルのカラムを間違えてしまったので修正したい、どうすればよいかと聞かれ、即座にrollbackを使うんだよ!と答えられなかったことが悔しかったので備忘録として。

そもそもrollbackとは?

rails db:migrateを行うことでマイグレーションファイルに記載の内容でデータベースのテーブルにカラムを反映させることができる。
が、カラム名を修正する際にはただマイグレーションファイルを編集してrails db:migrateを再実行するだけでは修正はされない。

その為、一度テーブルを差し戻し、マイグレーションファイルを修正してから再度rails db:migrateを実行する必要がある。
その差し戻しの際に使われるのがrails db:rollbackである。

初めて知ったrollbackの仕様

rails db:migrate:statusでマイグレーションファイルの状態を確認。

$ rails db:migrate:status
 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20191105052241  Devise create users
   up     20191106063303  Create groups
   up     20191106063350  Create group users
   up     20191107034603  Create messages

rails db:rollbackを実行し、再度rails db:migrate:statusを実行。

$ rails db:migrate:status
 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20191105052241  Devise create users
   up     20191106063303  Create groups
   up     20191106063350  Create group users
  down    20191107034603  Create messages

直近のマイグレーションファイル1つしか差し戻せないんですよね。

今まで使う機会が全くなかったので見もしなかったんですが、rollback実行した時に1つしか差し戻されてないことはターミナルのログに記載がありました。

$ rails db:rollback
== 20191107034603 CreateMessages: reverting     
===================================
-- drop_table(:messages)
   -> 0.0278s
== 20191107034603 CreateMessages: reverted (0.0318s) 
==========================

何個分差し戻したいかとかで指定できたらいいのにって思うんですが、ありました。
STEP=nを付け加えればいいだけです。

$rails db:rollback STEP=2
==省略==
$ rails db:migrate:status
 Status   Migration ID    Migration Name
--------------------------------------------------
  up     20191105052241  Devise create users
 down    20191106063303  Create groups     
 down    20191106063350  Create group users
 down    20191107034603  Create messages

現在の状態から+2つ分差し戻されました。

で、マイグレーションファイルの修正が終わったらいつも通りrails db:migrateを実行すれば全てstatusがupになりますと。こっちは全部のマイグレーションファイルが反映されるので1回でOK。
めでたしめでたし。

総括

一人で作業を行っている分には全く問題はないが、チーム開発でカラムの変更を突然行うと齟齬が発生し、迷惑がかかってしまう可能性しかないので気を付けなければならないって。
言われてみればそりゃそうだ( ´_ゝ`)

ShYaruki
開発エンジニアとして就職したく、思った事を書き留めていく場所にしていこうと思ってます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away