CI/CDとは?詳しい意味やメリット、DevOpsとの関係について解説

 2022.12.07  株式会社システムインテグレータ

ウォーターフォール開発では、まさに水が流れ落ちるように、ソフトウェアの大きな流れに沿って開発が行われます。一方、アジャイル開発では、ソフトウェアを小さな機能単位に分けて優先順位をつけ、開発サイクルを繰り返します。

アジャイル開発は変更やバグ修正などに柔軟に対応できるというメリットがありますが、それぞれのエンジニアが書いたプログラムを統合しテストを行うなどの作業が煩雑になるケースもあります。この問題を解決するのが「CI/CD」という開発手法です。

この記事では、CI/CDの概要や必要性、メリット・デメリットを紹介します。併せて、アジャイル開発やDevOpsとの関係について解説します。

CI/CDとは

denchoho-grace-period-3

CI/CDとは、ソフトウェアの変更に必要なテストを自動化し、常にリリースできる状態にしておく開発の手法をいいます。

CIは「Continuous Integration(継続的インテグレーション)」の略語、CDは「Continuous Delivery(継続的デリバリー)」「Continuous Deployment(継続的デプロイメント)」の2つの言葉を省略したものがCI/CDです。

CI/CDとは一つの技術のことではなく、ソフトウェア開発の「ビルド→テスト→デプロイ」の流れを滞りなく行うために「自動化」する技法で、これを「継続的」と表しています。

では、具体的にCI/CDとはどのような仕組みなのでしょうか。

「CI」継続的インテグレーションとは

継続的インテグレーションの「インテグレーション」は「統合」と訳されます。

アジャイル開発により小さな機能単位に分けられたソフトウェアをエンジニアが変更する度に、それぞれに対してテストを実行し本番環境にのせてリリースする、という作業が発生します。これらを統合して管理し、ソフトウェア全体を常に最新の状態に保つのは容易ではありません。

このようなプログラムの作成や変更作業からテストまでを自動化することを「継続的な統合」として、CIと呼んでいるのです。

CIを導入していれば、プログラムに変更が加えられる度に、自動的にテストが行われます。ただし、CI/CDはテストの実行は自動的に行ってくれますが、テストプログラムは作成しません。自分たちで作成する必要があります。

「CD」継続的デリバリーとは

継続的デリバリーとは、CIで統合されたソフトウェアを本番に対応できる環境へ届ける役割を担います。デリバリーされたソフトウェアは、リポジトリ(貯蔵庫)へ自動的にリリースされます。ソフトウェアがいつでも本番環境にのせられる状態を、リポジトリで常に保っておくことが継続的デリバリーの目標です。

CDは、プログラム変更を統合し、本番環境で利用できるよう構築します。リポジトリへのデリバリーまで、すべての段階でテストとリリースが自動化されます。ここまでの工程が終了した時点で、運用チームはいつでも簡単に本番環境へのリリースを行うことができるのです。

ここでは、本番環境へのリリースまでは自動化されません。本番環境へのリリースはその都度人間が判断して行います。本番環境へのリリースまで自動化することは、継続的デプロイメントというプロセスとなるため、継続的デリバリーとは区別されています。

「CD」継続的デプロイメントとは

継続的デプロイメントとは、継続的デリバリーによってリポジトリに格納されたソフトウェアを、人間が判断するのではなく、自動的にテストを行い本番環境にのせることです。

この段階では、人の目のチェックが入らずにユーザーに直接プログラムの変更が届くため、自動化するテストを入念に作成する必要があります。

実際にCIから継続的デプロイメントまでをパイプライン化した場合、すべての自動テストに合格すれば、エンジニアがプログラムに変更を加えてから数分でユーザーに届くことになります。

CI/CDの必要性

2004年に、スウェーデンのウメオ大学のエリック・ストルターマン教授の論文によるDX(デジタルトランスフォーメーション)が提唱されてから、日本でも多くの企業が「デジタル化が社会やビジネスを豊かに変化させる」というDXに取り組み始めました。

現代のビジネス市場では、変化に対応しきれていないことやソフトウェアの全体像が明確ではないまま開発を行っているなど、さまざまな課題があります。従来のウォーターフォール開発では、仕様変更などへの柔軟な対応に向いていませんでした。そこで、変化に即応でき、目的を明確化できるアジャイル開発やDevOpsなどの手法が注目され、取り入れられました。

同時に品質や効率化が求められ、アジャイル開発やDevOpsと相性の良い、工程の自動化を行えるCI/CDが必要となったのです。

CI/CDとDevOps、アジャイルとの関係

では、DevOpsやアジャイル開発とCI/CDの関係性を見ていきましょう。

DevOps(デブオプス)とは「開発(Development)」と「運用(Operations)」を組み合わせた造語です。これまで、開発部門と運用部門は別々に仕事をしており、時に反対の立場をとることもありました。しかし、品質の良いシステムを迅速に顧客に届けたいという思いは同じです。そこで、両者が緊密に連携し、柔軟かつ迅速に開発を行う、という考え方が生まれました。それがDevOpsです。

また、アジャイル開発とは、システムの機能を細分化して重要な部分から開発し、テストとリリースを繰り返して開発していく方法で、顧客の要望を柔軟に取り入れ、迅速にサービスを提供することができます。

CI/CDで、テストからリリースまでを自動化し人的ミスをなくすことにより、DevOpsにおいては「開発部門と協力しシステムを迅速に顧客に届ける」という目標を果たすことができます。つまり、CI/CDはDevOpsの要素の一部といえます。また、アジャイル開発においては、細分化された機能ごとの開発サイクルをCI/CDにより自動化し、全体像を把握しにくいというアジャイル開発のデメリットを補えます。

このように、DevOpsとアジャイル開発の効果を発揮するために欠かせないのがCI/CDです。

なお、アジャイル開発やDevOpsの詳細については、こちらも併せてご覧ください。

アジャイル開発とは?特徴やウォーターフォールとの違いなど徹底解説

DevOpsとは?目的や重要性、導入メリットを解説

CI/CDのメリット

CI/CD導入にはさまざまな効果がありますが、ここでは代表的なメリットを3つ紹介します。

開発スピードの向上

システム開発の工程のうち「ビルド→テスト→デプロイ」が自動化されると、人の手で行っていた煩雑な工程のスピードが格段に上がります。エンジニアたちはその分ほかの作業を行えるだけでなく、常に速さを求めている市場への供給もスピードアップできます。

生産性と品質の向上

CI/CDによりテストなどの作業から解放されたエンジニアは、プログラムの創作に時間と手間をかけることができ、生産性・品質が向上します。また、CI/CDでは、あらかじめ設定した基準のテストがすべて自動的に行われるため、取りこぼすことはありません。そのため、一定の品質が保証されるのです。

バグ修正、変更などの高速化

本番環境に移行して運用が始まった際に、バグが発生してしまう場合は、コードの修正からビルド、テスト、デプロイの流れを再び行う必要があります。これまでは、対応にある程度の時間がかかっていました。

一方CI/CDでは、コードを修正してから先の流れは自動化され高速で処理されるため、顧客へのバグ対応も迅速に行えるようになります。

CI/CDのデメリット

CI/CDではビルドやテストの工程が自動化されますが、その前に自動化するための準備作業が必要です。例えば、ビルドスクリプトやテストコードは人の手で作成しなければなりません。この部分でヒューマンエラーがあるとCI/CDは正しく機能しなくなってしまいます。

また、一度作成したら終了ではなく、メンテナンスが必要です。システムが変更になった場合などには、テストコードも当然書き直す必要があります。これらの作業は結構な負担であり、CI/CDを導入するデメリットといえます。

加えてCI/CDは、アジャイル開発において大きな効果を発揮しますが、ウォーターフォール開発の場合には導入しても効果を発揮できません。アジャイル開発は小さな機能単位で開発を進め、それぞれ変更や修正の度に「ビルド→テスト→デプロイ」を繰り返すのに対して、ウォーターフォール開発ではシステム全体を工程に沿って長期的に開発していきます。そのため、「ビルド→テスト→デプロイ」を繰り返し行う機会がないのです。つまり、CI/CDの導入は費用対効果が悪いということになります。

CI/CDの実施フロー

では、実際CI/CDは開発工程にどのように組み込まれるのでしょうか。ここでは、CI/CDを導入した際の流れを解説します。

(1)バージョン管理ツール(Git)

作成されたソースコードは、まずバージョン管理ツールに反映されます。バージョン管理ツール(Git)とは、ソースコードに変更履歴を記録し、管理するシステムです。

ソースコードが反映されると、まずCIが働いて、コードエラーのチェックや既存の機能を侵害していないか、既存のコードに影響はないか、仕様どおりの機能を満たしているかなどのテストが行われます。ここで基本的なバグが先へ進むのを食い止めるのです。

(2)ビルド

CIのチェックに合格したソースコードは、CDによりリリース用のブランチ(作業用に複製された領域)にマージ(併合)され、ビルドされます。

ビルドとは、ソースコードをコンパイルし必要なアプリケーションやライブラリなどを準備して、ソースコードが動作できる環境を組み立てることです。ビルド後は自動的にテスト用のサーバーにデリバリーされ、いつでも動作確認ができる状態になります。

(3)デプロイ

通常は、デリバリーの先は人が確認を行ってその都度デプロイ(本番環境へのアップデート)を行うことが多いのですが、デプロイまでを自動化している場合もあります。

テスト作業などの属人化をなくし、担当者による結果のばらつきなども防ぐことができるため、最初のテストからデプロイまでを自動で行えるCI/CDのパイプラインを整えることはとても重要です。

CI/CDを実現するためのツール

CI/CDは一つの技術ではなく、システム開発の流れを自動化するための技法です。前章で説明した実施フローの通り、一般的にはCI/CDはいくつものツールで成り立っています。CI/CDパイプラインを実現するためには、以下のようなツールが必要です。

・コードリポジトリ、成果物リポジトリ

作成したソースコードのバージョンや成果物の管理を行います。

・CIツール

ソースコードに変更があった場合に、ビルドやテストを最新のコードで行うようそれぞれのツールに連携し、指示を出します。

・構成管理ツール

テストや本番環境のインフラを構築したり、構築の手順を管理したりするツールです。
構築の自動化も行います。

・ビルドツール

ソースコードのコンパイルなど、ビルドに必要な処理を自動で行うことが可能です。

・テストツール

ソースコードのエラー発見、操作テストや負荷テストなど、さまざまなテストを自動で行い、アプリケーションの品質をチェックします。

これらのツールは、オープンソースとして公開されているものから商用のものなど様々です。自社の目的や開発の方法に合わせて使用すると良いでしょう。

まとめ

サービスの提供にスピードや効率化が求められる時代となりました。特に、ビジネスで使用されるソフトウェア関連のサービスは、不具合があると顧客の仕事まで滞ることになります。トラブルには速やかに対応し、こまめな修正や変更でバージョンアップしていくことが重要です。

アジャイル開発は機能を細分化して開発を行うため、迅速な対応に向いています。そして、アジャイル開発における問題点である細分化したプログラムコードの統合やエンジニアによって異なる品質の基準統一などは、CI/CDによって解決することができるのです。

弊社が過去に実施した「アジャイル開発のプロジェクト管理手法」セミナー(講師:弊社社長梅田)の講演資料も公開しています。課題をお持ちの方はこちらもぜひご覧ください。


RELATED POST関連記事


RECENT POST「アジャイル開発」の最新記事


アジャイル開発

DevOpsとは?目的や重要性、導入メリットを解説

アジャイル開発

テスト自動化とは?重要性やメリット・デメリットを解説

アジャイル開発

アジャイル開発におけるテストの方法とは?ポイントや効率化のコツを解説

アジャイル開発

リリース管理とは?目的や手順を詳しく解説

CI/CDとは?詳しい意味やメリット、DevOpsとの関係について解説

OBPM Neo TOPへ

ブログ購読のお申込み

人気資料ランキング