DevOps プラクティス:継続的インテグレーション

ソフトウェア開発プロセスの分断を解消するためには、DevOpsの重要なプラクティスである『継続的インテグレーション(Continuous Integration)』を推進することが重要です。

DevOps という用語は、ソフトウェア開発者とIT運用チームが互いに密に提携してソフトウェア開発とデリバリープロセスを効率的に運用するための「ツール」と「プラクティス」の組み合わせを指します。このコンセプトが数年前から流行しているのには十分な理由があります。

DevOps は、開発チームと運用チームをまとめることで、関係者全員がソフトウェア開発ライフサイクル(SDLC)全体を通じて自動かつ頻繁にコードを構築、テスト、デプロイ可能にし、ソフトウェア開発プロセスを効率化させるものです。Deloitteの調査によると、DevOps のコンセプトを採用した企業は、コラボレーション(23%)、アプリケーション品質(22%)、市場投入までの所要時間(20%)において、著しい改善を遂げたことが明らかになっています。つまり、DevOps の重要性が実証されています。

DevOps は、確実に組織に成長をもたらします。これは、継続的インテグレーション、テストの自動化、継続的デリバリー、迅速なデプロイメントを含む一連の主要なプラクティスから得られる成果です。この記事では、チーム間のコラボレーションを促進し、コードエラーやバグを検出して、迅速に予測可能なデリバリーを実現させることで、全社的に透明性を高めるプラクティスである継続的インテグレーションに焦点を当てます。

継続的インテグレーションでチーム間のコラボレーションを強化

継続的インテグレーションは、Grady Booch 氏が最初に使い始めた言葉です。Booch 氏はその著書の中でこのように述べています。

「継続的インテグレーションのプロセスは、リリースごとに機能が拡張され、その都度、実行可能なリリースを得られます。...(略)経営陣はこのマイルストーンを通じて、進捗と品質を確認することで、継続的にリスクを予測かつ特定し、積極的に対策を講じることができます」

Booch 氏が提唱する継続的インテグレーションプロセスは、ソフトウェア開発者の持つソースコードを共有のコントロールリポジトリに定期的に統合させることで成り立っています。このプロセスにより、ソフトウェア開発者やその他の関係者は、自分の仕事をチーム内の他の人と統合できるだけでなく、コードの構築、テスト、定期的なフィードバックを得ることが可能です。さらに、最も重要なのは、検証プロセスを自動化させ、あらゆる懸念やリスクを検証することができるようになることです。

継続的インテグレーションの採用により、開発チームと運用チームの各自作業を統合し、プロセスの自動化とより良いデリバリーの確保ができたことで、メンバー間のコラボレーションが向上したのです。調査によると継続的インテグレーションは、「開発と運用を結びつける必要があるため、DevOps現象と非常に深い関係性」を持っています。この手法により、ソフトウェア開発は孤立作業ではなくなります。開発者は、他のステークホルダーと協力しながら、チームのコードベースに協力して貢献し、常に自動化された方法でコードを構築、テスト、検証し、正確さとコンプライアンスの両方を保証することができるようになるのです。

継続的インテグレーションによるエラーとバグの検出の改善

さらに、継続的インテグレーションは、開発チームと実行チームとの緊密な連携にもつながります。Booch 氏が述べているように、開発者は、これによってソフトウェア開発プロセスで発生するコードエラーやバグを迅速かつ容易に検出することができます。小さな変更やタスクを実行し、頻繁なテストと検証を組み合わせることで、コードエラーやバグ、コードの重複など、一連の問題を見つけて対処することができるのです。ご想像の通り、このプロセスは、高い生産性とチームの権限向上の両立をベースにしたコラボレーションにつながります。

継続的インテグレーションにより、ソフトウェア開発者はこれらの問題を検出し、プロセスの中で迅速に対処することができます。この手法では、変更を少量ずつ実装し、バージョン管理でその変更を頻繁にチェックするため、問題が発生したときに利害関係者にわかるようにできます。さらに、継続的インテグレーションは常に即時のフィードバックを必要とするため、チームはバグを解読し、エラーを特定、重複を排除することがより簡単にできるようになります。

要するに、継続的インテグレーションは、たとえば、プロジェクトの最後に大きなまとまりで統合が実行されることで、リスクやエラーを発見して対処する時間がほとんど、あるいは全くない、というような状況を防ぐことができます。 ThoughtWorks のチーフサイエンティストであるMartin Fowler 氏は、「継続的インテグレーションはバグを取り除くことはできませんが、バグを検出し取り除くことを格段に楽にする」と述べています。

継続的インテグレーションによる予測力のアップ、迅速なデリバリーそして透明性の向上

継続的インテグレーションは、コーディングの自動化によりスピードアップに加え、コードエラーを回避することができます。その結果、開発チームと運用チームは、迅速かつ予測可能(何が起こるかを事前に想定できる)な継続的デリバリーの実現が可能となります。これは継続的インテグレーションによって、「チームの少量ずつの作業」「より多くのテストの実施」「自動的な構築」を推奨しているからです。

チームは早い段階で障害を見つけ出せ、より速く、より多くのプロジェクトを成功させることができるようになります。DevOps環境では、実験やテスト、トライアルをより高回転で実行できるため、チームは早期にエラーを検出・修正するようになります。一方、従来型のモデルを採用している場合、チームはそのような余裕を持てません。その結果、プロジェクトのタイムリーな履行が不可能となっています。つまり、プロジェクトの後半で失敗するリスクが大きく、「時間の無駄」「コストの増加」「市場投入スケジュールの遅れ」につながる可能性があります。DevOps環境では、製品の設計、テスト、修正、デプロイを迅速かつ効率的に行うために必要な基盤をチームに提供することで、こうしたリスクシナリオを防ぐことが可能です。

継続的インテグレーションの欠如により、組織はソフトウェア開発プロセスの失敗、あるいはデリバリーが(大幅に)遅延するという致命的なリスクの可能性は小さくありません。たとえば、MuleSoftのお客様であるグローバル銀行の事例を見てみましょう。このグローバル銀行は、開発プロセスの初期段階において、予測可能性やデリバリーに関する課題に直面していることをオープンに共有してくれました。データベースのフィールド名を変更するだけで、3ヶ月間、約180万円を費やしていたそうです。このシンプルな変更でどのような影響が発生するかを予測できていなかったため、プロセスに時間とコストがかかっていたのです。

継続的インテグレーションは、発生しうるエラーを事前の予測が可能です。そのため、エラーが発生したときにチームはスムーズに対処でき、問題が大きくなることを回避することができます。これにより、長期的にわたるリスクの大きさや不確実性(デプロイや変更による影響を予測できないこと)を軽減してくれます。さらに、継続的インテグレーションは緊密なチームコラボレーションを促進します。利害関係者がソフトウェア開発プロセスに参加し、その進捗を容易に把握できるようになることで、可視性と透明性を高められるのです。

すべての作業が共有のコントロールリポジトリに保存されるため、透明性と可視性が向上し、関係者は自分の作業が明確となります。テスト結果もオープンに検証することで、ソフトウェア開発プロセスの問題点を他の関係者と協力して対処できるため、信頼性が高まります。加えて、高い予測可能性と迅速なデリバリーと相まって、可視性の向上は生産性の向上につながります。アップデートやカスタマイズ、ユーザーのフィードバックを迅速に取り入れることができるため、チームは市場での競争優位性を獲得することができるようになるのです。

API主導の接続性による継続的インテグレーション

DevOps の主要なプラクティスのひとつである継続的インテグレーションには、チーム間のコラボレーションの促進から全体的な可視性、透明性の向上まで、多くのメリットがあることは明らかです。しかし、そのメリットにもかかわらず、継続的インテグレーションやその他のDevOpsの実現が難しい場合があります。ITリーダーの約75%がDevOpsをITの最優先事項と考えているものの、そのほとんどが、DevOpsを実現するための最大の課題として「どの技術が役立つかを理解すること」を挙げています。幸いなことに、MuleSoftなら『API主導の接続性』を具体化させるアプローチにより、継続的インテグレーションを含むさまざまなDevOpsの実践を推進できるよう組織を支援することが可能です。

API主導の接続性とは、再利用可能なコンポーザブルAPIを目的に応じて利用(再利用を含む)し、データ、デバイス、アプリケーションを統合する最新の戦略的かつ合理的なアプローチです。システム間に緊密な依存関係が生じるポイント・ツー・ポイント接続とは大きく異なります。API主導の接続はプラグ・アンド・プレイのアプローチを採用・推進し、『モダンAPI』をコンセプトとしています。これらのAPIは、組織全体で使用できるのは当然、資産として公開すること、簡単に探し出せること、自社内全体に提供し再利用を促すことが可能です。API主導の接続性を採用する企業は、持続性のあるビジネスの敏捷性を獲得することが可能になるのです。

DevOps プラクティスは、組織全体のコラボレーションと生産性を向上させるために、API主導の接続性を補完するアプローチを採用しており、コンポーザビリティ、権限委譲、再利用性などが含まれています。MuleSoft は、生産性の高いハイブリッドインテグレーションプラットフォームであるAnypoint Platform™ を通じて、企業がAPI主導の接続性を実現できるようにサポートします。この技術は、データ、システム、アプリケーションおよびデバイスを接続するためのプラットフォームとして圧倒的に役立つことでしょう。

DevOps プラクティスを推進するためにAPI主導の接続性を採用した企業のひとつに、当社のお客様であるSpotify があります。Spotify はすでに最先端のDevOps プラクティスを実践していましたが、急速な成長に対処するため、カスタムソリューションと応急処置に重点を置いたITアーキテクチャを構築していました。その結果、データの正確性、可視性、信頼性を欠き、市場投入までの時間がかかるなどのビジネスリスクを抱えてしまっていたのです。

Spotify は、それまでのDevOps の取り組みを改善するために、MuleSoft のAnypoint Platform をメインのインテグレーションプラットフォームとして導入しました。具体的には、Anypoint Platform を通じて、既存の資産(APIや機能、サービス、テンプレートなど)を公開することで、サードパーティ、パートナー、内部チャネルにそれら資産をオープンにすることができたのです。MuleSoft の支援により、Spotify はインテグレーションのプラクティスを改善し。チームコラボレーションとセルフサービスを奨励することで、DevOps 文化を拡大し、市場投入までの時間とデリバリーのプロセス全体を改善することができました。

すべての人が継続的インテグレーションを含む堅牢なDevOps を、すでに実施しているわけではありません。継続的インテグレーションの実装方法の理解と導入に苦労している IT リーダーは、ポイント・ツー・ポイント接続を卒業するべきでしょう。反対に、API主導の接続性について調査・検討することをお勧めします。API主導の接続性アプローチは、企業がデータやデバイス、アプリケーション、システム、最終的には人までも総合的に結びつけることを可能とし、DevOps を促進することができます。

データやアプリケーションの接続や統合に対するAPI主導の接続性アプローチの重要度が増加しています。Anypoint Platformを通じて、継続的インテグレーションやその他のDevOps プラクティスを実現する方法についての詳細はこちらをご覧ください。

また、Anypoint Platform™ で自動的にテストするためのMUnit、自動構築をするためのMaven を活用する方法など、より具体的なトピックについては、MuleSoft のWebサイトで紹介しています。