変化に柔軟に対応するための必須技術―常時結合によるシステム開発効率化ガイド

コーディングの効率化だけでは行き詰まる

開発環境は年々便利になっています。かつてはエディターとコンパイラとデバッガで開発していた人も、現在はEclipseのようなIDEを用いて開発することが増えてきたのでないでしょうか。IDEの機能を使うとコーディングは便利になっていきます。テストファーストのようなプラクティスを導入している人も多いでしょう。

個人や小規模なチームで開発をする場合はコーディングの効率化がそのまま開発の効率化につながります。しかし、システムの規模が大きくなってくるとコーディングのスピードだけでは効率化が行き詰まります。

バージョン管理から常時結合へ

一つの問題は、コードの管理です。一人で開発していたとしても、修正や追加をするたびにコードの構造は複雑になっていき、いつどんな修正をしたのか把握するのは困難になっていきます。複数で開発していればなおさらです。コードのバージョンを管理するために、CVSのようなシステムを導入している人・チームは多いと思います。

しかしコードの履歴を取るだけでは十分ではありません。コードは動いてはじめて意味があるものです。コードに改変を加えても常に動作することを確認できるようなしくみが必要です。そこで出てきたのが常時結合(Continuous Integration)という考え方です。単体のコードだけでなくシステム全体のビルドとテストを繰り返し行い、コーディングが正しく行われていることを早いサイクルで確認していくのが常時結合です。

変化が少ないシステムでも大きいメリット

常時結合は変化が多いシステム開発では特に重要な習慣です。常に動くことが確認できると、安心してコードに手を入れることができるようになります。

変化が少ないシステムであっても常時結合のメリットは大きいです。コードの規模が大きくなるに従って、ビルドやテストの手間も膨らんでいきます。毎回発生する作業はあらかじめ自動化しておくと後でもっと大きな労力を節約することができます。

常時結合ツールCruiseControl/Go

本書では、常時結合ツールとして定評のあるThoughtWorks社のCruiseControlとGoを使った常時結合の方法を解説しています。

CruiseControl

CruiseControlはオープンソースで常時結合ツールとして基本的な機能を備えています。設定ファイル(config.xml、config.properties)にルールを書き込むことで、結合ビルドのタイミングや通知メールの内容を設定することができます。ダッシュボード画面で様々な情報を得ることもできます。

CruiseControlのダッシュボード画面
CruiseControlのダッシュボード画面

Go

Goは商用の常時結合ツールですが、Community Editionを無償で使うことができます。Goのほうがより多くの機能を備えています。Goではビルドからテストに至る一連の流れを「パイプライン」と呼ばれるまとまりで管理します。パイプラインの中にはステージと呼ばれる構成要素があり、複数のステージが順に処理されていきます。複数のパイプラインをまとめてグループを作って運用することもできます。

Goのビルド結果レポート画面
Goのビルド結果レポート画面

常時結合の先にあるもの―コンティニュアスインテグレーション

常時結合の環境が構築できたら、次はコンティニュアスインテグレーションに進んでみてはいかがでしょうか。コンティニュアスデリバリーでは常時結合の考え方をさらに推し進め、システムを本番環境にデプロイするところまで通して行います。コンティニュアスデリバリーではビルド、テスト、デプロイ、リリースを自動化し、システムを常に動作可能な状態に保ちます。

常時結合もコンティニュアスインテグレーションも最初の準備が肝心です。本書が変化に対応できるシステム開発の一助になれば幸いです。