51-プロジェクト自身にしゃべらせる

プログラマが知るべき97のこと」の51個目のエピソードは、ソフトウェア開発の自動化に関する話です。先日のTDDBCでもid:t-wada氏は「近代ソフトウェア開発の三本柱はテスト・バージョン管理・自動化」と話していましたが、自動化は興味深く重要なテーマの1つです。最近は、Huds○n*1の普及によってCI(継続的結合:Continuous Integration)サーバも自然に使われるようになってきました。継続的なビルド以外でも、静的なメトリクス測定・テストの自動実行・カバレッジ測定・その他様々な定型処理を自動化する流れがあります。そして、自動化を行うツールも整備されてきています。自動化をするメリットは、時間のかかる面倒な処理を任せてしまうことにより時間を有効に使えることと思われがちです。しかし、それ以上に実感するメリットは、問題等を早い段間で検知できることです。
テストを例にあげましょう。テストをJUnit+CIで自動化してない場合、テストは手作業で行われます。手作業で行う場合、何度もやることは現実的ではありません。したがって、開発フェイズの最終段階で行うのが一般的です。すると、最後の最後まで問題が発覚しにくいのです。一方、テストが自動化されており、毎日実行されていれば、遅くとも次の日の朝には問題が検知できています。検知が早ければ早いほど対処も簡単になりますし、他の箇所への影響も最小限に抑えることができるのです。
CIサーバは導入していくのが一番大切です。導入には様々な障害があると思いますが、導入してみないとそのメリットは感じられません。ユニットテストと同様にソフトウェア開発の精神的な不安を軽減する効果が高いでしょう。勿論、導入にはコストがかかりますし、設定やノウハウの蓄積にもコストがかかります。まずは、自分自身の勉強のために導入して運用すると良いでしょう。そうすれば、業務で導入する場合でも最小限のコストで導入できます。
また、導入は他のメンバーにも良い影響を与えます。自分の今抱えている業務では初めて本格的にCIを導入しました。すると、自然とユニットテストやビルドエラーに対する意識が向上します。初めは「良くわからないけど便利らしい」と感じていたメンバーかもしれませんが、Hudsonが裏側で堅実に仕事を行っている安心感を感じています。そして、自分のコミットに責任を感じるようになっています。
尚、このエピソードでは、更に楽しんで開発を行う為にXFD(eXtreme Feedback Device)が紹介されています。タスクの結果に応じてランプやちょっとしたギミックが反応する、ちょっとした遊び心です。くだらないことと感じるかもしれませんが、このような遊び心が生まれるということは余裕があるという事です。ある程度のスキルを持ったメンバーが集まって、楽しみながらチームで開発を行うというのは理想でしょう。全員が日々学習し、スキルを身につけ、余裕が出てきたならば遊び心を加えていく、そんな仕事を目指しています。

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

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

*1:商標に考慮