75-面倒でも自動化できることは自動化する

プログラマが知るべき97のこと」の75個目のエピソードは、自動化に関する話です。現代のソフトウェア開発の三本柱の1つである自動化は、他の「ユニットテスト」「バージョン管理」に比べるとやや優先度が低く捉えられています。勿論、バージョン管理がなければ不安でどうにもならいですし、ユニットテストを行ってこそ自動化が生きてくる事もあるので、優先度が低くなるのは仕方ありません。しかし、言い換えれば「自動化」は、そのチームが、現代的なソフトウェア開発を進めているかの大きな指針となると言えます。

自動化はエピソードのタイトルにもあるように面倒な作業です。大抵の場合は、1回の作業を行うよりもずっと多くの事を学習する必要があり、設定等に時間がかかるものです。したがって、タスクが混んでくると自動化以外の優先度の高いタスクを行っていくため、後回しにしてしまいます。そして、開発が進んでいくと自動化するべき範囲は広がっていくため、もっと自動化が面倒になってきます。結果として自動化は行われずにソフトウェア開発が進んでいくというパターンは多いのではないでしょうか?

そのチームが自動化を進めるとしたならば、自動化の優先度は常に最高にしておくべきです。なんらかの自動化できるタスクが見つかったならば、最優先で行います。その場でそのタスクが自動化するだけならば大きく時間はとられません。また、自動化した後に繰り返し実行される回数を最大にする事ができるでしょう。後から自動化しても、それまで手動でやった時間は取り戻せません。

自動化を進めるために、チーム内でこのエピソードであげられている5の誤解は解いておくべきです。

・自動化はテストだけのためのもの
IDEを使っていれば自動化の必要はない
・自動化のためには特殊なツールについて学ぶ必要がある
・扱うファイルの形式によっては自動化できないこともある
・忙しくて自動化のことまで勉強している時間はない

JavaではAntかMavenが標準的なツールとなっていますので、特殊なツールになるかもしれませんが、結果として一番効率よく自動化を行うことができます。Mavenであればプロジェクトのドキュメントやデプロイ等も自動化する事が簡単ですので、コストをかけてでも学ぶ価値はあるでしょう。勿論、特殊なツールを使わずに、bash等で行う方が楽であればそれでも良いと思います。また、Eclipse等を使っているとまれにEclipseコンパイルしたクラスファイルなどをそのまま本番サーバなどにデプロイするような事が見受けられます。ミスを防止する意味でも統一されたビルド手順はあるべきです。一方で、ファイル形式についてはなかなか難しい問題です。顧客との契約などでExcelやWordが強制されていると難しいですが、プレインテキストは強力ですし、Excelを永遠とメンテナンスしなければならないならば、コストをかけても自動化する価値はあるかもしれません。

尚、自動化すべきでない事もあるということは忘れてはなりません。自動化は重要ですが、自動化するコストが実施する回数や内容に比べて圧倒的に高すぎる事もあります。テストの自動化でいえば、ユーザインターフェイスのテストを自動化するのは永遠の課題でしょう。自動化すれば価値はあるのは理解できても、それを実現するコストが高すぎるならば行わない判断も必要です。

自動化は業務の中で学ぶことは中々出来ません。幸いにも自分のチームが自動化にとりくんでいるならば、自分から自動化の担当を名乗り出て、経験者からスキルを吸収するのがベストです。そうでないのであれば、自分の時間を使って学習し、チームにフィードバックするしかないでしょう。自動化で恩恵を受けるのはプログラマであり、顧客への直接の価値は見えにくいため、ステークホルダの説得は難しいのですから。

プログラマが知るべき97のこと

プログラマが知るべき97のこと