日本における初の解説書であるJenkins実践入門を送っていただきました

先日、技術評論社の傳智之さん(@dentomo)より、Jenkins実践入門を献本していただきました。どうも、ありがとうございました。

Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

既に、Jenkins(Hudson)については、開発プロセスを自動化する継続的インテグレーションに欠かせないツールとして、日本でも非常に人気高いツールとなっており、また、雑誌やインターネットの記事でも今まで時々特集が組まれてきたと思います。
WEB+DB PRESS 総集編 [Vol.1?60]

WEB+DB PRESS 総集編 [Vol.1?60]

特に、作成者の川口耕介さん(@kohsukekawa)が日本人であるということもあって、日本語へのローカライゼーションやコミュニティー活動(プラグイン開発、勉強会など)が他の国と比べても活発なように感じます。実際、今回監修を担当された川口さん自身がまえがきの冒頭で、

Jenkinsは、世界中で広く使われている継続的インテグレーションサーバです。拡張性が高く、日本語化が進んでおり、活発なコミュニティーもあるお陰で、日本でもJenkinsの認知度は高いと思っています。

と書かれているように、世界に比べても日本はJenkins先進国と言えるのではないかとさえ思えます。ただし、その直後に書かれているように

しかし、実際に現場に適用しようと思った時に、拡張性・自由度の高さがかえって仇になって、「どうしたらいいかわかならい」という声もよく耳にします。ちょうど「レゴブロックが箱いっぱいにあるけれども、どうやったら家を作れるかわからない」というような状態です。

という言葉が、現状の状態を非常によく表現していると感じました。先進的なツールに対する積極的なコミュニティー活動が行われている一方で、多くの現場ではなかなか思うように普及が進まないというギャップは実際に多くの方が感じているのではないでしょうか。そのような状況にあって、本書のような気軽に読めるJenkinsの入門書が出版されたことは、このギャップを急速に埋める意味でも非常に大きな意味を持っていると思います。

本書は12個の章に分けて実践的なJenkinsの活用方法が解説されていますが、大きく3つに分けると

  • JenkinsやCIのコンセプトに対する入門(1章〜3章)
  • 実際の開発プロジェクトで必要な実践的な解説(4章〜8章)
    • JUnitテストレポートの組み込み
    • テストカバレッジレポートの組み込み
    • 自動コードインスペクション
  • より高度な話題の紹介(9章〜12章)
    • ユーザー管理
    • マルチプロジェクト依存関係設定
    • 分散ビルド
    • プラグインの利用、開発

のように大きく3つの部から構成されているように感じました。全体的に画面キャプチャを多用して、非常に丁寧に解説しており、本書を読み進めるためには高度なプログラミングのスキルは一切必要ありません。したがって、特に前半部分は非プログラマーのマネージャーやリーダーの方が、組織に初めてJenkinsを導入する際にも大いに参考になると思われます。一方で、既にJenkinsを使い込んでいる人にとっても、特に後半に書かれている、分散ビルドの考え方やプラグイン開発の方法については、十分に読み応えのある内容になっているのではないかと感じました。
入門書としては必要十分な適切な範囲を扱っていると思いますが、さらに、個人的に本書の内容に補うところがあるとすれば、

  • Mavenプロジェクトなどのマルチプロジェクトの構成方法(外部ライブラリーの依存管理)
  • テスト環境、プロダクション環境などのビルド対象環境の使い分けテクニック
  • Groovyなどのスクリプトを使った運用管理の自動化
  • Cloudbeeなどのクラウド開発環境や仮想環境でのJenkinsの活用方法

などでしょうか。これらについては、さらに、続編が期待されるところではありますが、本書を読み終えた方であれば、ネット上の情報で十分に自力で調べられるようになるかもしれません。もちろん、実際にアジャイルな開発環境を構築するためには、本書で紹介されているCI環境に加えて、ソースコードの構成管理ツールや、バグトラッキングシステム(BTS)についても調査する必要があるでしょう。
さて、私自身は、継続的インテグレーションなどのプラクティスはCruiseControlなどの別のツールを利用して以前から部分的に試みたことはありましたが、2008年の終わりごろから(Jenkinsの前身となる)Hudsonを使い始めました。20個くらいのサブプロジェクトからなる、それなりに大きな規模のプロジェクトのビルドをHudsonを使って自動化し、毎週定期的にテスト環境にリリースするというような、比較的ペースの速いプロジェクトで使ったことがあります。
ビルドシステム構築スキルの重要性 - 達人プログラマーを目指して
この時は、まだこのような解説書もなく、いろいろと手さぐりな状況でしたが、直感的なユーザーインターフェースのおかげもあり、ボタン一つで複数の環境用のビルドを自動実行するというシステムを作り上げることができました。最初のリリース時にはビルドからテスト環境までリリースするのに多くの手動作業が入っていたため、半日くらい時間を要したのですが、毎週リリースごとに徐々に手順を改良し、最終的にはビルド自体は20分もかからないくらいまで効率化できました。当時、このような入門書があったらどんなにかよかったのにと思いますね。
なお、以前に
SIerにはコード記述の自動化からビルド・デリバリの自動化へのトレンドの変化を理解してほしい - 達人プログラマーを目指して
で、一般にSIerはビルドを自動化していないというような誤解を与えかねない書き方をしてしまったのですが、なんと、本書の著者は全員NTTデータで研究をされている方々のようです。残念ながら、多くの現場では研究成果を浸透させるということが難しいという状況もあるのかもしれませんが、SIerでも先進的な取り組みをされているところがあるのですね。実際に、かなり前に以下のような記事を書いたことを思い出したのですが
もしSIerがまともなエンジニアリングの会社だったとしたらどんな仕事が考えられるか? - 達人プログラマーを目指して
本来SIerというのは情報システム構築の専門家集団であって、むしろ、率先的にJenkinsのような仕掛けを導入することを提案すべきだと思います。実際に、自分の今の会社もそうなのですが、新しい機能を頻繁にリリースするためには、こうしたビルドの自動化、デプロイのパイプライン構築が欠かせません。ただし、一般のユーザー企業でこうした専門家集団を育てて確保することは容易ではありません。ThoughtWorks社のようにSIerが率先してこうした部分の研究を行い、ユーザー企業に対して提案できるようになるというのはSIerが目指すべきあるべき方向の一つなのではないかと感じました。