昨今ではソフトウェアに求められる機能が増え、開発の規模が膨大化・複雑化しています。その結果、開発担当者にかかる負担も重くなっている状況です。

特に開発の後期にバグが発見され修正の必要が生じると、開発初期の段階までさかのぼって修正作業をしなくてはなりません。そうなると、開発担当者の負担はさらに大きくなります。

CI(継続的インテグレーション)は、こうした開発担当者の負担を軽減しソフトウェア開発の品質を高めるための手法です。開発の現場で採用されることも多くなっていることから、今後ソフトウェア開発に携わる方は知っておきたい知識ともいえます。この記事では継続的インテグレーションの詳細やメリット、利用されるツールについて解説しています。

CI(継続的インテグレーション)とは

CI(継続的インテグレーション)は「Continuous Integration」の略で、ビルド(※1)とテストを継続的に繰り返し実行するソフトウェア開発の手法です。継続的インテグレーションでは、専用ツールを利用しビルドとテストを自動化します。

※1ビルドとは?

ビルドとはプログラミング言語で書かれたソースコードを基に、実行可能なファイルに変換する一連の作業をさします。

また継続的インテグレーションを採用する場合、開発担当者は自分のコードを頻繁にセントラルリポジトリ(※2)にマージするのも特徴です。リポジトリへのマージを定期的に行うことで、他開発担当者の作業と衝突したり競合したりするのを予防します。

※2リポジトリとは?

ソフトェア開発においてリポジトリとは、プログラムのソースコードやドキュメントなどを一元的に集めておくデータベースです。中でもセントラルリポジトリは、デフォルトで利用するリポジトリを指します。またコードをリポジトリにマージするとは、リポジトリに収納済のコードと統合するという意味です。

CI(継続的インテグレーション)導入のメリット

従来のように開発後期にまとめてテストを行いバグが発見されると、前の段階にさかのぼり修正しなくてはなりません。その結果、修正のための工数も大きくなってしまいます。

またソフトウェア開発の規模が大きくなるに従い、当然ながら行うべきビルドやテストの回数も増えています。これらを全て手動で行うと開発担当者の負担が増えるのはもちろん、作業の属人化が顕著となり品質も安定しません。

継続的インテグレーションは、こういったソフトウェア開発の課題を解決するための手法です。以下、具体的にどんなメリットがあるか紹介します。

バグの早期発見

継続的インテグレーションでは、ソフトウェア開発初期の段階から継続的にテストを繰り返します。これによりバグが早期に発見できるようになるため、修正のために前の段階へさかのぼるリスクが軽減されます。

開発工数の削減・生産性の向上

開発の早い段階でバグを発見できることから、前の段階に戻って対応する負担が減り修正にかかる工数がおさえられます。また幾度となく繰り返されるテスト・ビルドの作業が継続的インテグレーションにより自動化されることで、開発担当者の負担を軽減できます。

コードがリポジトリへ頻繁にマージされバージョン管理が適切に行われることで、他担当者との競合を早い段階で発見できる点も重要です。作業の競合や衝突を防げることから、開発効率の改善にもつながります。

これらの結果、開発チームの生産性も向上するのです。

品質の向上

継続的インテグレーションにより開発工数が削減され生産性が高まることで、ソフトウェア品質の向上も期待できます。テスト・ビルドの自動化により属人化や人的ミスがなくなることから、一定の品質を担保できるようになるというメリットもあります。

継続的インテグレーションと併用される継続的デリバリーとは

継続的デリバリー(CD/Continuous Delivery)は、継続的インテグレーションと併用されることが多いソフトウェア開発手法です。継続的インテグレーション(CI)と継続的デリバリー(CD)をあわせて、CI/CDと呼びます。

継続的インテグレーションの役割は、テストとビルドまでです。一方、継続的デリバリーはビルド済みのコードを、テスト環境や本番環境へ自動的に展開する(デプロイする)仕組みです。ソフトウェア開発の現場では、継続的インテグレーションにとどまらず継続的デリバリーを併用しすることが多くなっています。

代表的なCIツール

CI(継続的インテグレーション)を支援するツールには様々な種類があり、開発の現場で利用されています。CIを実現するには、これらツールの利用が欠かせません。この項では、その中でも代表的なツールをピックアップしてご紹介します。

Jenkins

Jenkins(ジェンキンス)は、ビルド・テスト・デプロイといった作業を自動化し、CI/CDを支援するツールです。Jenkinsはサーバーにインストールして利用します。

Javaが動作する環境であれば利用できるため汎用性が高いことや、プラグインが豊富にそろっている点がメリットです。Jenkinsは数あるCIツールの中でも最も有名で、よく利用されています。

Travis CI

Travis CIはSaaS型のCI/CDサービスです。GitHubと連携し、自動でテストを実行します。Travis CIを利用する場合、サービス側が用意するサーバー上でテストが実行されるため簡単な設定だけでCIを実現可能です。その他、C++やJava、PHP、PYTHONなど様々なプログラミング言語に対応している点も、Travis CIを使うメリットと言えます。

※GitHubとは?

GitHubは、ソフトウェア開発用のプラットフォームです。世界中のプログラマーが自分で作成した公開用プログラムコードをGitHub上に保存し、他プログラマーと共有しています。

Circle CI

Circle CIはJenkins同様に、ビルド・テスト・デプロイなどの作業を自動化するクラウドサービスです。Jenkinsが自分で用意したサーバーにインストールして使う必要があるのに対し、Circle CIはサービスに登録するだけで利用できます。

Azure Pipelines

Azure Pipelinesは、Azure DevOps上でビルド・テスト・デプロイを自動化しCI/CDを実現するサービスです。Azureの他、AWSなど任意のクラウドでも利用できます。

※Azure DevOpsとは?

開発担当者・運用担当者が協力し合う開発手法「DevOps」を、Microsoftのクラウドサービス「Azure」上で実現するためのツール群・プラットフォームです。

AIQVE ONEのクラウドを有効活用したCI環境の構築サービス

AIQVE ONE株式会社では、クラウドを使ったCI環境の構築サービスを提供しています。本サービスではCircleCIやTravisCI、Azure Pipelines等でクラウド上にCI環境を整備したり、社内PCにJenkinsをインストールしCI環境を構築したりします。

さらにCI環境を管理する人材が不足している場合は、スクリプトのメンテナンスを行う人材を提案することも可能です。既存のCI環境からクラウド上のCIサービスへ移行する支援も行っています。

まとめ

CI(継続的インテグレーション)はソフトウェア開発初期から、テストやビルドを繰り返すことでバグを早期発見する手法です。結果、開発後期にバグが見つかり修正に必要な作業が膨大化するのを予防できます。また継続的インテグレーションでは頻繁に繰り返されるテストとビルドの作業は自動化され、開発担当者の負担が軽減されます。

継続的インテグレーションと併用されるのが多いのが、CD(継続的デリバリー)です。継続的デリバリーでは、ビルド済のコードを自動的にテスト環境や本番環境へ適用します。継続的インテグレーション・継続的デリバリーをあわせて、CI/CDと呼びます。

CI/CDはその規模が膨大化し続けているソフトウェア開発の現場で、採用される機会が増えている手法です。開発担当者の負荷が大きくなるのを防ぎ、ソフトウェア開発の効率や品質を高めるのに役立っています。