世の様々なツールは様々な作業を自動化して実行してくれるものだ。自動化の目的は効率化と均質化に分かれる。前者がとにかく素早く作業を終えることを目的としているのに対し、後者は誰が使っても同じ結果で作業が終わることを目的としていると言い換えても良い。

LiveReloadを使ったCSSファイルの保存をトリガーとしたブラウザー上でのCSSのみの再読み込みは効率化を目的とした自動化の一例だ。エディタでCSSファイルを保存してから先の作業である、ブラウザーに画面を切り替えてF5を押すという作業をバックグラウンドで効率的に行なってくれるようにすることにより、ユーザーがエディタから離れることなく素早く作業結果を確認できるというわけだ。こういった自動化が効率的であるかどうかはユーザーとその環境に強く依存するので、ユーザーそれぞれが独自に導入した方が良いことが多い。

対してMakefileなどを使ったビルド環境の共有は均質化を目的とすることが多い。ソースコードのチェックや連結、最適化を同じ設定で行うことにより、安定したプロダクション向けのバイナリやコードを生成させることを主な目的としているわけだ。こういった自動化作業を共有することにより、いつでも誰でも(CIツールでも)同じ結果を生成することが可能になる。その均質化はプロジェクトの管理者によってプロジェクトの基本的な守るべきルールとして提供されるべきだろう。


例えばGruntの実行速度の遅さや設定の煩雑さなどというのは、主にここでいう効率化において問題になるわけだ。作業中にちょくちょく自動実行される作業が遅かったら多大なストレスになりうるし、設定の煩雑さは好みや環境に対する修正を行いづらくさせる。

対して均質化の観点から見ると両者ともにあまり問題にはならない。均質化のための自動化された作業はプロジェクトのワークフローの各段階の間で行われるもので、実装中に逐一実行されるわけではない。その実行速度の遅さによる差は積もっていかず、ごく一時的なものだ。設定の煩雑さは「書きにくい」ではなく「更新しづらい」なので、わかる人が一度きちんと設定し、わかる人が後に修正すれば良いという形に集約できる。


一言に自動化と言っても効率化と均質化の二種類に、またはそれらのハイブリッドも含めた三種類に分かれる。プロジェクトに自動化ツールを導入する時には、どういう目的で自動化が必要なのかをよく考えた上で、それぞれの目的に向いた自動化ツールを選定するべきだろう。