Railsにおける生成と巻き戻し(引用:Railsチュートリアル第3章)


背景と具体例

どんなに気を配っていてもRailsアプリ開発中に何か失敗をすることは往々にしてある。Railsではそのような失敗をカバーする機能がいくつもあるので、まとめておく。

一般的なシナリオの1つとして、生成したコードを元に戻したい場合がある。例えばコントローラを生成した後で、もっといいコントローラ名を思い付き、生成したコードを削除したくなった、あるいは綴りを間違えたために修正したいといった場合がそれに当たる。

Railsはコントローラ以外にも関連ファイルを大量に生成するため、生成されたコントローラファイルを削除するだけでは十分ではない。自動生成されたコードを元に戻すためには、新規作成されたファイルを削除するだけでなく、既存のファイルに挿入されたコードも削除する必要がある。(rails generateを実行するとルーティングのroutes.rbファイルも自動的に変更される)

このようなとき、「generate」という言葉に因んで、rails destroyというコマンドを実行することで元に戻すことが可能。下記はその例。

コントローラの場合

  $ rails generate controller StaticPages home help
  $ rails destroy  controller StaticPages home help

モデルの場合

次のようにモデルを自動生成、自動巻き戻しする方法も紹介。

$ rails generate model User name:string email:string
$ rails destroy model User

(上のコマンドからも分かるように、モデルをdestroyする場合はモデル名以外の引数は不要。詳細理由はRailsチュートリアル第6章参照)

マイグレーションの場合

また、マイグレーションの変更を元に戻す方法も用意されている。

$ rails db:migrate
$ rails db:rollback

最初の状態に戻したいときは、VERSION=0オプションを使用。

 $ rails db:migrate VERSION=0

マイグレーションは逐次的に実行され、それぞれのマイグレーションに対してバージョン番号が付与される。したがって、上記の0を別の数字に置き換えることによって、指定したバージョンの状態に戻すことが可能。

開発中に袋小路に迷い込んでしまった場合でも、これらの機能を使えば元の状態を復元できるため焦る必要はない。