Definition

DevOps(「development」と「operations」の混成語)とは、従来のソフトウェア開発プロセスに比べて、より迅速なアプリケーションやサービスのデリバリーを実現するための組織能力の向上を目指したプラクティスとツールの組み合わせです。このようなスピードを実現することで、顧客サービスと市場での競争力の向上が可能になります。

DevOpsとは端的には、従来のサイロ化された開発チームと運用チームの壁を取り除くことです。DevOpsモデルでは、開発・テストからデプロイや運用まで、ソフトウェア・アプリケーションのライフサイクル全体を通じて開発チームと運用チームが協働します。

DevOpsの利点

  • スピード。DevOpsプラクティスは、イノベーションの迅速化、市場の変化への適応力の向上、事業目標達成の実現に向けての効率向上に必要なスピーディーな行動を可能にします。
  • 迅速なデリバリ。リリースのペースを早めることにより、製品の改善を迅速化し、競争優位性を築くことができます。
  • 信頼性。継続的インテグレーション/継続的デリバリーなどのDevOpsプラクティスでは、アプリケーションの更新プログラムやインフラストラクチャの変更の品質を確保できるため、よりスピーディーで信頼性の高いデリバリーを実現するとともに、エンドユーザーの最適な操作性を維持することが可能です。
  • コラボレーションの向上。DevOpsモデルでは、開発チームと運用チームが緊密に協調し、責任を分担し、ワークフローを統合します。これにより効率の向上と時間短縮を実現します。
  • セキュリティ。自動化された統合型セキュリティ・テスト・ツールを用いることにより、セキュリティを低下させることなくDevOpsモデルを導入できます。

DevOpsのセキュリティとDevSecOps

DevOpsのセキュリティ(DevSecOpsと呼ばれる方が一般的)とは、戦略、ポリシー、プロセス、テクノロジーによりDevOps環境全体を保護する統制および実践のことを指します。DevSecOpsの原理は、方向付け、設計、構築、テスト、リリース、サポート、保守その他を含むDevOpsライフサイクル全体にセキュリティを組み込むというものです。

従来セキュリティは、システムの設計が完了した後の工程とされていたことが多く、セキュリティの欠陥の特定と修正が可能になるのはその後からリリースの前まででした。DevOpsモデルの変化により、開発サイクルの後工程で実施される従来のセキュリティ・プラクティスは反復型のソフトウェア開発の設計およびリリースには遅すぎて適さなくなっています。このように、従来のセキュリティ手法はアプリケーションおよびサービスのスピーディーなデリバリーの阻害要因になる可能性があります。

DevSecOpsでは、セキュリティはDevOpsチーム全員の注視の対象になります。DevSecOpsには、安全を損なわずにセキュリティに関する意思決定をスピーディーかつ大規模に実装するという目標があります。DevSecOpsではリリース・エンジニアとセキュリティ・チームとの継続的で柔軟な協調が必要です。「迅速なデリバリー」と「セキュアなコードの構築」という概念を1つの効率化されたプロセスに統合します。セキュリティ・テストはデリバリー・サイクルを停滞させることなく反復的に行われます。重大なセキュリティの問題は、発覚した時点で、脅威や侵害が発生する前に対処します。

適切なDevOpsツールを見つける方法

DevOpsプラクティスでは、顧客のための迅速で信頼性の高いデプロイとイノベーションを支援する効果的なツールを利用します。こうしたツールで手動タスクを自動化することにより、複雑な環境の大規模な管理を支援し、エンジニアがスピーディーなDevOpsのペースの制御を維持できるようにする必要があります。

DevOpsのワークフローは以下フェーズで構成されます。

  • 開発における次のイテレーションの計画
  • コードの作成
  • 本番環境でのテストとデプロイ
  • 製品アップデートのデリバリー
  • ソフトウェア・パフォーマンスの監視とロギング
  • 顧客フィードバックの収集

計画。DevOpsチームが手持ちの作業の内容、現在進行中の作業、納期遅れのリスクの有無を確認するためのスケジュール計画および作業追跡ツールが必要です。Confluenceや Jiraなどのツールは、シームレスで効率的なプロジェクト管理サイクルの実現と迅速な製品デリバリーの確保に役立ちます。

構築とデリバリー。開発チームは開発およびテスト環境を迅速にデプロイする必要があり、不具合の修正を長時間待っている余裕はありません。コンテナ型ツールのDockerを利用することにより、複数の開発およびリリース・サイクル間の一貫性を確保し、反復可能な開発、構築、テスト、本番環境を実現することができます。このフェーズ向けのその他の一般的なツールには、Kubernetes、Terraform、Chef、Ansible、Puppetなどがあります。

テスト。コード品質やユーザー操作性を低下させることなく、テストにかかる時間と手間を削減できるJenkins、CircleCI、GitLab CIなどのツールを検討してもよいでしょう。

ソフトウェアの監視とロギング。ソフトウェアを本番環境に移行した後は、安定したパフォーマンスと顧客満足の向上を確保するために監視する必要があります。この工程では、パフォーマンス解析とロギング、さまざまな問題に関するスマートアラートの表示、顧客フィードバックの収集なども必要になります。これらのタスクを行うためのツールとしては、Prometheus、Grafana、Elastic (ELK) Stack、Splunk、Sumo Logicなどがあります。

DevOpsの手法

DevOpsはアジャイル・ソフトウェア開発から直接派生したものであり、アジャイル手法のソフトウェア開発のスピードとスループットの向上に遅れをとらないようにする必要性から誕生しました。アジャイル開発の進歩により、ソフトウェア・デリバリー・ライフサイクルへのより総合的なアプローチの必要性に着目が集まり、その結果としてDevOpsが登場しました。

「アジャイル開発」はさまざまな反復型のソフトウェア開発手法の総称であり、その多くがDevOpsに受け継がれています。

  • スクラム— 複雑な適応型の問題に対処し、最大限の価値の実現を可能にするフレームワーク。
  • カンバン — 開発チームに過大な負担をかけない継続的デリバリーに重点を置いて製品開発を管理する手法。スクラムと同様、カンバンはチーム間の効果的な協働の向上を目指すプロセスです。
  • スケールド・アジャイル・フレームワーク(SAFe) — 大規模企業におけるリーンおよびアジャイル・プラクティスの拡張に関する指針を与えるための一連の組織/ワークフロー・パターン。単一のチームの枠を超えて規模が拡張する場合には様々な問題が発生し、現在ではこれに対応するためのフレームワークが増えていますが、SAFeもその1つです。
  • リーン開発 — リーン生産方式の原則とプラクティスをソフトウェア開発の領域向けに解釈した手法。リーンは、経験から得られた、アジャイル組織に役立つ概念フレームワーク、価値観、原則、およびベストプラクティスを提示します。
  • エクストリーム・プログラミング(XP) — ソフトウェア品質と顧客要件の変化への即応性の向上を目指すソフトウェア開発手法。XPでは、生産性の向上と、新しい顧客要件を取り入れることができるチェックポイントの導入を目指して、短い開発サイクルでの頻繁なリリースを提唱しています。エクストリーム・プログラミングのその他の要素としては、二人一組でのプログラミング、広範なコードレビューの実施、すべてのコードの単体テスト(必要がない限り、機能プログラミングの単体テストは行わない)、フラットな管理体制、時が経てば顧客要件が変化すること、および問題がわかりやすくなることを想定したシンプルでわかりやすいコード、そして顧客との頻繁なコミュニケーションなどが挙げられます。

DevOpsの手法とプロセスの特徴と利点

ソフトウェア開発の管理プロセスの自動化と効率化を通じて組織のイノベーションの迅速化を支援する主要なプラクティスがいくつかあります。基本的なDevOpsプラクティスの1つとして、小規模な更新を頻繁に行うことが挙げられます。通常、この更新は従来のリリース・プラクティスで行われる更新と比べてより段階的な傾向が強くなります。DevOpsモデルでは、従来のソフトウェア開発プラクティスよりはるかに高い頻度で更新をデプロイします。

DevOpsプラクティスの根幹をなすものはコミュニケーションと協調です。ソフトウェア・デリバリー・プロセスの自動化により、開発チームと運用チームのワークフローと責任を物理的に統合することにより協調体制を確立します。開発チームと運用チーム、さらにその他のマーケティングや営業などのチーム間のコミュニケーションにより、目標とプロジェクトに関する組織全体の連携が強化されます。

継続的インテグレーション/継続的デリバリー(CI/CD)などのDevOpsプラクティスにより、迅速、安全、かつ信頼性の高いデリバリーが実現します。監視およびロギングは、問題に迅速に対応するためのアプリケーション・パフォーマンスの追跡に役立ちます。


シノプシスがDevOpsへのセキュリティの組み込みをお手伝いします

詳細はこちら


マイクロサービス

マイクロサービス・アーキテクチャは、単一のアプリケーションを小規模なサービスの集まりとして構築する設計手法です。各サービスはそれぞれ固有のプロセスで実行され、軽量なメカニズムを用いて明確に定義されたインターフェイスにより他のサービスと通信します。マイクロサービスはそれぞれ、異なるフレームワークや言語で作成し、単独のサービスとして、あるいは複数のサービスを集めたひとまとまりのサービスとしてデプロイすることも可能です。

マイクロサービス・アーキテクチャを用いて、より柔軟性が高く、イノベーションの迅速化を可能にするアプリケーションを構築することもできます。一般に、各サービスはそのサービスに責任を負う小規模なアジャイル・チームと対になります。


継続的インテグレーション/継続的デリバリー(CI/CD)

CI/CDなどのDevOpsプラクティスにより、DevOpsチームは迅速、安全、かつ信頼性の高いデリバリーを実現できます。CIは、開発チームが一元管理されたリポジトリに定期的にコードの変更をマージし、その後のビルドおよびテストを自動化するソフトウェア開発プラクティスです。CIの主な目的は、バグの発見・修正の迅速化、ソフトウェア品質の向上、新しいソフトウェア更新プログラムの検証およびリリースに要する期間の短縮です。CDはCIを拡張した手法で、ビルド工程の後、コードのすべての変更をテストまたは本番環境にデプロイします。


監視とロギング

アプリケーションによって生成されたログを収集して解析することにより、ソフトウェアの変更または更新がユーザーに与える影響を理解しやすくなります。


セキュアなDevOpsモデルの構築

DevOpsやDevSecOpsへの移行はゴールではなく、過程です。DevOpsにより現在の開発と運用のしくみが根本的に変わります。DevOpsの原理に基づいてDevOpsのプラクティス、プロセス、フレームワーク、ワークフローを用いることにより、安全性を損なうことなくセキュリティをスピーディーかつ大規模にソフトウェア開発ライフサイクルに組み込み、リスクの低減、コンプライアンスの確保、相反の低減とコストの削減を実現できます。DevOpsとDevSecOpsにより、開発、運用、セキュリティ・チームはセキュリティおよびコンプライアンスと迅速なデリバリーとのバランスを調整し、SDLC全体にセキュリティを組み込むことが可能になります。