どんなCUI作業にもとりあえず Makefile を作ってそれで作業する、 という流儀でやってる人がいるのは知っていた。 たとえばLaTeXでもの書いてるディレクトリに、こんなMakefileを置いとく。
clean: -rm -f *.dvi *.aux *.log
こうしておくと、ゴミファイルを消すときに、
make clean
と打てばよく、rm
の引数を間違って消しちゃいけないファイルを消す危険性を回避できる。
その他、そのディレクトリでありがちな作業のコマンドラインをいろんな
ターゲットで登録しておけば楽に呼び出せるというわけだ。
で、実際便利だろうなとは思っていたが、あんまりそういうための Makefileを作って利用することはしてなかった。実際、面倒なコマンドラインも zshのパワーでたいてい一撃で終わるし、 ちょっと込み入ったのならシェルスクリプト置いときゃいいじゃん、なにも make様にご登場いただかなくても……のように考えていた。
で、9月に土屋さん とお会いして話しているときに、管理ツールは大体Makefileで書いちゃう、 のような話を聞いて以来ちょっと気になって真似してみたら、 ああ、なるほど、単にシェルスクリプトを作るより快適な点があった。
ファイルが散らからない
アカウント管理など、テキスト処理の組み合わせで片付けるような作業は、 調子のよいときにスクリプト化したりして、次回以降も楽にできるように する。で、もっと調子のよいときに新しいのを作ったりして、 気付いたらスクリプトが何種類かになっちゃったりする。古い方は すぐ消しゃいいんだが、消し忘れて次回まで放置って事が多い。 すると、次回、まずどのスクリプトを使えばいいんだか最初に 思い出す作業から始めなければならない。ドキュメントを残してあっても それが最新版のを反映した記述にしたかどうか忘れてたり、 書かねばと思ってほったらかしになっていたという記憶だけが 残っていたりすると、まず最初に解読から始めなきゃいけなくて ちょっと悲しい。作業ディレクトリで ls と打って、 スクリプトがいっぱいあったりすると混乱しやすい。
ファイル名を考えなくていい
上と関連するが、定型のある程度長いコマンドラインが出てくると、 スクリプトに落としておこうと思い立つ。で、そこで どういうスクリプト名にしようか考える。次回見たときに すぐ分かるような名前にしとこうと、意外にそこで時間を消費する。 一個目ならよいが、上の項目のように同じ作業をもっと効率化する 新しい別のスクリプト、となるとさらに悩ましい。「ほげほげ2」 みたいに2、3、4って付けてくのはアホらしいからいや。とか、 ほら結局名前考えるのに時間がかかって進みやしない。
ドキュメントがわり
Makefileのターゲットの書き方を工夫すれば、 そのディレクトリでどういう手順で作業すればよいかのドキュメント 代わりに使える。
ということで、「あるディレクトリで完結している作業」は、 Makefileに入れておくってのがかなり長期的な作業効率を上げる感じだ。 「複雑だが、2〜3行のコマンド」をしまうくらいでシェルスクリプトなんか 作ってられっか! と感じることはよくあるが、たった1行のコマンドでも Makefileに入れるならファイルは増えず、全く気にならない。
うむうむ、これは思った以上に快適だ。これから 「なんでもmake」屋になるか。て、20年前に気付けよ。