CI/CDとは

CI/CDはDevOpsの中核をなすものです。単なる手法ではなく、アプリのライフサイクルのあらゆる段階に自動化と監視を導入するアプローチといえます。このプラクティスの狙いは、ソフトウェアリリースサイクルを高速化し、信頼性とセキュリティを向上させることができるよう、開発チームを支援することです。

CI/CDは「継続的統合/継続的デリバリー(またはデプロイ)」の略称です。では、この2つの違いを確認していきましょう。

継続的統合とは

継続的統合は、更新ごとに異なるバージョンを使用して、開発者の作業を定期的に1つの共有リポジトリにマージするプラクティスです。

これにより、開発者全員が共通のコードベースを使って作業し、すべての開発作業で基盤を共有することができます。

継続的統合のメリット

継続的統合アプローチの主なメリットは以下のとおりです。

  • スピード: モノリシックアプリケーションを小さなコンポーネントに分けることで、他のアプリケーション開発方式よりもはるかに迅速にソフトウェアの新しいイテレーションをリリースすることができます。
  • 品質: ソフトウェアが継続的に監視されているため、障害を切り分けやすくなり、影響を抑えながら、迅速に修正することができます。
  • リソース利用の効率化: 自動化が進んだCIでは、開発チームの負担が減るため、アプリケーションのバックログを最小限に抑え、コストを削減することができます。
  • ユーザー満足度: 新しい機能を高品質かつエラーの少ない状態で導入できるため、ユーザー満足度が向上します。また、わずか数時間でフィードバックを反映させることもできます。

継続的デリバリー(継続的デプロイ)とは

CI/CDにおけるCDは、ソフトウェアが特定の段階に達し、所定の品質テストに合格した後、ソフトウェアをデプロイする作業であり、CIの延長線上にあると考えることができます。しかし、CDが継続デリバリーの略なのか継続的デプロイの略なのかは、DevOpsの世界でよく論じられる問題です。

一般的に、継続的デリバリーとは、本番へのリリースに向けたコードやコード変更の準備の自動化と、テストやコードリリースの自動化を指します。

継続的デリバリーでは、コードをリポジトリにアップロードし、単体テスト、回帰テスト、パフォーマンステストなどを自動的に実行して、コードの品質を確保します。このアプローチでは、コードを高速かつ簡単に運用チームにデリバリーできますが、誰かがリリースまたは更新を承認し、本番にプッシュする必要があります。

継続的デプロイでは、人間の介入やオンデマンドでのリリースが不要になります。コードの統合や本番環境へのリリースが自動的に行われ、テストはプロセスに統合されます。継続的デプロイは継続的デリバリーのメリットを活かしたものであり、CI/CDの次の段階と考えることができます。

ci-cd-glossary-image 

CI/CDの文脈においては、OutSystemsは「CD」を「継続的デプロイ」としてとらえたいと考えています。人間が行う操作をなくすことでアプリケーションのデリバリーを加速できるためです。

継続的統合のメリット

継続的デプロイでは、新しい機能や修正を次々に本番に移行して継続的なイノベーションを行います。

  • 高品質なコードを迅速にデプロイできるため、破綻したコードがビジネスを中断させることが減り、全体的な生産性が向上します。
  • コードのデリバリースピードが上がるため、アプリケーション開発作業のバックログが削減されます。
  • 小規模なイテレーションを継続的に進めるため、問題が生じても影響が少なく、簡単に修正できます。
  • ミスが減って生産性が向上するため、開発チームメンバーの多くが抱えているストレスや負担を解消できます。

CI/CDを支える原則

CI/CDの目標の核となっているのが、技術的負債 を増やさないことです。技術的負債が増えると、現在のプロジェクトで作成したコードの設計の不適切さが原因で、将来の開発作業に制約が生じるおそれがあります。

CI/CDで大切なのは、開発者が破綻を生じさせることなく迅速に開発を進められるようにすることです。

俊敏性を高めるには、コンポーネント間の不要な依存関係をなくして疎結合の関係にする必要があります。これはテスタビリティにも影響します。相互依存関係が多すぎると、障害の場所の特定が難しくなるのです。

そのほか、以下の考慮事項があります。

  • 左右へのシフト: 開発作業をライフサイクルプロセスの早い段階に移す(左へのシフト)ほど、エラーや障害のリスクが下がります。また、セキュリティ担当者やエンドユーザーなどの関係者との連携(右へのシフト)も重要です。つまり、早い段階でフィードバックループを高速化することが肝心なのです。
  • 高度な自動化: コードの作成、テスト、デプロイなど、自動化できるものはすべて自動化します。どのようなタイプのソフトウェア開発でも徹底したテストが重要ですが、CI/CDパイプラインではあらゆる段階で複数のテストを頻繁に実行する必要があるため、特に信頼性の高い自動テストが欠かせません。
  • バージョン管理と「回帰性」: 予期しない問題が発生した場合、「元に戻すボタンを押して」障害の原因となったリリースの前の状態にリセットできるようにしておくことが不可欠です。
  • 繰り返し可能で信頼性の高いプロセス: 運用を超高速で行うため、即席でプロセスを作成することは不可能です。

一般的なエンタープライズCI/CDツール

よく利用されているCI/CD自動化ツールは、以下のとおりです。

  • Jenkinsは反復的なタスクの実行を監視する際に使用されます。OSを問わず実行可能なオープンソースソフトウェアで、CI/CDパイプライン構築用のビルトインプラグインがいくつか用意されています。Jenkins CI/CDサーバーを使用すると、デリバリーパイプラインの様々な段階を自動化できます。
  • Azure DevOps Serverも、アプリケーションライフサイクル全体に対応可能なCI/CD自動化ツールです。Microsoftによって開発されたツールであり、Team Foundationバージョン管理(TFVC)やGitによるバージョン管理、レポート、要件管理、プロジェクト管理、自動ビルド、テスト、リリース管理といった機能を備えています。

ローコードでのCI/CD

OutSystemsなどの高性能ローコードプラットフォーム では、自動化と監視によってソフトウェアの開発と運用を一体化するためのビルトインツールが用意されており、継続的統合とデプロイの実装を容易に行うことができます。これにより、開発ライフサイクルを短縮し、デプロイの頻度を増やして、リリースの信頼性を向上させることができます。

OutSystemsプラットフォームのLifeTime Deployment APIを活用すると、開発環境から本番までのデプロイパイプラインを完全に自動化できます。

さらに、OutSystemsは「オープン性と無制限」という基本原則に基づいて設計されており、JenkinsAzure DevOps、TeamCityといったエンタープライズレベルのCI/CDエンジンとの連携の複雑さを軽減するためのアクセラレータも完備されています。

OutSystemsでのアプリケーションライフサイクル全体の最適化の詳細については、こちらのページをご覧ください。