追記(01/25)

rake で置き換えても rake タスクを間違うことを考慮すると完全にはオペミスを撲滅出来ない点は注意。ただ、特に初老を過ぎた私にとっては長くて覚えにくいコマンドを短縮化出来たり、rake -T でタスク一覧を確認出来たりする点で rake コマンドに置き換えるメリットはあるのではと風呂に浸かりながら思った。

tl;dr

コマンドオプションを打ち間違えてオペミスしそうになったのでコマンドとオプションを直接叩かないように Rake コマンドで置き換える小さな小さなハックメモ。

八苦

参考

Rake コマンドとは…

  • 乱暴な言い方すると Make っぽい Ruby のビルドツール

何でオペミスしそうになったのか

とあるコマンドで設定を適用する際に dry-run した後に apply するつもりが、ボーっとしていきなり apply してしまった。

$ command --config setting.yml --dry-run
$ command --config setting.yml --apply

幸い、設定には問題無くていきなり apply しても障害には至らなかったけど、今後も同じオペミスはしかねないって思った。

サンプル

ということで、上記のコマンドを以下のような Rake タスクに置き換えた。

task "default" => "show_version"

namespace :command do
  desc "command のバージョンを出力する"
  task :show_version do
    sh "commnad --version"
  end

  desc "setting.yml を適用する前に --dry-run する"
  task :dry_run do
    sh "command --config setting.yml --dry-run"
  end

  desc "setting.yml を適用する為に apply する"
  task :apply do
    sh "command --config setting.yml --apply"
  end
end

Rakefile さえ間違いなく書かれていれば、rake コマンドをたたいている間はオペミスの心配は無い。Rakefile の正当性をどう担保するかは色々と方法はあると思うけど、自分以外のメンバーによるレビューが手っ取り早く確実では無いかと思う。

確認。


#
# 各 Task の確認
#
$ bundle exec rake -T
rake command:apply         # setting.yml を適用する前に apply する
rake command:dry_run       # setting.yml を適用する前に --dry-run する
rake command:show_version  # command のバージョンを出力する

#
# command のバージョン確認
#
$ bundle exec rake
$ bundle exec rake command:show_version

#
# setting.yml の内容を適用する前に --dry-run を実行する
#
$ bundle exec rake command:dry_run

#
# setting.yml の内容を適用する
#
$ bundle exec rake command:apply

尚、rake だけ叩くと default タスクが show_version に定義されているので command --version が実行される。desc にタスクの説明を書いておくと他の人が叩く際の助けになると思う。

ちなみに、コマンドラインから setting.yml のパスを渡したい場合にはサクッと以下のように Rakefile を書き換えて…

task "default" => "show_version"

namespace :command do
  desc "command のバージョンを出力する"
  task :show_version do
    sh "commnad --version"
  end

  desc "setting.yml を適用する前に --dry-run する"
  task :dry_run do
    sh "command --config #{ENV['CONFIG_FILE']} --dry-run"
  end

  desc "setting.yml を適用する為に apply する"
  task :apply do
    sh "command --config #{ENV['CONFIG_FILE']} --apply"
  end
end

以下のように実行するとイイかも。

$ CONFIG_FILE=setting.yml bundle exec rake command:dry_run

但し、CONFIG_FILE のパスを間違ったりというオペミスをしかねないので自分にはあまりおススメしない…というかやらないことにする。

以上

オペミスの無い世界を目指して。

元記事はこちら

オペミス防止、削減の為にいつも打っているコマンドを rake コマンドに置き換えるマイクロ八苦