61-ビルドをおろそかにしない

プログラマが知るべき97のこと」の61個目のエピソードは、ビルドに関する話です。これまで仕事で様々な開発現場を経験してきましたが、ビルドプロセスに関して真剣に取り組んでいる所はほとんどありませんでした。下請けで開発を行っている所が多かったのも理由かもしれません。元請けにソースコードだけを納品した結果、本番環境で動かない(ビルドも出来ない)という経験もあります*1。ビルドプロセスや環境構築に対して作業を見積もっていないケースもよくある話です。開発には、開発環境を用意し作成したコードをビルドする事が必要不可欠です。それなのに、各機能に関する見積もりだけというのも珍しい話ではありません。明らかにビルドプロセスが軽視されています。
ソフトウェア開発は実体が見えにくいものですが、ビルドプロセスはその中でも更に実体の見えにくい部分です。それが原因でビルドプロセスが軽視されていると思われます。ソースコードは質や量については測りにくいもののある程度の定量化は可能です。しかし、ビルドプロセスがどれだけ大変な作業かは経験してみないと解らないのです。少なくともコードすら書いたことないPMには想像できません。そして、これは一部のプログラマにも言える事です。ビルドプロセスは「魔法」という認識でいます。魔法と感じるのは知識や経験がないからです。
勿論、新人プログラマがビルドプロセスまで勉強する必要があるとは思いません。ですが、3−4年も経験を積めばホーム言語について一通り操れる段階になっているはずです。その時こそビルドプロセスを学ぶタイミングだと思います。ビルドプロセスはそれほど簡単なものでもありません。少なくとも1つのライブラリやフレームワークを学習する程度の学習コストはかかります。片手間に学ぶのではなくしっかりと腰を据えて学ばなければなりません。
最近のJavaの開発現場ではCIツールとしてJenkins(Hudson)を導入するところが増えています。そして、十分な効果をあげています。しかし、Jenkinsを使うには幾つもの前提となる技術が必要です。Jenkinsを設置するにはウェブアプリケーションサーバの設置ができなければなりません。SubversionなどのSCMと連携しなければメリットは低いので、SCMに関するスキルも必要です。Tracなどのチケット管理システムと連動することでさらに効果は高くなります。自動的にビルドさせるにはAntやMavenといたビルドツールを使えなければなりません。ユニットテストを行っていないならばCIのメリットを感じることも少ないでしょう。このように、Jenkinsを自然に導入できて活用できている現場は、様々な技術を少しずつ習得してきているのです。しかし、学習を怠っていた現場では10年前の開発スタイルが今も続けられています。そして、今後も変わらないのでしょう。
コードを書くことができればプログラマです。しかし、それだけではプロのプログラマではありません。周辺の技術も含め、ソフトウェア開発をトータルに推進できる必要があります。コーディングは楽しいものですが、ビルドプロセスや開発環境の整備など裏方の仕事にもっと興味をもって学習してみましょう。

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

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

*1:不安でしたがやる必要がないと上司が判断してました