Facebook x

ジャンル

テスト技法・工程 2024.05.01
x hatenabookmark

CI/CDとは?それぞれの概要とプロセス・代表的なツール・導入のポイント

執筆: 布施 昌弘

バルテス・ホールディングス株式会社 R&C部 副部長

CI/CDとは?それぞれの概要とプロセス・代表的なツール・導入のポイント

ソフトウェア開発の生産性向上を図るべく、「CI/CD」を取り入れる企業やチームが増えてきました。CI/CDに関心はあるものの、その意味やメリット、実現方法を把握していない人も多いのではないでしょうか。

今回は、CI/CDとは何か、基本からわかりやすく解説します。CI/CDに関するツールやポイントも紹介するため、ぜひ参考にしてください。

もくじ
  1. CI/CDとは?それぞれの概要と違いについて
    1. CI/CDとは?
    2. CI:継続的インテグレーション
    3. CD:継続的デリバリー/継続的デプロイメント
  2. CI/CDパイプラインに含まれるプロセス
    1. 実装(コード変更)
    2. ビルド
    3. テスト
    4. デプロイ
  3. CI/CDの必要性
  4. CI/CDを取り入れるメリット
    1. 複数プロセスの作業負荷を減らせる
    2. 人的ミスを低減できる
    3. 継続的な生産性向上が期待できる
  5. 代表的なCI/CDツール
    1. Jenkins
    2. CircleCI
    3. AWS CodePipeline
  6. CI/CD環境を導入する際のポイント
    1. 十分なリソースの確保
    2. 適切なCI/CDツールの選定
    3. 関連チームとの連携
    4. メンバーへの教育
  7. まとめ

1. CI/CDとは?それぞれの概要と違いについて

CI/CDとは、ソフトウェア開発において発生する作業を統合的に自動化することで、継続的なリリースを実現する手法です。どちらも自動化には専用のCI/CDツールが欠かせません。この章では、CI/CDの概要とCIとCDの違いを詳しく解説します。

1-1 CI/CDとは?

CI/CDとは、ソフトウェア開発プロセスを統合的に自動化し、継続的なリリースを実現する手法のことです。「統合的に自動化」とは、「自動ビルド」「自動テスト」といった単一プロセスの自動化にとどまらないことを意味します。実装やビルド、テスト、デプロイといった一連のプロセスが、すべて連続的に自動で行われるのが特徴です。

CI/CDを取り入れれば、コードを変更するたびにビルドやテスト、デプロイを手作業で行う必要がなくなります。その結果、人的ミスを排除するとともにリリースサイクルを高速化し、継続的なリリースに対応できるのです。

「CI/CD」と総称されることが多いものの、CIとCDはそれぞれ異なる意味を持ちます。

CI
(Continuous Integration)
継続的インテグレーション

CD
(Continuous Delivery
またはContinuous Deployment)

継続的デリバリー
または継続的デプロイメント

1-2 CI:継続的インテグレーション

CI(Continuous Integration)は、リリースに向けてコードの統合までを自動化するアプローチです。簡単にいえばデプロイが含まれず、実装からテストが自動化範囲となります。変更したコードのビルド・テストを行い、問題がなければメインライン(リリース対象ブランチ)へコードをマージします。

1-3 CD:継続的デリバリー/継続的デプロイメント

CIにデプロイを加えて拡張したアプローチがCDです。ただし、継続的デリバリー(Continuous Delivery)と継続的デプロイメント(Continuous Deployment)の2種類があります。

継続的デリバリーは、本番環境へのデプロイを除くリリース直前までのプロセスを自動化するアプローチです。CIでメインラインに統合したソフトウェアをステージング環境へデプロイし、ソフトウェア全体としてテストを行います。

継続的デプロイメントは、継続的デリバリーをさらに拡張したアプローチです。ステージング環境でテストが完了したソフトウェアを、本番環境へデプロイします。

2.CI/CDパイプラインに含まれるプロセス

CI/CDによって統合された一連のプロセスを、「CI/CDパイプライン」と呼びます。CI/CDパイプラインに含まれる主なプロセスは、「実装」「ビルド」「テスト」「デプロイ」の4つです。それぞれ、順番に解説します。

2-1 実装(コード変更)

実装(コードの変更)は、CI/CDの起点となるプロセスです。具体的には、「GitHub」などのバージョン管理システムにコードをアップロードした際、変更を検知したCI/CDツールによって自動プロセスが開始されます。

2-2 ビルド

ビルドは、ソフトウェアのプログラム一式を動作可能な形に組み上げるプロセスです。

変更されたコードを含むソフトウェアを動かせる状態にして、次のテストへ進みます。ビルドの前にはコードの静的解析が行われ、明らかな問題がないかチェックします。

2-3 テスト

テストは、ビルドされたソフトウェアを動作させ、品質に問題がないか検証するプロセスです。

テストで問題があればCI/CDの自動プロセスは停止し、関係者に通知されます。テストには、確認手順や期待結果などを定義した「テストケース」の用意が必要です。自動テストでは、テスト自動化ツールを併用しますが、ツールによってはテストケース作成も自動化できます。

2-4 デプロイ

デプロイは、ソフトウェアを構成するプログラムを動作環境に配置・展開し、稼働できる状態にするプロセスです。

動作環境には、テスト環境や本番環境、ステージング環境(本番前の最終チェック用)があります。テストに合格したソフトウェアをデプロイすることで、各環境で動かせるようになります。

3.CI/CDの必要性

昨今のソフトウェア開発では、CI/CDの必要性が高まっています。

市場競争の激化やニーズの多様化にともない、リリースが短期化・高頻度化しつつあるためです。CI/CDは、繰り返し発生するリリース作業の負担軽減や品質向上につながります。

CI/CDは特に、昨今普及している「アジャイル開発」において有効な手法です。短いスパンでリリースが発生するアジャイル開発では、リリース作業の負担から人的ミスの増加・品質低下につながりやすい側面があります。

CI/CDによりプロセスを自動化すれば、こうした問題の解決につながり、エンジニアがコア業務の実装に集中できるようになるでしょう。

4.CI/CDを取り入れるメリット

CI/CDを適切に取り入れることで、ソフトウェア開発チームは多くのメリットを享受できます。CI/CDを取り入れるメリットは、主に次の3つです。

4-1 複数プロセスの作業負荷を減らせる

CI/CDを取り入れることで、複数プロセスの作業負荷を減らせます。効果が限定的な単一プロセスの自動化と比べて、負荷軽減の効果は高いでしょう。

たとえば、ビルドとテストのそれぞれを独立的に自動化した場合、プロセス間で必ず手作業が発生します。

しかし、プロセスを統合して扱うCI/CDであれば、各プロセス間の手作業も自動化が可能です。より多くの手作業を減らせるため、開発者・運用者の負荷を大幅に軽減できます。

4-2 人的ミスを低減できる

CI/CDを取り入れることで、人的ミスの低減にもつながります。

多くのプロセスが機械的な判断のもと行われ、人的ミスが発生する余地が少なくなるためです。リリース期間に余裕がない場合、熟練者であってもミスをしやすくなるでしょう。

しかし、CI/CDにより多くのプロセスを自動化すれば、エンジニアのヒューマンエラーに起因するミスを防げます。

4-3 継続的な生産性向上が期待できる

CI/CDを取り入れることで、継続的な生産性向上が期待できます。一度CI/CDパイプラインを構築すれば自動プロセスを繰り返し実行でき、コード変更のたびにビルドやテストを手作業で行う必要がありません。

エンジニアが実装に集中できるようになり、パフォーマンス向上につながるでしょう。

また、次以降の開発サイクルにも利用できるため、短期間の開発サイクルを繰り返すアジャイル開発とも相性がよいといえます。

5.代表的なCI/CDツール

CI/CDパイプラインを構築するうえでは、専用のCI/CDツールを使うことが一般的です。CI/CDツールは多数ありますが、ここでは代表的な3つを紹介します。

5-1 Jenkins

「Jenkins」は、自社専用のサーバーを用いるオンプレミス環境で広く使われるCI/CDツールです。

ビルドやテスト、デプロイといった各プロセスの作業を「ジョブ」として定義・配置し、CI/CDパイプラインを構築できます。無料で利用できるうえに、豊富なプラグイン(拡張機能)によるカスタマイズ性の高さが強みです。

5-2 CircleCI

「CircleCI」は、クラウドサービスとして提供されているCI/CDツールです。インターネット経由で利用できるため、基本的に自社サーバーを用意せずに済みます。

1つの設定ファイル(config.yml)だけで細かくCI/CDの設定が行える手軽さも強みです。なお、ツール名は「CI」となっていますが、CDのパイプライン構築にも対応しています。

5-3 AWS CodePipeline

「AWS CodePipeline」は名前のとおり、クラウドサービス大手「AWS」の一部として提供されているCI/CDツールです。

クラウド型のため、自社サーバーの構築は必要ありません。また、他AWSサービスとの連携が容易にできるため、特にAWSを用いている開発チームに適しています。必要に応じて、他AWSサービスを組み合わせて機能を拡張できるのも強みです。

6.CI/CD環境を導入する際のポイント

CI/CDは開発プロセスに大きな変革をもたらす手法であり、ポイントを押さえて導入することが大切です。CI/CD環境を導入する際には、次のポイント4つを押さえておきましょう。

6-1 十分なリソースの確保

CI/CDの導入には、予算・期間・人材のいずれも欠かせません。比較的導入しやすいCI/CDツールであっても、設定や移行作業にはそれなりの日数や労力を要します。

また、CI/CDに関する有識者がいなければ、スムーズな移行やトラブル時の対応は難しいでしょう。CI/CDを導入し始める前に、予算や工数、人材といったリソースを確保しておくことが大切です。

6-2 適切なCI/CDツールの選定

開発チームに合わせて適切なCI/CDツールを選定しましょう。CI/CDツールによって対応環境や自動化できる範囲が異なる場合があります。

たとえば、自社サーバーの管理に適した人材が不足している場合、オンプレミス型のCI/CDツールでは運用の維持が難しくなるでしょう。機能や料金も考慮して、開発チームにとって最適なCI/CDツールを選定することが大切です。

6-3 関連チームとの連携

CI/CDを適切に導入するためには、開発チームやQAチーム、運用チームの連携が欠かせません。

広範なプロセスのやり方が従来と変わるため、各チームへの影響は大きいものです。関連チームで認識を合わせながら取り組まなければ、通常業務に支障が出ることも考えられます。関連チームと密に情報共有しながら、CI/CDの導入を進めていきましょう。

6-4 メンバーへの教育

CI/CDを導入するにあたって、メンバーへの教育も重要といえます。事前に十分なメンバー教育を行うことで、導入がスムーズになるでしょう。

導入するCI/CDツールの使い方はもちろん、適切な運用ルールも早い段階で周知しておくべきです。教育が不十分なまま運用フェーズに進むと、CI/CDツールに起因する問題が生じ、かえって生産性低下を招く場合もあります。

まとめ

CI/CDとは、ソフトウェア開発プロセスを統合的に自動化することで、継続的なリリースを実現する手法のことです。

CI/CDによってリリースまでの作業負荷を軽減でき、人的ミスの低減や生産性向上につながります。

CI/CDを導入する場合、リソースの確保やメンバーへの教育など、多くのポイントを押さえる必要があります。CI/CDを適切に導入できなければ、CI/CDのメリットを享受することはできません。CI/CDを導入する際には、本記事の内容をぜひ参考にしてください。

テスト技法・工程
x hatenabookmark

執筆: 布施 昌弘

バルテス・ホールディングス株式会社 R&C部 副部長

様々なテスト対象(組込み系、Web 系、金融系)の現場でテスト設計、テスト管理などを行う。現在は、品質教育サービス「バルカレ」講師とコンテンツ制作、コンサルティングを担当する。JSTQB 認定 Advanced Level テストマネージャ。 著書は、『【この1冊でよくわかる】 ソフトウェアテストの教科書 [増補改訂 第2版]』、『いちばんやさしいソフトウェアテストの本』。