読者です 読者をやめる 読者になる 読者になる

【Ruby】【Rails】手間な実行コマンドはRakeタスクに書いて行くようにした。

あるプロジェクトで、Railsを使っているのですが
Rails標準のmigrateを使っていたのですが、Cookpad社の以下の記事が
公開された後、ridgepoleを使い始めました。

techlife.cookpad.com

github.com

そして、自分も個人でridgepoleを検証していたのですが・・・
コマンドの引数が多くてすぐに覚えられない!ということがわかりました。

# RailsのプロジェクトでDry runを実行してみるの例
bundle exec ridgepole -c config/database.yml -E #{Rails.env} -f #{Rails.root}/Schemafile --apply --dry-run

わかっている人にとってはすぐに理解できるコマンドですし
打ち慣れていればパパッと出てくると思います。

しかし、長いので自分でもまるっと書きたくないです。
そこでRubyを使っているので、タスク化しよう!と考えて書いてみました。

Rails 4.2.1で動作確認しています。

# "lib/tasks/ridgepole.rake" というファイルを作成して記述してあります。
# ridgepoleを実行するためのタスク
namespace :ridgepole do

  desc "Exec Apply Dry Run"
  task apply_dry_run: :environment do
    exec "bundle exec ridgepole -c config/database.yml -E #{Rails.env} -f #{Rails.root}/Schemafile --apply --dry-run"
  end

  desc "Exec Apply"
  task apply: :environment do
    exec "bundle exec ridgepole -c config/database.yml -E #{Rails.env} -f #{Rails.root}/Schemafile --apply"
  end

  desc "Exec Export Schemafile"
  task export: :environment do
    exec "bundle exec ridgepole -c config/database.yml -E #{Rails.env} --export -o Schemafile"
  end

end

自分のマシンで実行したところ、特に問題なくできているので
まずはこれを使っていこうかと思います。

もしかしたらサーバへのマイグレートする際に何かあるかもですが
そのときになったらやろうと思います。

ridgepole便利!

また、ridgepoleに限らず、他のコマンドに関しても
このように書けば、メンバーへの細かい説明などが省けるので
非情に有効な手段だと思いました。

余談
・ridgepoleの有識者が作っていたのを、見よう見まねで作ったRakeタスクなので
何か言われたら記事を消そう。。。
・すでにタスク化されたものがあるっぽい。。。?

github.com