CI/CDとはなにか
システム開発において、製品の挙動や動作を網羅的に確認するテストは必要不可欠です。特に大規模開発や共同開発の場合は、テスト期間に確認すべきことがたくさんあり、人海戦術でテストを行うと大幅に時間を要します。そこで、CI/CDの出番です。CI/CDは製品に加えた変更を自動でテストし、リリースできる状態まで自動化する開発手法です。
ちなみにCI/CDとは、2つの単語の頭文字をとった略称です。正式名称は、CIが「Continuous Integration」、CDが「Continuous Delivery」。日本語では、CIは「継続的インテグレーション」、CDは「継続的デリバリー」や「継続的デプロイメント」と呼ばれています。ここからは、それぞれの言葉の意味を詳しく説明します。
CI(継続的インテグレーション)とは
通常システム開発では、記述したソースコードに誤りがなく、問題なく動作するかの動作確認(テスト)を繰り返し行います。CIでは、その一連の流れ(開発箇所の反映とテスト)を自動化します。
つまり、システム開発で行うソースコードの修正とテストを、連続的(Continuous)に統合(Integration)させる手法がCIなのです。CIが反復的に修正とテストを自動で行うことで、人の手に依存させることなく、効率的にプロジェクトを進めることができます。
CD(継続的デリバリー)とは
継続的デリバリーでは、開発製品と検証環境や、製品が実際に動作する本番環境との連携を自動化します。システムの工程が連続(Continuous)して実施できるように、開発環境と本番環境をつなぐための流れ(Delivery)をつくります。CIで開発の流れを効率化させ、CDでリリースの準備をするイメージです。
具体的には、製品のリリース補佐、デプロイ、修正内容の管理、監視などを実施します。リリースの判断は開発者が行うため、どのタイミングでどの機能をリリースするかを選択できます。
CD(継続的デプロイメント)とは
CDのDには、デリバリーのほかに、デプロイメントという意味もあります。継続的デプロイメントでは、修正したコードを一括で反映、展開させることを自動化します。CI(継続的インテグレーション)→CD(継続的デリバリー)→CD(継続的デプロイメント)のステップです。
開発者がリリースのタイミングを決める継続的デリバリーとは違い、継続的デプロイメントでは、開発したソフトウェアをシステムが自動で展開します。リリース前にコードのテストを入念に行うプロジェクトには、適した手法といえます。
CI/CDとDevOpsの関係
ソフトウェアの開発手法であるDevOpsを実現するためには、CI/CDが必要不可欠といわれています。DevOpsとは、開発担当と運用担当の連携をスムーズに行い、円滑な開発を進めるための開発手法であり、開発概念です。
一方CI/CDは、「製品のリリースを早めるために、コードの修正箇所の管理からテスト、リリースまでの諸作業を自動化する」具体的な手法です。どちらも、開発サイクルを効率化させる目的は同じです。それを踏まえると、CI/CDは、DevOpsの開発概念を実現させるために必要な開発手法の1つといえます。
CI/CDとアジャイル開発の関係
近年の新しいシステム開発の主流として、アジャイル開発があります。アジャイル開発とは、工程ごとに少しずつ変更を加えて開発を進める手法です。開発工程には、要件定義・設計・開発・レビュー・テストなどがあり、それらの変更からリリースまでを短い周期で繰り返します。
アジャイル開発の実現には、CI/CDが不可欠であるといえます。アジャイルが「迅速・早い」という意味をもつほど、アジャイル開発には速さとスピードが求められます。開発と運用を並行して実施するアジャイル開発において、コードの変更やテストを自動化できるCI/CDは、とても有益な手法です。より効率的かつ、開発スピードの高速化を実現します。
CI/CDパイプラインの重要性
CI/CDパイプラインとは、CIとCDを組み合わせて一連のプロセスを自動化する仕組みのことです。ソースコードの管理からリリースまで、各工程における諸作業をパイプでつなぐように、一連化して自動化します。
開発工程の一部にCI/CDを導入することもできますが、CI/CDパイプラインを構築した方が、各工程の連携がスムーズに進むため効果的です。CI/CDパイプラインを活用するとリリースが加速し、全体の生産性の向上につながります。
CI/CDパイプラインの構築に必要なツール
CI/CDパイプラインを構築するためには、下記の5つのツールを使用します。
- ・コードリポジトリ/成果物リポジトリ
- 成果物のバージョン管理など、日々のソース管理を行います。
- ・CIツール
- コードを変更したら、ビルド(ソースコードを解析して、問題がなければ実行可能なファイルに変換すること)やテストを行います。その際、各ツールにコードを連携するために用います。
- ・構成管理ツール
- 動作環境などのインフラ面の自動化や管理を行います。
- ・ビルドツール
- ビルドの処理を自動化するためのツールです。
- ・テストツール
- 機能テストや負荷テストなどの動作確認を行います。
開発するなかでコード変更が発生すると、まずビルドや変更点の動作確認を行うために、それぞれのツールを連携するCIツールが必要です。その次に、ビルドを自動で処理するビルドツールと、動作確認を自動化するテストツールが必要です。
そして、動作環境などのインフラ面の管理を構成管理ツールが行い、成果物のソース管理をコードリポジトリや成果物リポジトリツールによって自動化します。
CI/CDを導入するメリット
CI/CDツールを導入して、開発テストやリリースが自動化されることで、さまざまなメリットが生まれます。具体的に見ていきましょう。
リリースの加速
プログラムのソースコードを変更して、各環境に反映しリリースするまでの作業を手作業で実施しようとすると、多くの時間を要します。数か月以上かかることも少なくありません。
そこで、活用したいのがCI/CDです。先述のとおり、CI/CDは製品をリリースするまでの諸作業を自動化する手法です。手動で作業するよりも、大幅に時間を短縮できます。そしてその結果、リリース頻度を加速できます。
特にスピードが重要視されるアジャイル開発では、週単位で開発を繰り返すことも少なくありません。そのため、CI/CDで諸工程を自動化することで、効率的にプロジェクトを進めることが期待できます。
生産性と品質の向上
CI/CDを導入すると、これまで人の手で行っていたリリースまでの作業が自動化され、作業者の業務が軽減します。その結果、作業効率が高まり、生産性が向上するでしょう。さらに、これまであまり注力できなかった質の高い作業に、時間を費やせるようになります。
新たな仕様変更や便利な機能の追加など、ユーザーフレンドリーな提案ができるようになり、品質の向上も可能です。
コードの品質向上
ユーザーが目にするシステム画面は、コードで記述されたプログラムの結果です。画面では同じ結果に見えていても、裏で記述されているソースコードが、実は既存の機能に影響を与えるような複雑なロジックを記述している可能性も否定できません。
目検によるコードチェックは、人が行うため正確性や信頼性が乏しく、属人化したコードのままリリースされてしまう可能性を秘めています。しかし、CI/CDによって自動化すれば、修正したコードが一目でわかります。一定の基準でコードにエラーがないか、既存機能に影響がないかなど、迅速かつ確実にチェックできます。それにより、手間をかけずにバグの早期発見と修正が可能になるため、コードの品質を高められるでしょう。
バグの検出と修正が容易
CI/CDツールによってテストを自動化することで、手動よりも高頻度でテストを実施できます。特に、アジャイル開発などの短い周期で開発とテストを繰り返す手法では、テスト回数が多い分、バグが発生する可能性も高まるでしょう。
CI/CDツールを導入すれば、バグを早い段階で発見できます。そのため、ほかの機能への影響が少ないうちに、バグの修正が可能です。
テスト忘れの防止
たとえ軽微であっても、プログラムの修正後には、必ずテストが必要です。テストを怠ると、ほかの機能への不具合などが、リリース後に判明する可能性があるからです。CI/CDツールの導入によって、必ず自動でテストが実施されます。人的ミスによるテスト忘れを防止できるほか、毎回テストコマンドを実行する手間も省けます。
CI/CDを導入するデメリット
CI/CDツールにはメリットが豊富ですが、デメリットも考えられます。どのようなデメリットがあるのでしょうか。
CI/CDパイプラインを構築するための作業負荷が発生する
CI/CDを最適化するには、パイプラインの構築が必要です。そのためには、CI/CDツールによる自動化の基準を決めなくてはなりません。具体的な作業としては、ビルドを行う際に参照するコマンドをまとめたビルドスクリプトを作成したり、テストコードを作成したりします。
基準の設定以外にも、品質担保のための定期的なコードの確認や、運用後に新たな条件の追加など、人の手による保守作業も必要です。これらの作業を実行するためには、DevOpsエンジニアなど特定のスキルをもった人材も必要になるでしょう。
継続的に実施しないと費用対効果が見込めない
CI/CDの導入や運用には、コストがかかります。さらに、パイプラインの構築にあたって、作業負荷が発生します。そのため、CI/CDを導入しても、テストとリリースを行う頻度が少なければ、導入コストと使用頻度があわず、費用対効果が見込めないケースもあるでしょう。
例えば、アジャイル開発は開発スパンが短く、頻繁にテストや自動化をするため、CI/CDツールの費用対効果が見込めます。しかし、ウォーターフォール開発のように、頻繁に開発とリリースを行わない場合は、費用対効果が見込めない可能性が高いでしょう。導入時には、プロジェクトの性格を見極めて、リリースやテストの頻度が費用対効果にあうかを検討してから、導入するようにしましょう。
CI/CDはアジャイル開発やDevOpsの実現に不可欠
CI/CDは、コードの修正箇所の管理からテスト、リリースまでを自動化する開発手法です。アジャイル開発との相性がよく、DevOpsを実現させるために必要不可欠です。CI/CDを導入するメリットは以下のとおりです。
- ・リリースの加速
- ・コードの品質向上
- ・バグの検出と修正が容易
- ・テスト忘れの防止
一方で、CI/CDパイプラインを構築するための作業負荷が発生したり、継続的に実施しないと費用対効果が見込めなかったり、デメリットも存在します。テストとリリースを頻繁に行うアジャイル開発などのプロジェクトには、とても有効な手法です。