In this article
DevOpsパイプラインのベストプラクティス5選
効率的なDevOpsパイプラインを実現する、5つのベストプラクティスをご紹介します
今日、多くの組織ではソフトウェアのデプロイの成功を速度と正確さで評価しています。Harness(ソフトウェアデリバリープラットフォームを提供する企業)が発表した2020年のContinuous Delivery Insightsレポートによると、企業が本番環境にコードをデプロイする頻度は平均4日に1回で、1回のデプロイに平均8時間かかっています。
組織内外にアプリケーションのアップデートをリリースしようとする際、こうしたデプロイにかかる時間は長すぎます。なぜでしょうか?デプロイの遅れは、開発者の生産性からアプリケーションセキュリティまで、あらゆることに影響するからです。
さらに、レポートによるとデプロイの約11%が失敗しており、遅延に加え、失敗の原因となったエラーの修正に時間と費用がかかっています。こうした事態を避けるため、企業はDevOpsパイプラインの改善に投資しています。最適化されたDevOpsパイプラインは、チームの連携、ビルド、デプロイを迅速かつ安定して行うのに役立ちます。
DevOpsパイプラインの構築を始めたばかりの方も、既存のパイプラインを効率化したい方も、DevOpsパイプラインとは何か、ベストプラクティスは何か、そしてそれらをどう実践するかを知っておくと役立ちます。
DevOpsパイプラインとは?
DevOpsパイプラインとは、開発チームと運用チームがソフトウェアを迅速かつ効率的にビルド、テスト、デプロイするために使用するツール、プラクティス、自動化プロセスを指します。DevOpsチームは、ソフトウェアの保守やアップデートを円滑に進めるためにパイプラインを活用します。また、リリース前のソフトウェアテストや、コードの競合、バグ、脆弱性の検出と解消といった重要な品質保証にも役立ちます。
DevOpsパイプラインの仕組みを考えるうえでは、開発と運用の両方の領域にまたがるプロセスであることを覚えておくとよいでしょう。
DevOpsパイプラインのフェーズ
DevOpsパイプラインには明確に分かれた2つのフェーズがあり、それぞれに推奨されるステップがあります。
まず開発フェーズには、次の4つのステップがあります。計画、コーディング、ビルド、テストです。この段階で、開発チームはプロジェクトの目標やスケジュールを定め、使用するツールを特定します。
運用フェーズにも4つのステップがあります。リリース、デプロイ、運用、監視です。この段階では、IT運用チームが開発チームと連携し、プロジェクトがリリース可能な状態であることを確認します。IT運用チームはエンドユーザー向けにプロジェクトをデプロイし、本番環境を構成するとともに、ユーザーが利用する間の動作を監視します。プロジェクトがパイプラインをどのように進むかを把握したら、その構成要素について考えてみましょう。この2つの領域はそれぞれ担当範囲が異なりますが、DevOps文化では、開発チームと運用チームが責任を共有し、2つのフェーズ全体を通じて連携することが重視されます。
DevOpsパイプラインのベストプラクティス5選
1. パイプラインに可観測性を組み込む
DevOpsパイプラインは開発プロセスの効率化を目的としていますが、そこには複数のステップ、コンポーネント、チームが関わっています。そのため、開発プロセスのどの時点でもパイプライン内で何が起きているのかを把握しにくく、ボトルネックなどの問題で処理が遅れることもあります。複雑さの原因には、複数のビルドステップやテスト、コンパイルといったパイプラインそのものに加え、「ファンアウト」などのDevOpsモデルもあります。何かが失敗した際に根本原因の特定に手間がかかることもあります。
可観測性とは、パイプラインの外部出力を追跡して内部状態を診断することです。これにより、ボトルネックの解消、パフォーマンス問題の特定と修正、パイプライン全体の信頼性向上に役立つ重要な知見をチームが得られます。
DevOpsパイプラインの可観測性は、手動でも実現できます。チームでログを作成し、追跡するメトリクスを設定して、トレーシングによってシステム内のリクエストをエンドツーエンドで追跡します。ただし、ServiceNowのような既製のソリューションや、既存のAzure DevOpsやJenkinsなどのツールを利用する方が効率的です。Azure DevOpsとJenkinsには、基本的なレポート機能が備わっています。
2. CI/CDのアプローチにロールバックを組み込む
CI/CDの仕組みは、DevOpsパイプラインの基本要素だと考えています。ビルド、テスト、デプロイを自動化すれば、チームの時間と労力を大幅に削減できます。多くのDevOpsチームはこうした機能をフレームワークに求めますが、問題発生時にデプロイを元に戻す安全対策の自動化は見落とされがちです。
コードを本番環境に自動デプロイした後は、チームでエラーを監視する必要があります。エラーが見つかった場合、アプリケーションを以前の状態に戻す自動的な仕組み(ロールバック)があれば、より迅速に復旧できます。また、チームが問題の原因を特定して修正する間、システム停止やエンドユーザーからの苦情を避けることにも役立ちます。ロールバックの代わりに、修正を適用して再デプロイするロールフォワードという方法もあります。DevOpsの導入が十分に進み、チームが機敏に対応できる場合は、修正をより簡単かつ迅速に適用して展開できます。ロールバックは、より複雑になることが少なくありません。
3. 継続的デプロイ(CD)は軽微なコード変更のみに適用する
CDとは、手動での確認やトリガーを必要とせず、コードの更新をエンドユーザー向けに自動リリースすることです。コードには自動テストが実施され、リリース前にテストを通過する必要があります。全体として、このプロセスは最も迅速な製品リリースにつながります。
ただし、継続的デプロイにはDevOpsパイプライン上のリスクも伴います。各リリースでテストを実施していても、本番環境にバグや脆弱性が入り込む可能性はあります。そのため、DevOpsパイプラインのベストプラクティスとして、CDを利用するチームには軽微なコード変更のみに適用することを推奨します。軽微なコード変更の例として、計画的・定期的なセキュリティパッチが挙げられます。また、自動リリース後も正常に動作していることを確認するため、監視を続ける必要があります。
4. 継続的テスト(CT)に実機クラウドテストを導入する
継続的テスト(CT)、つまりエンドツーエンドテストでは、DevOpsパイプラインに自動フィードバックを組み込み、ソースコードの非効率性を検証するとともに、関連するQAフィードバックをDevOpsチームに提供します。IBMによると、CTでは自動化ツールを使って事前定義されたQAスクリプトをアップロードし、本番環境に至る各段階で実行します。
DevOpsパイプラインにCTを導入すれば、コードのリリースを迅速化し、デプロイするコードの品質を高めることができます。多くのチームはすでにCTをDevOpsパイプラインに統合していますが、重要なテスト手法である実機クラウドテストを活用できていないチームも少なくありません。
実機クラウドテストでは、DevOpsチームが実機クラウドプロバイダーと連携し、ブラウザー、プラットフォーム、デバイスを利用します。さまざまなデバイスとプラットフォームの組み合わせでテストを行うことで、ソフトウェアやアプリケーションがエンドユーザーの環境でどのように動作するか、現実に即したフィードバックを得られます。DevOpsパイプラインのベストプラクティスとして、さまざまなデバイスやブラウザーでアプリケーション/ソフトウェアが問題なく動作することを確認でき、時間、費用、労力の大幅な節約につながります。
5. DevOpsパイプラインに複数の種類の継続的監視(CM)を導入する
パイプラインの外部出力を追跡して問題への予防的な対応を可能にする可観測性とは異なり、監視では内部データをリアルタイムで収集・集約し、アプリケーションの健全性を評価します。また、問題にすばやく対応できるようアラートを生成します。
CMを活用すれば、コンプライアンス上の懸念、パフォーマンスの問題、セキュリティ上の脅威をより早く検知し、深刻化する前に修正する時間を確保できます。多くのチームはアプリケーションにCMを導入していますが、インフラストラクチャやネットワークのCMは見落としがちです。
インフラストラクチャ監視では、製品の提供を支えるデータセンター、ハードウェア、サーバーなどのコンポーネントを継続的に監視します。
ネットワーク監視では、ファイアウォール、ルーター、仮想マシンを監視し、ネットワークの停止や障害を防ぎます。
DevOpsパイプラインに複数種類のCMを導入すれば、パイプライン全体をチームで監視できます。さらに、オールインワンの監視ソリューションを使えば、複数種類のCMをDevOpsパイプラインに簡単に統合できます。
次のステップ:DevSecOpsの考え方を取り入れる
DevOpsパイプラインの目的は、開発とリリースのサイクルを速めることです。前述のベストプラクティスを実践すれば、デプロイの速度と信頼性を高められますが、セキュリティはどうでしょうか?
DevOpsパイプラインにセキュリティを統合し、セキュア・バイ・デザインのアプリケーション構築に向けて各チームの足並みをそろえることは不可欠です。だからこそ、現代のDevOpsにおいてDevSecOpsのプラクティスが広がっています。
DevSecOpsとは?
DevSecOpsは、迅速なフィードバックを伴うソフトウェアデリバリーと組織文化を重視するDevOpsモデルに、ITセキュリティのプラクティスを組み合わせたものです。DevSecOpsはDevOpsセキュリティとは異なります。DevOpsセキュリティは、各チームが各段階を完了した後にITセキュリティをDevOpsパイプラインへ追加するという、以前の考え方です。
一方、DevSecOpsではセキュリティを「左にシフト」し、開発プロセスの初期段階から継続して考慮します。これにより、問題がサービスレベル契約(SLA)の対象となる環境に持ち込まれる前に、開発者がセキュリティ修正の責任を担えるようになります。

DevSecOpsのその他のメリット
DevSecOpsはチーム間の連携も促進し、開発、セキュリティ、運用の各チームが協力してセキュリティ目標を設定し、問題を解決し、将来的なリスクを予防的に軽減できるようにします。DevOpsパイプラインで高品質な製品を迅速かつ確実に生み出すことを目指すなら、DevSecOpsの考え方を取り入れるのが最善の方法です。
SnykでDevOpsセキュリティパイプラインを導入する
DevSecOpsへの移行を始める際、市場にある膨大な数のソリューションに圧倒される組織もあるでしょう。Snykなら、開発者を中心に設計され、既存のDevOpsパイプラインに簡単に統合できる、効率的なツールを提供しています。
SnykのDevSecOpsソリューションには、静的アプリケーションセキュリティテスト(SAST)によってコードをリアルタイムで保護するSnyk Codeなどがあります。SASTは、アプリケーションのソースコード、バイトコード、バイナリを分析し、セキュリティ脆弱性につながるコーディングや設計上の問題を特定します。Snyk Codeは修正方法も提案するため、セキュリティの問題をすばやく解決し、遅延を防ぐことができます。
もう1つのツールであるSnyk Open Sourceは、高度なソフトウェア構成分析(SCA)を提供し、オープンソースの依存関係に含まれるセキュリティ脆弱性やライセンス上の問題の特定、優先順位付け、修正を支援します。
その他のSnyk DevSecOpsソリューションには、デプロイ前のワークフローでIaCのセキュリティとコンプライアンスを自動化し、デプロイ後にはリソースの不足を検出するSnyk Infrastructure as Codeがあります。また、開発者を第一に考えたコンテナセキュリティを提供し、ソフトウェア開発ライフサイクル(SDLC)全体を通じて脆弱性の発見と修正を支援するSnyk Containerもあります。
業界をリードするSnykのセキュリティソリューションで、DevOpsパイプラインをさらに強化しませんか?さっそく始めましょう!