追記(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
のパスを間違ったりというオペミスをしかねないので自分にはあまりおススメしない…というかやらないことにする。
以上
オペミスの無い世界を目指して。