CI/CD とは?

CI/CD では、高度な自動化を用いて、ソフトウェアの迅速な開発とデリバリーを支援します。

ほとんどの場合、ビジネスアプリの開発には労力と時間がかかります。その要因の 1 つは、アプリの開発とデリバリーのプロセスです。最初の概要から実行可能な戦略に落とし込む概念的なプレデザインの段階から、デザインと開発の段階、最終的なロールアウトとサポートの段階まで、アプリを世に出すまでには多くのステップとタスクがあります。実際、アプリや企業の開発リソースにもよりますが、新しいソフトウェアを構築してリリースするまでに 9 か月以上かかることもあります。

CI/CD の目標は、そのすべてを変えることです。

CI/CD とは、アプリの開発段階に自動化を取り入れたアプリデリバリーへのアプローチです。CI/CD は、continuous integration/continuous delivery or deployment (継続的インテグレーション/継続的デリバリーまたはデプロイメント) の略で、アプリの開発期間を短縮し、リリース回数を増やすことを目的としたアジャイル開発の手法から生まれたものです。CI/CD は、DevOps チームがアプリへのコード変更をより迅速かつ容易に実行できるようにするための運用原則とプラクティスをまとめた包括的な用語です。

全体として、CI/CD により、開発者が高度な自動化とモニタリングを活用してアプリ開発を改善できるシステムが構築されます。

CICD の構成を示す図

CI/CD は、正しく使用し適切なツールでサポートすれば、ソフトウェア製品を迅速に市場に投入するとともに、新機能や修正を定期的かつ容易に実装できる信頼性の高いプロセスとなります。しかし、CI/CD には、このような明らかなメリット以外にも、見過ごされがちな次のようなメリットがあります。

開発者が参加したいと思う魅力的なチームを作れる

優秀なソフトウェア開発者の需要はますます高まっており、彼らを自社に引き入れるには、厳しい競争に直面することになります。もちろん、高い給料や充実した福利厚生は魅力になりますが、多くの開発者が求めているのは、素晴らしいチームの一員であることです。そして、開発者が考える基準はさまざまです。

CI/CD 手法が機能していれば、熱心なサポートがあること、開発のハードルが低く、より良い職場エクスペリエンスを促進するための適切なツールとプロセスがあることを採用希望者に示せます。

コラボレーションを改善する

大規模なチームにおける効果的なコミュニケーションとコラボレーションには、常に困難を伴う可能性があります。この難しさは、チームが挑戦するタスクの複雑さに応じて増えていきます。そして残念ながら、ソフトウェア開発は非常に複雑な作業です。

CI/CD は、そのような複雑さのほとんどを解消して、多くの仕事を自動化し、開発者が自分自身のタスクに集中することを可能にします。データは常に共有バージョンコントロールリポジトリに統合されるので、チーム内の個人がそれぞれ割り当てられた仕事をしていても、アプリの全体的な構造や機能が損なわれることはありません。

信頼性、自動化、効率を最大限に高める

CI/CD は継続的な性質を持っているため、より多くのアプリやアプリの修正をより早く配信することができます。しかし、質を犠牲にして量を増やすものではありません。自動化されたツールが変更されたコードを常にテストし、必要な機能を確認した後に本番環境やデプロイメントに送ります。

欠陥検出・分離ツールが、エラーの根本原因を突き止めます。継続的信頼性テストでは、システムに導入されたコードのスナップショットに焦点を当てます。重要でない欠陥は発生時に処理され、チームのバックログが減ります。最終的には、自動化されたアプローチにより、開発者がより完全なソフトウェアソリューションを低コスト、短時間で作成できるようになります。

CI (継続的インテグレーション) とは、開発チームが定期的に小刻みなコード変更を行って、テストし、その結果を共有バージョンコントロールリポジトリにマージする方法です。これらの「チェックイン」が自動ビルドにより検証されるため、コードの問題を特定して迅速に解決することができます。CI では、開発者のチームが同じアプリで同時に作業することができ、コンフリクトは生じません。

ここでは、継続的インテグレーションの機能や特徴をご紹介します。

機能フラグ

継続的インテグレーションの利点は、変更が定期的に自動実行されることです。しかし、すべての変更をすぐにユーザーに見えるようにしたくはない場合もあるでしょう。例えば、まだデプロイの準備ができていない不完全な変更などです。

機能フラグ (機能トグル、機能スイッチ、機能コントールなどとも呼ばれます) は、開発者がコードのアクセスを制御するためのものです。例えば、機能フラグを使って、どの新しいコード行がテストの準備ができているかをマークすることができます。機能フラグを使って不完全な変更を管理することで、ロールバックのリスクを最小限に抑えることができます。

信頼性の高い自動テスト

継続的インテグレーションには、自動テストを利用します。テストを自動化することで、開発者がコードの変更をより早く、より定期的に行うことができ、開発プロセスを遅らせず品質を向上させることができます。

信頼性の高い自動テストは、コードの変更によって機能が停止してしまうことを防ぐための安全装置です。さらに、自動生成されるテストカバレッジレポートは、テストの効果を高めるための評価にも役立ちます。

ブレイクフィックスの優先順位付け

アプリケーションやソフトウェアのコードは、入り組んでいて非常に複雑なものであるため、ときおり不具合が生じても不思議ではありません。難しいのは、どの不具合への対象を最優先にし、どの不具合を後回しにできるかを知ることです。残念ながら、ブレイクフィックスは予防的ではなく事後対処的なものであるため、その判断を行う時間があまりないことが多いのです。

自動化された CI ツールを使用すれば、不具合を迅速に特定して、優先度の高い修正を自動的に指定できるため、重要度の高い問題に迅速に対処することができます。

CD (継続的デプロイメント、継続的デリバリー) は、継続的に行われているコード開発を、本番環境、開発環境、テスト環境、または直接ユーザーに送信するなど、必要な場所に自動的にデプロイするものです。言い換えれば、コードに加えた変更が稼働環境にデプロイされるということです。

継続的デプロイメントと継続的デリバリー

先に進む前に注意していただきたいのは、CD は継続的デリバリー継続的デプロイメントの両方を表す言葉として使われていますが、この 2 つの言葉は、正確には同じ意味ではないことです。ここでは、それぞれの類似点、相違点、メリットを取り上げます。

継続的デプロイメント
継続的デプロイメントでは、開発者がアプリケーションを構築して、テストを行い、アプリケーションに継続的な変更を加えると、そのアプリケーションとアップデートは自動的に UAT (ユーザー受け入れテスト) に配信されます。コードが機能のすべての面についてテストされ、合格すると、アプリケーションの作業バージョンが自動的に本番環境にプッシュされます。

これは、承認サイクルを必要としないため、開発者が、テストサイトが効果的で信頼できるものであることを確認する必要があります。メリットは、複数のアプリや更新を短時間で、しかも最小限の手動操作でデプロイできることです。

継続的デリバリー
継続的デリバリーは継続的デプロイメントと似ていますが、アプリが UAT で検証された後も、開発チームによる手動でのデプロイのトリガーを待つ必要がある点が異なります。これにより、開発者がフィードバックを実装して、継続的な修正を行い、最終製品の準備が完了したと思ったときにのみリリースすることができます。継続的デリバリーでは、手作業によるレビューとデプロイメントの時間を考慮する必要があります。

継続的デプロイメントと継続的デリバリー

継続的デリバリーは、ソフトウェアを迅速、持続的に、そして自信を持って最終製品としてデリバリーすることを可能にします。しかし、そのためには、CD の主要な原則を知っておく必要があります。CD イニシアチブを最大限に活かすための基準を以下に示します。

小規模なデプロイメントを頻繁に

継続的デリバリーが継続的インテグレーションと組み合わされることが多い理由の 1 つは、継続的デリバリーでは、変更の質を気にすることなく、多数のマイナーな変更を継続的に行えるからです。一度に多数の変更を展開して、問題のある変更によって機能していた変更をロールバックしなければならなくなるというリスクを冒すよりも、CI にサポートされた小規模で継続的なバッチを使用します。

反復タスクの自動化

特に IT やエンジニアリングの分野では、マニュアルの反復作業がすべて自動化されているのが理想的な環境です。CD では、この最大の目標を念頭に置き、自動化を全面的に採用しています。これにより、持続可能性が高まり、開発者がプロセス自体の改善や効率化など、他の重要度の高い側面に集中することができます。

継続的な改善

CD は継続的なプロセスです。始めたばかりの頃は、改善の余地が多くあるはずです。結果を測定し、潜在的なハードルを特定して、最も簡単なものから手を付けましょう。手作業でタスクを実行して、時間がかかっている部分はありませんか?そのプロセスを自動化してください。ご自身のテスト環境は、実際の状況を効果的に再現できていますか?実際のデプロイメントやサービスで更新してください。継続的に改善することで、デプロイメントがより日常的なものになります。

責任の共有

従来のモデルでは、異なる部門がそれぞれの責任だけを考えているので、目標が食い違うことがよくあります。CD は、デプロイメントをチーム全体で共有された責任とすることで、全員がより速く、信頼性と効果が高いデリバリーパイプラインの実現に向けて取り組むことができます。

CI/CD により、コードとアプリケーションを迅速かつ事実上バグなく提供することができます。そのため、CI/CD は多くのアプローチ、システム、ツールに不可欠な要素となっています。例えば、ソフトウェアの開発と提供を行う DevOps の手法の中における CI/CD の役割が挙げられます。

「DevOps」(software developmenttechnology operations という用語を合わせたもの) とは、IT、開発、セキュリティ、品質工学などが連携して、より良い最終製品やカスタマーエクスペリエンスの向上を実現するための実践方法です。DevOps は、アジャイルソフトウェア開発を部分的に基盤としており、開発ライフサイクルを短縮し、高品質なソフトウェアを継続的にデリバリーすることを目的としています。

CI/CD は、本来的に DevOps を補完するものです。CI/CD パイプラインにより、アプリケーションの安定性を確保しながら、開発者がより迅速に変更を加えることが可能になります。CI/CD を適切に導入することで、デプロイメントの頻度、変更のリードタイム、潜在的な損害をもたらすインシデントからの平均復旧時間など、DevOps の KPI に大きなプラスの影響を与えることができます。

CI/CD のアプローチは、特定の組織、プロジェクト、ツールによって異なりますが、典型的な CI/CD ワークフローは次のようなステップを踏みます。

  1. CI/CD パイプラインを構築します。このパイプラインは、完成したソフトウェアソリューションのデリバリーに開発者が必要とする、全ステップの実行可能な仕様を網羅する必要があります。簡略化された CI/CD パイプラインには、ソフトウェアの調達、構築、テスト、展開のステップを含めることが多いです。
  2. CI/CD パイプラインを自動化します。パイプラインをバージョン管理システムとソース
    コントロールシステムに接続します。ワークフローを組み込んで、CI/CD パイプライン内のステップを自動化します。

CI/CD パイプライン

CI/CD は、ビジネスのためのソフトウェアアプリケーションの開発や更新の方法を大きく変えられますが、ここではさわりだけを説明しました。CI/CD について詳しく知りたい方は、以下の資料をご覧ください。

ビジネスに合わせて拡張できる機能

Now Platform には、ワークフローを迅速、効率的にデジタル化して大規模に実行できるコア機能が含まれています。