一般的に、継続的デリバリーとは、本番へのリリースに向けたコードやコード変更の準備の自動化と、テストやコードリリースの自動化を指します。
継続的デリバリーでは、コードをリポジトリにアップロードし、単体テスト、回帰テスト、パフォーマンステストなどを自動的に実行して、コードの品質を確保します。このアプローチでは、コードを高速かつ簡単に運用チームにデリバリーできますが、誰かがリリースまたは更新を承認し、本番にプッシュする必要があります。
継続的デプロイでは、人間の介入やオンデマンドでのリリースが不要になります。コードの統合や本番環境へのリリースが自動的に行われ、テストはプロセスに統合されます。継続的デプロイは継続的デリバリーのメリットを活かしたものであり、CI/CDの次の段階と考えることができます。
CI/CDの文脈においては、OutSystemsは「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は「オープン性と無制限」という基本原則に基づいて設計されており、Jenkins、Azure DevOps、TeamCityといったエンタープライズレベルのCI/CDエンジンとの連携の複雑さを軽減するためのアクセラレータも完備されています。
OutSystemsでのアプリケーションライフサイクル全体の最適化の詳細については、こちらのページをご覧ください。