IT・デジタル化が進み、ソフトウェアが社会を支えているといっても過言ではない昨今、ニーズの多様化や変化のスピードに対応するためにソフトウェア開発も大きく変化してきました。ソフトウェア開発が加速され、大型化するにつれてより良い開発手法が求められ、その中から生まれたツールに「CIツール」があります。
従来のソフトウェア開発は、複数の開発者がそれぞれ個別に作業をし、作業が完了して単体テストを行った後に初めてそれぞれが作成したソースコードを統合するのが一般的でした。しかし、この方法ではソースコード同士を統合した際にトラブルが発生し、その修正に多くの時間が必要になるという課題があります。 もっと短いサイクルでこまめに統合できれば、不具合の早期発見が可能になり、修正もより少ない工数で行えます。それを実現するのがCIツールです。CIとは、Continuous Integration(継続的インテグレーション)の略で、継続的に統合できる仕組みを指します。    

CIツールで開発作業の効率を大幅にアップ

継続的インテグレーションは、コードの変更をこまめに反映し、ビルドやテストを繰り返すことで不具合を早期発見し、開発効率を高めながら、より良い品質のソフトウェアを開発する手法です。
CIツールは、開発者がソースコードをリポジトリ(コードを管理する保管場所)に登録すると、ビルドからテストの実行、結果レポートの作成などを自動的に実行してくれるツールです。CIツールを導入することによって、テストの自動化や開発状況の把握、ソースコードの静的解析が可能で、ツールによっては継続的デリバリー(CD:Continuous Delivery)まで自動で行えるものもあります。

CIを実現する環境

継続的インテグレーションを実現するためには以下のような環境の構築が必要です。それぞれツールを使って実現します。

CI/CDを実現する環境のイメージ図

コードの保管場所(リポジトリ)

開発者が作成したソースコードを保管し、変更履歴を管理するバージョン管理システムです。    

代表的なツール:Git、Subversionなど

オーケストレーションツール

ソースコードのビルド、インスペクション、テスト、デプロイを管理するツールです。開発者がソースコードの変更をコミットすると、オーケストレーションツールがビルドからデプロイまでを自動で行います。

代表的なツール:Jenkins、Circle CIなど

フィードバックの通知

継続的インテグレーションの結果を開発者にフィードバックするツールです。これにより、発生した問題に対して即座に対応できるようにします。

主に使われるツール:チャットサービス、メールサービスなど

CIを実現するために必要な条件

CIを実現し、その効果を引き出すためには、必要となる前提条件があります。

バージョン管理

CIを行う上では、プログラムのバージョン管理が必須条件となります。

テストの自動化

CIをツールで自動化する場合、テストが自動化されているとより大きな効果が得られます。CIを実現するための必須条件ではありませんが、自動テストを取り入れることでより効果的なCIが実現できます。

CIツールを稼働させるCIサーバー

CIツールをインストールするためのCIサーバーが必要になります。ただし、クラウドサービスを利用する場合は、自社内にCIサーバーを構築する必要はありません。

注目の3大CIツールを紹介

次に、CIを実現する、「Jenkins」「Circle CI」「GitLab」という注目の3大ツールをご紹介します。

歴史のあるCIツール、今も現役「Jenkins」

「Jenkins」は歴史が古く、汎用性が高いことから現在も広く支持を得ているオープンソース(OSS)のCIツールです。サーバー上に環境を構築するする必要がありますが、自己完結型のJavaベースのプログラムで、簡単にインストールできます。
数多くの導入実績があり、設定が容易です。また、世界中のソフトウェア開発者が提供する1,800以上のプラグインが利用できるのが最大の特徴で、プラグインを使うことで使い慣れたツールを自動化パイプラインの中に容易に組み込むことができます。

SaaSとして利用できてサーバー不要の「Circle CI」

オンプレミスでのみ利用できる「Jenkins」に対し、クラウドで利用できるのが「Circle CI」です。他のクラウドサービスとの連携が容易で、GitHub、BitbucketなどのGitによるクラウドベースのバージョン管理サービスと連携して利用します。
また、プライベートなサーバーで利用可能な「セルフホスティング」というオンプレミス型サービスも提供されています。
Circle CI はバージョン2.0から、Dockerコンテナ内でビルドが可能になりました。そのため、他のビルドの影響を受けず処理が実行できる、環境の再利用がしやすいといったメリットがあります。また「”Performance Pricing Plan」という従量課金の料金体系が提供されており、無駄なコストをかけることなく利用できるという特徴もあります。

バージョン管理機能と連携できる「GitLab」

「GitLab」は比較的新しいツールで、ソースコードの管理からコードレビュー、CI/CD(継続的インテグレーション/継続的デリバリー)、モニタリング、課題管理などの機能を持つ、開発サイクル全体に対する統一的な環境を提供するツールです。開発担当と運用担当が連携する開発手法である「DevOps」を意識して作られており、CIの自動化パイプライン内に組み込まれたセキュリティの自動スキャンにより、セキュリティも連携する「DevSecOps」を実現します。
基本的にはオンプレミスでの導入となりますが、GitLabがホストするSaasでの利用も可能になっています。無料で利用できるプランから有料プランまで、ニーズに応じてプランが選択できるのも魅力です。

CIツールを選ぶときのポイント

最適なCIツールを選ぶポイントを紹介しましょう。

オンプレミスかクラウドか

CIツールには、大きく分けて「オンプレミス型」と「クラウド型」があり、それぞれ以下のツールが有名です。

  • オンプレミス型:Jenkins、GitLab
  • クラウド型:Travis CI、CircleCI

オンプレミス型は、サーバーを構築し運用する手間とコストがかかりますが、一般的に拡張性が高いというメリットがあります。一方、クラウド型は拡張性が低いものの、サーバーを構築する必要がなく、簡単に使い始めることができます。

拡張性、プラグイン

「Jenkins」はそれ単体ではできることが限られますが、豊富なプラグインがあり、独自のカスタマイズが可能です。一方、「CircleCI」と「GitLab CI」は機能が比較的豊富ですが、プラグインの提供はなく、独自の拡張はできません。

バージョン管理システムとの連携

バージョン管理やプロジェクト管理にGitLabを利用しているなら、GitLabが提供するCI/CDツール「GitLab CI」がおすすめです。GitLabアプリケーションの一部として提供されている「GitLab CI」なら、環境構築などの手間なく、GitLabの使い勝手そのままにCIを始めることができます。
また、GitHubを利用しているなら、2019年にGitHubの新機能として登場した「GitHubAction」を利用することで1つのツール内でCI環境が構築できます。

CIツールの選択は、自社のニーズを考えてから

従来のウォーターフォール型開発からアジャイル開発への移行の波とともにその必要性が強く認識されているCIですが、現在のところCIのベストプラクティスは確立されていません。CIツールに関してもまた然りで、定番と呼べるツールはまだ存在しません。そのため、CIツールの導入には、まず自社のニーズは何かを知ることが大切です。
CIツール導入の目的は明確か、ツールのどの機能を重視するのか、導入はオンプレミス型かクラウドサービスか、オンプレミスの場合社内にCIツールを担当するDevOpsチームを置くことはできるのかなど、自社のニーズを開発チームと連携して把握し、CIの構築で目指す未来を考え、導入するツールを選択するようにしましょう。

CIの構築は簡単ではありません。自社のニーズにマッチする環境を構築するには、試行錯誤を繰り返すことになるかもしれません。しかし、そのビジネスメリットを考えると、目指す価値のある未来です。

SHARE

  • facebook
  • twitter

SQRIPTER

Sqripts編集部

記事一覧

Sqripts編集部がお役立ち情報を発信しています。

Sqriptsはシステム開発における品質(Quality)を中心に、エンジニアが”理解しやすい”Scriptに変換して情報発信するメディアです

  • 新規登録/ログイン
  • 株式会社AGEST