コンパイルする言語での開発経験が皆無なこともあって、いわゆるビルドツールというやつの使い方・便利さがよく分からない。
コンパイル処理を効率化するという基礎の基礎の用途は分かる。けど現実にはこの種のビルドツールは他にも様々なタスクの自動化に用いられているわけで、そこでなぜmakeなのか、単なるシェルスクリプトでは駄目なのか、という選択基準が分からない。もしかしたらシェルスクリプトの便利なフロントエンドとして使っているだけなのかとも思ったのだが、しかし例えばRailsでは各種rakeタスクの他に、ジェネレータを起動するためのrailsコマンドは別扱いで用意されているし……むむむむむ……。
ということでいろいろ調べた結果、次のようなことを考えた:
- make等のビルドツールの特色は依存関係を自動的に解決する、という点にある。つまり「何か」の存在を前提に、別の「何か」を得る、という仕事に特化したツールである。逆に言えば無から何かを産み出すような(ジェネレータのような)仕事には向いていない。
- 前提となる何か(依存物)、結果として得られる何か(ターゲット)、そのための具体的な手順(コマンド)は、文字列として書き表せば共通部分が多くなる。だから様々な省略記法が用意されており、だから実物のMakefie等を見ても、慣れていないと何が書いてあるのかさっぱり分からない。
何かを前提に、何かを得る…という観点から自分が普段行っている作業を見直して、make等々で自動化することができないか、考えてみることにしよう。
[...] 8章までの知識と覚えたばかりのmakeの知識を総動員して、極力凝った構成にしてある。コードは役割ごとに複数のモジュールに分割して、特にリングの構築部分は複数のアルゴリズムを実行時に切り替えられるようになっている(いわゆるストラテジーパターン)。 [...]