patorashのブログ

方向性はまだない

rom-rb(rom-sql)でマイグレーションをロールバックする

Hanami v2.0を試そうとしているのだけれど、まだHanami v2系にはHanami Modelがリリースされておらず、rom-rbを直接使うことが推奨されている状態なので、rom-rbを使ってDBのマイグレーションを行っていたのですが、これロールバックはどうするんだろうか?と思って調べていました。しかし、ロールバックについての情報は見つからない…。

rom-rbでDBを使うためのgem rom-sqlでは、sequelを使っているので、sequelのほうの情報を見てみました。

sequel/migration.rdoc at master · jeremyevans/sequel · GitHub

running migrationのところを確認すると、-Mロールバックになると書いてあったので、ロールバックの仕組みはある…。

今一度、rom-sqlのほうのコードを確認してみようと思い立ち、rake taskのコードを確認したところ、rake db:migrate[version]でいけることが分かりました。

rom-sql/migration_tasks.rake at 596fea491ace84ae1aea12599879f84cb0ce5b64 · rom-rb/rom-sql · GitHub

こんな感じ。指定したバージョンまで戻るので、明示的にrollbackと書くことがないので、ググってもなかなかヒットしないわけですね。

bundle exec rake db:migrate[20230405151448]
# zshの場合
bundle exec rake db:migrate\[20230405151448\]

というかdescに書いてあるやん…。

$ bundle exec rake -T
rake db:clean                           # Perform migration down (removes all tables)
rake db:create_migration[name,version]  # Create a migration (parameters: NAME, VERSION)
rake db:migrate[version]                # Migrate the database (options [version_number])]
rake db:reset                           # Perform migration reset (full erase and migration up)
rake environment                        # Load the app environment
rake spec                               # Run RSpec code examples

Hanami v2.1で登場するHanami Modelの場合はこの辺りをサポートしてもらえると嬉しい。