CI/CDと市場調査で見るクラウドとDevOps
今日の企業は競合他社よりも早く高品質なソフトウェアを提供しなければならないという強いプレッシャーにさらされています。ソフトウェアのアップデートを頻繁にリリースして初めて、優れた機能や顧客へのリーチを増やすことができるのです。そのため、多くの組織はDevOpsやCI/CDといったアプローチを採用し、ソフトウェアの計画・構築・テストおよび市場への迅速かつ大規模なリリースを実現すべく力をつけています。IDCの予測によると、世界のDevOpsソフトウェア市場は2017年の39億ドルから2022年までに80億ドルに達すると言われています。
継続的インテグレーション、継続的デプロイメント、継続的デリバリーの話題は今まで以上に盛り上がっていますが、実際のところCI/CDの利用はまだまだ少ないようです。原因としては、DevOpsに必要なスキルセットが不足していることや、従来のソフトウェア開発手法をいまだに実践している企業の存在が考えられます。そうした企業はCI/CDやDevOpsの自動化の実践を怠ることで、どれだけの損失を生み出しているのかを理解していません。
多くの企業にとってDevOpsは競合がそうしているから、あるいはトレンドだから試さなければならないと考えており、その結果やDevOpsの原則の基本的な内容を理解しないまま必死に取り組む対象となっています。
そしてほとんどの場合、ソフトウェアのデリバリーのため統合的に利用すべきツールがバラバラに取り入れられることで混沌とした状態を生み出しています。一方で連携して動作する適切なツールを選択し、何がベストプラクティスであるかを理解することは困難です。そのため、DevOps企業が統一されたツールを提供する傾向が見られるようになってきています。
CI/CDとは何か
CIシステムは開発者がコミットしてリポジトリに変更をプッシュするたびにブランチを再度ビルドし、関連するすべてのテストケースを実行して新しい変更が既存のアプリケーションや機能を壊さないことを検証します。
継続的デリバリーはボタンをクリックするだけでアプリケーションをデプロイできるようにする継続的インテグレーションの延長線上にあります。これはCIテストに合格するたびに変更をデプロイすることを意味します。これにより、ビルドとテストフェーズ、そしてほとんどのリリースプロセスを簡単に自動化することができます。
継続的デプロイメントとは開発者が本番環境に自動的にソフトウェアをリリースしたり、デプロイしたりできるようにすることです。この時点で、手動でアプリに最新のソースコードを反映するといった作業は発生しません。コードはCIプロセスを通じて自動的にテストされ、問題が見つからなければデプロイされます。
なぜCI/CDが必要か?
CI/CDはアプリケーションのテストとデプロイメントのベストプラクティスです。品質保証のためには単一のCI/CDを用いてのみコードがデプロイされるようにする必要があります。DevOpsの担当者はテストと本番のコードが同じになるように、すべてがCI/CDのパイプラインを通過するようにしなければなりません。そうすることでヒューマンエラーも減り、テストされていない他のバージョンが誤ってデプロイされなくなります。
今日、企業がCI/CDを実践する重要な理由の一つは顧客に提供するソフトウェアの迅速な提供による、より頻繁なアップデートです。頻繁なリリースによる継続的な改善は顧客満足度の向上につながります。また、企業がより頻繁に新機能を提供することができるため、競争優位性をもたらし、競合他社の一歩先をいくことができます。
コードをCI/CDパイプラインに通すことで、そのデリバリーパイプラインの次のステップへ移る前に、加えた変更が一定の標準を満たしていることが保証されます。そして、失敗や矛盾があればその変更が修正されるまで次のステップに進むのを防ぐことができます。CI/CDのこのアプローチは簡単に言うと悪いコードが本番環境に入ることを確実に防ぐことを意味しています。CI/CDはフェイル・ファスト、ラーニング・ファスト、デリバリー・ファストのアプローチを促します。自動化されたCI/CDを導入している場合、開発者によってコードはコミットごとにCI/CDプロセスを常に通り、これによってバグを素早く見つけることができます。
CI/CDパイプラインとは何か
CI/CDパイプラインは自動化とともに機能するデプロイメントパイプラインのワークフローです。上手く実施されると手動でのハンドオフやエラーを最小限に抑え、ソフトウェアデリバリーのライフサイクル全体のフィードバックループを強化し、開発チームがより短い時間でより小さな単位でのリリースを実現できるようになります。
現在、CI/CDパイプラインはソフトウェア企業の間で主流となっており、現代のDevOps環境の柱となっています。DevOpsが文化的側面から原則や標準を説くのに対し、CI/CDは自動化、フロー、プロセス、ツールに焦点を当てています。CI/CDのシナリオはコンテナ化やマイクロサービスの導入によって変化してきました。現在では、すべてのクラウドベンダーがDockerやKubernetesのようなツールをサポートし統合することで、CI/CDパイプラインのスケールアップに貢献しています。
継続的デリバリーパイプラインの各ステージ
-
テスト自動化と継続的インテグレーション
新機能やプロトタイプを用意し、コーディングを行い、コードベースとの統合を行う重要なステージです。CIサーバを利用して、ユニットテストやパッケージングを行います。
-
ビルドの自動化
開発者によってアーティファクト(依存関係やDockerイメージなど)がレジストリ(Amazon ECR、Docker Hubなどのコンテナレジストリ)にプッシュされるステージです。
-
アルファデプロイメント
このステージでは開発者が変更点を反映させます。ここでは変更点そのものや、それらが他のシステムとどのように相互作用し、どのような影響を与えるのかを注意深く見ることができます。また、開発者はマスターブランチで何かを壊していないかを確認することができます。
-
ベータデプロイメント
テスターがマニュアルテストを行うステージです。手動テストはまだCIツールの完成度を見るために必要です。これにより、DevOpsチームはアプリケーションの状態が良好で、デプロイ時、確実に想定通り動作する保証を得ることができます。
-
本番デプロイメント
最後のステージとして、アプリケーションが稼働します。
[CDパイプラインに関して書いた別の記事がこちらにあります https://dzone.com/articles/what-is-continuous-delivery-pipeline]
CI/CDは市場でどう評価されているか
- Googleにおける「CI CDパイプライン」の検索数は世界的に増加傾向にある
- テスト自動化の企業Mablが500人のソフトウェアテスターに調査したところによると、53%はチームで継続的インテグレーションを、38%が継続的デリバリーを取り入れている一方で、継続的デプロイメントを適用しているのはたったの29%でした。
- CodefreshによるDevOps関連の調査では企業の3分の1は作業の半分以上を自動化しているものの、すべてを自動化できている企業は1%のみだったと言います。CI/CDプロセス全体を自動化している企業はほとんどありません。ほとんどの開発チームはプロセスの10%未満しか自動化していません。
- The iOS Developer Community SurveyはAppleプラットフォームの開発者を対象とした過去最大規模の調査で、2,290人がアンケートに回答しています。その中にはCI/CDの質問も含まれており、以下は大多数の開発者がビジネスアプリに関してCI/CDを実践していることを示した結果です。
- 今後の展望ですが、企業は適切なデプロイメントパイプラインを使用しない限りコンテナとDevOpsを十分に活用することはできないでしょう。JFrog Pipelinesのような、構築済みのパイプラインが提供され始めるはずです。自動化(Pipelines)、バイナリ・リポジトリマネージャー(Artifactory)、セキュリティ(Xray)、リリース/デプロイメント(Distribution)など、CI/CDシステムをサポートするために必要なすべてのツールを備えた統一プラットフォームが必要とされているのです。JFrogはそれを提供しています。
- CodefreshがKubeCon + CloudNativeCon Europe 2019というカンファレンスで130人の開発者を対象にアンケートを実施しましたが、発表されたその結果はやや衝撃的なものでした。3分の1近く(32%)が継続的インテグレーションや継続的デリバリー(CI/CD)プラットフォームを全く使用していないことがわかったのです。調査回答者の60%が自分の組織ではソフトウェア開発とデプロイメントを加速させるための自動化をまだ十分に活用できていないと回答しています。
- GigaOmの市場動向レポート「Radar for Enterprise CI/CD」はエンタープライズCI/CDソリューションに関する最近の調査で業界をリードするCI/CDソリューションを比較し、異なる基準で評価しています。その結果によると以下に示すようにJFrog、CodeFresh、GitLabがOutperformer(優れているもの)となっています。
検討したCI/CDソリューションはAWS、CircleCI、CloudBees、CodeFresh、GitLab、IBM、JFrog、Micro Focus、Microsoft、Red Hat、Xebia Labsです。また、アナリストによる比較レポートはこちらの「Gigaom Radar For Enterprise CI/CD」から無料でダウンロードできます。
CI/CDはDevOpsのベストプラクティスの一つで、開発と運用間の適切な連携を保証します。それは自動化を強化する一方で、開発者はコードの変更をより確実かつ頻繁にプッシュすることができます。同時に標準の環境設定があり、ロールバック手順が自動化されているため、運用チームはより安定性を実感することができます。CI/CDゲームに勝つためには、開発チームと運用チームの両方が、長期的に見てビジネスの成長に利益をもたらす適切なツールとアプローチに関するコンセンサスを形成する必要があります。
手を取り合うクラウドとDevOps
DevOpsはクラウドがなければ意味がないし、クラウドがなければDevOpsはできません。
クラウドには多くの定義がありますが、基本的な説明としてはインフラストラクチャのプロビジョニングを可能にしサポートするシステムと定義できます。コードやテンプレートとして記述することができるため、再現性のあるプロセスの作成を容易にします。
これはソフトウェア開発のライフサイクルにおけるプロセス・タスクを最大限に自動化するというDevOpsの基本でもあります。
CI/CDのためのクラウドの大きな利点の一つはクラウド・インフラストラクチャの動的な性質です。これはCI/CDのワークロードが一時的に跳ね上がる性質を持っている場合に最適です。クラウドリソースはCI/CDのワークロードに基づいて自動的にスケールアップ、スケールダウンできます。これにより、企業は管理とコストの面で大きなメリットが得られます。自前でサーバーを管理しなくて良くなるため、CI/CDのワークロードの増加に応じてサーバーを増やす必要性や、アイドル状態になった時にサーバーリソースを浪費する恐れがなくなります。
あなたの組織がクラウド技術をどのように定義し、どのようにDevOpsを用いてデジタルトランスフォーメーションを達成するかにかかわらず、クラウド技術とサービスの美学は、DevOpsの原則とプロセスを根本的に補完するものであり、DevOpsの辞書に簡単に組み込むことができます。
より迅速なデリバリーと締切厳守のために自動化と短いリリースサイクルを掲げているので、DevOpsの実装にはアジャイルの原則がドライバーとして役立ちます。継続的なプラクティスを実装するには、クラウドコンピューティングが大きな助けとなります。それは、開発とアプリケーションのライフサイクル管理に関わる全アクティビティにリソースを迅速に適用できるためです。アジャイルの原則は、クラウドコンピューティングやDevOpsの実践とともに、開発者の生産性を高め、組織をより速く成長させます。
セキュアなクラウドゲートウェイを使用することで、ネットワークのセキュリティを損なうことなく、従業員はどこでも、どんなデバイスからでも企業のリソースに簡単にアクセスできます。自分のデバイスからネットワークにアクセスすることは時に怖いことのように思われるかもしれませんが、最新のクラウドプラットフォームにはセキュリティスタックが組み込まれており、管理者がセキュリティを管理・サポートするために必要なツールを提供できるようになっています。
DevOpsはクラウド技術と相まって、採用している企業に大きなメリットを与えます。
- デベロッパーの生産性とコラボレーションを高めます。
- 開発環境への迅速かつ簡単なアクセスにより市場へのアプローチが速くなります。
- 繰り返し行うタスクの自動化を実現するため、開発者は重要な作業に集中できます。
- 自動化およびIntrastructure as codeのアプローチにより、クラウドの複雑さと管理を劇的に減らします。
- モダンなクラウドプラットフォームと思想でセキュリティを向上し、マニュアルエラーを排除します。
- クラウドベースの継続的な業務運用でダウンタイムを最小化します。開発者は自動化によりステートレスなアプリケーションを構築することができ、可用性向上とフェイルオーバーにより、ビジネスの信頼性と顧客満足度の向上を実現します。
- スケールアップ – クラウドとDevOpsを採用する重要な理由の一つは必要に応じてインフラとアプリケーションをスケールアップできることです。
クラウド・デプロイメントモデル
クラウド事業者が組織のアプリケーションやデータを全面的にホスティングしている場合、それをパブリッククラウドと呼びます。パブリッククラウドを採用している企業の従業員はインターネットに接続するだけでアプリケーションにアクセスすることができます。
プライベートクラウドはストレージ、コンピューティング、ネットワークなどのリソースが自社のデータセンターに存在することを指します。アプリケーションの実行で企業がプライベート・クラウドを好む理由は、主にセキュリティと機密性の高いデータの保存にあります。
より近代的なアプローチとしてはハイブリッドクラウドがあります。これはプライベートクラウドサービスとパブリッククラウドサービスを組み合わせたもので、トラフィックと需要を考慮して設定に変更を加えることができます。顧客の中にはオンプレミスのCI/CDシステムを利用している人もいるでしょう。これらのCI/CDシステムの中にはハイブリッドな設定のもとワークロードをクラウドに拡張できるものもあります。これにより完全な移行を実現せずともクラウドのメリットをすぐに享受することが可能です。
主に、需要が高いときにはワークロードをパブリッククラウドで実行し、通常の状態に戻った場合はプライベートクラウドに戻すといったことができます。このアプローチにより、クラウドリソースに費やすオーバーヘッドコストを削減できます。さらに重要なポイントは機密性の高い情報やデータ、重要なアプリケーションはプライベートクラウドに保管できることです。一方、機密性の低いデータやアプリケーションはパブリッククラウドに保存して実行することができます。
DevOpsクラウド・ソリューションの選択
クラウドが楽器のようなものだとすれば、DevOpsはそれを演奏する音楽家です。クラウドコンピューティングとDevOpsは重要な役割を果たし、IT戦略の一部として連動しています。クラウドとDevOpsを併用することで、IT 部門は「どれだけ長い期間障害を起こさずに済むか」から「どれだけの頻度で新しい機能を安定的に提供できるか」「どれだけ迅速に新しいサービスを展開できるか」に重点を移すことができるようになります。
今日の企業はクラウド、DevOps、自動化のプラクティスの助けを借りてデジタルトランスフォーメーションを行う方法を模索しています。クラウド分野の競争を考えると、多くのベンダーを目の当たりにして、何を選べばいいのか混乱してしまいます。
「State of DevOps Cloud Solutions 2020」では現在利用可能なクラウドDevOpsプラットフォームソリューションのハイレベルな概要とクラウドDevOpsにおいてベンダーに期待すべきことを紹介しています。