hkoba blog

プログラマーです。プログラミング言語ミーハーです。よろしくどうぞ(能代口調)

hachiojipm #37 に行ってきました

昨日は hachiojipm に行ってきました。 pm なんだけど rubyphp の話が聞けて (かつ perl 文化圏の人間に分かるように話してもらえて) 最近非常に勉強させてもらってる集まりです。

LT のお題は editor だったので tcltk 関連とか頑張って出そうかとも 思ったのですが、いかんせん、手持ちのツール群はどっぷり業務特化してしまってて断念。

代わりに小ネタとして、先日 @stealthinu 氏との対話で取り上げた "dryrun" ( make -n のように、「実際には実行せずに、何が起こるかだけを画面に出して終わる」) オプションの、私がよく使う実装イディオムについて話してきました。

My Zsh idiom. How to write dryrun behavior in Zsh.

関数 "DO" が肝です。これは引数として渡されたコマンドを画面に出し、 オプション -n が指定されていればそこで終了、 通常は引数列全体をコマンドとして実行、というものです。

あとは「何が起こるか」に相当するコマンドの頭に "DO " と書き加えるだけです。

残念ながらこの方法はパイプラインや file のようなリダイレクトがあるコマンド には適用できません(その場合は、その部分だけ関数にまとめて、関数に対して DO で prefix するのが良いでしょう)。

dryrun は真面目に作ろうとすると変更箇所が増えて大変ですが、 この方法なら、プログラミングの手間がほとんど増えないので、 投下労力対効果が良くて非常に気に入っています。

DO の最後の実行のところを "$argv[@]" にしたほうが完璧ですが、 ここでは読みやすさ優先、ということで。