メニュー

DevOpsとは

トピック

このページを共有

DevOpsは、アプリケーション開発の高速化と品質向上を促し、新しいソフトウェア機能や製品、あるいはその修正版の迅速なリリースを推進するフィロソフィーとフレームワークであり、今も進化を続けています。

DevOpsを実践することで、アプリケーション開発チーム(Dev)とIT運用チーム(Ops)の担当者間の継続的なコミュニケーション、コラボレーション、連携、可視化、透明性の確保が円滑になります。

このような「Dev」と「Ops」の緊密な関係は、ソフトウェアの初期計画からコーディング、ビルド、テスト、リリースにとどまらず、デプロイメント、運用、継続的な監視に至るまで、DevOpsライフサイクルのすべての段階で維持されます。この関係によって、さらなる改善、開発、テスト、デプロイメントに役立つ、お客様からの継続的なフィードバック ループが活性化されます。このような取り組みの成果の1つとして、必要な機能の変更や追加を継続的に短期間でリリースできることが挙げられます。

DevOpsの目標を4つのカテゴリ(Culture、Automation、Measurement、Sharing(CAMS))に分類する人もいますが、これらの分野ではDevOpsツールを活用できます。これらのツールにより、開発と運用のワークフローがより合理化され、コラボレーションしやすくなります。また、統合、開発、テスト、デプロイメント、監視に関連していて、これまで時間がかかっていた手作業や静的なタスクが自動化されます。

DevOpsが重要な理由

DevOpsの中核的な価値は、開発チームとIT運用チームの間のコミュニケーションやコラボレーションの障壁を取り除く取り組みだけではなく、顧客満足度と価値の迅速な提供も含まれます。DevOpsは、ビジネスのイノベーションを推進し、プロセスの継続的な改善を推進するようにも設計されています。

DevOpsを実践することで、組織の最終的なお客様に優れたビジネス バリューをより迅速、より安全に提供できるようになります。そのバリューは、製品のリリース、機能、またはアップデートの頻度を高めるという形で提供されることがあります。そのためには、製品のリリースや新機能が、適切なレベルの品質とセキュリティを維持しながら、どれだけ短期間でお客様に提供されるかが関係してきます。また、問題やバグをどれだけ迅速に特定し、どれだけ早く解決して再リリースするかが重視されることもあります。

基盤となるインフラも、ソフトウェアが最初に開発され、テスト、本番環境へのリリースが行われる際に、ソフトウェアのシームレスなパフォーマンス、可用性、信頼性を実現し、DevOpsをサポートしています。

DevOpsの方式

DevOpsには、開発や製品リリースを高速化、改善するための一般的な手法がいくつかあります。それらは、ソフトウェア開発の方法論と実践という形をとっています。特に人気があるのは、スクラム、カンバン、アジャイルです。

  • スクラム:スクラムでは、開発プロジェクトとQAプロジェクトの期間を短縮するためにチームのメンバーがどのように連携するかを定義します。スクラムの手法には、主要なワークフローと特定の用語(スプリント、タイムボックス、デイリー スクラム(ミーティング))、指定された役割(スクラムマスター、プロダクトオーナー))が含まれます。
  • カンバン:カンバンは、トヨタの製造現場を効率化した取り組みに由来します。カンバンは、ソフトウェア プロジェクトの進行中の作業(WIP)の状態をカンバン ボードで追跡することを規定しています。
  • アジャイル:初期のアジャイル ソフトウェア開発手法は、DevOpsの手法やツールに大きな影響を与え続けています。スクラムやカンバンなど多くのDevOps手法には、アジャイル プログラミングの要素が取り入れられています。アジャイル手法の中には、ニーズや要件の変化に対する即応性の向上、要件をユーザ ストーリーとして文書化する取り組み、毎日のスタンドアップの実施、継続的なお客様から顧客フィードバックの組み込みに関連しているものもあります。また、アジャイルは、従来の「ウォーターフォール」開発手法ではなく、より短いソフトウェア開発ライフサイクルを規定しています。

DevOpsツールチェーン

DevOpsの手法を実践している人は、多くの場合、DevOpsに適したツールをDevOpsの「ツールチェーン」に取り入れて使用しています。これらのツールは、ソフトウェア提供ワークフロー(「パイプライン」)のさまざまな段階をさらに合理化、短縮、自動化することを目標としたものです。また、このようなツールの多くは、開発チームと運用チームの自動化、コラボレーション、統合というDevOpsの基本原則も促進しています。DevOpsライフサイクルのさまざまな段階で使用されるツールの例を次に示します。

  • 計画:このフェーズでは、ビジネス バリューと要件の定義を支援します。たとえば、既知の問題を追跡してプロジェクト管理を実施するのに役立つJiraやGitなどのツールがあります。
  • コーディング:このフェーズでは、ソフトウェア設計とソフトウェア コードの作成を行います。たとえば、GitHub、GitLab、Bitbucket、Stashなどのツールがあります。
  • ビルド:このフェーズでは、ソフトウェアのビルドとバージョンを管理し、自動化されたツールを使用して、本番環境に今後リリースするコードのコンパイルとパッケージ化を行います。製品リリースに必要なインフラも「パッケージ化」するソース コード リポジトリまたはパッケージ リポジトリを使用します。たとえば、Docker、Ansible、Puppet、Chef、Gradle、 Maven、JFrog Artifactoryなどのツールがあります。
  • テスト:このフェーズでは、継続的テスト(手動または自動)を実施して、最適なコード品質を確保します。たとえば、JUnit、Codeception、Selenium、Vagrant、TestNG、 BlazeMeterなどのツールがあります。
  • デプロイメント:このフェーズでは、本番環境への製品リリースの管理、調整、スケジュール設定、自動化を支援するツールが含まれます。たとえば、Puppet、Chef、Ansible、Jenkins、Kubernetes、 OpenShift、OpenStack、Docker、Jiraなどのツールがあります。
  • 運用:このフェーズでは、本番稼動中のソフトウェアを管理します。たとえば、Ansible、Puppet、PowerShell、Chef、Salt、Otterなどのツールがあります。
  • 監視:このフェーズでは、本番環境の特定のソフトウェア リリースにおける問題に関する情報を特定して収集します。たとえば、New Relic、Datadog、Grafana、Wireshark、Splunk、 Nagios、Slackなどのツールがあります。

DevOpsの手法

DevOpsの手法には、継続的な改善と自動化という考え方が反映されています。多くの手法では、1つまたは複数の開発サイクル フェーズに焦点を当てています。これらの手法としては、次のものがあります。

  • 継続的開発: この手法は、DevOpsライフサイクルの計画フェーズとコーディング フェーズにわたるものです。バージョン管理メカニズムが関係するものもあります。
  • 継続的テスト: この手法では、アプリケーション コードの作成時または更新時に、スケジュールが事前に設定され自動化された継続的なコード テストが組み込まれます。このようなテストにより、本番環境へのコードの提供を高速化できます。
  • 継続的インテグレーション(CI) : この手法では、構成管理(CM)ツールを他のテスト ツールや開発ツールと組み合わせて、開発中のコードのうち本番環境で使用可能なコードの量を追跡します。テストと開発の間で迅速なフィードバックを行い、コードの問題をすばやく特定して解決します。
  • 継続的デリバリ この手法では、テスト後にコードの変更内容をテスト運用環境やステージング環境に自動的に提供します。その後、担当者は、そのコードの変更内容を本番環境に昇格させるよう決定することができます。
  • 継続的デプロイメント(CD): 継続的デリバリと同様に、この手法では、新しいコードや変更されたコードを本番環境に自動的にリリースします。継続的デプロイメントを行っている企業では、コードや機能の変更が1日に数回リリースされることがあります。DockerやKubernetesなどの コンテナ テクノロジを使用すると、さまざまなデプロイメント プラットフォームや環境にわたってコードの一貫性を維持できるため、継続的デプロイメントが可能になります。
  • 継続的監視: この手法では、運用中のコードとそれを支える基盤インフラの両方を継続的に監視します。バグや問題を報告するフィードバック ループは、その後開発に戻ります。
  • コードとしてのインフラ この手法は、DevOpsのさまざまなフェーズで、ソフトウェア リリースに必要なインフラのプロビジョニングを自動化するために使用できます。開発者は、既存の開発ツール内からインフラの「コード」を追加します。たとえば、開発者はDocker、Kubernetes、OpenShiftからストレージ ボリュームをオンデマンドで作成できます。また、運用チームが環境の設定を監視し、変更を追跡して、設定のロールバックを簡易化できます。

DevOpsのメリット

DevOpsの支持者はビジネスや技術の面でさまざまなのメリットがあると述べており、その多くはお客様の満足度を高めるものです。DevOpsのメリットには次のようなものがあります。

  • 製品提供の高速化と向上
  • 迅速な問題解決と複雑さの軽減
  • 拡張性と可用性の向上
  • より安定した運用環境
  • リソース利用率の向上
  • 自動化の強化
  • システムの成果の可視化
  • イノベーションの促進

DevOpsの歴史

ソフトウェアの開発とデプロイメントを合理化するためのDevOps手法の多くは、アジャイル ソフトウェア開発とリーン プログラミングの初期の原則に基づいています。しかし、DevOpsはもともと、開発者と運用チームの活動を調和させるための草の根的な動きから進化したものです。

2000年代初頭には、GoogleやFlickrなど人気のあるWebサイトへのアクセス数が急増し、その可用性を維持する必要がありました。そのため、ソフトウェア信頼性エンジニア(SRE)が採用されるようになりました。SREとは、コードを本番環境にリリースした後もサイトの稼働がを維持されるように、開発者と緊密に連携する運用担当者です。

2009年に、FlickrのエンジニアであるJohn Allspaw氏とPaul Hammond氏がカンファレンスでDevOpsに近い独自の手法を発表しました。そのプレゼンテーションは「10+ Deploys Per Day: Dev and Ops Cooperation at Flickr(1日に10回以上のデプロイ:Flickrにおける開発と運用の協力)」というタイトルでした。同年、Patrick Debois氏がベルギーで最初の「DevOps Day」を開催しました。DevOps Dayが世界中で開催されるようになったことで、#DevOpsのハッシュタグも採用され、勢いを増しました。

ここ数年の間に、DevOpsの目標を推進するために、業界やオープンソースのツールとフレームワークが開発され、提案されました。

NetAppとDevOps

NetAppでは、DevOpsを活用したビジネス成果の向上を後押ししています。運用チームが少ない技術作業でインフラの自動化を実現したり、開発者が軋轢を減らしながら信頼性と予測性の高い環境を構築したりできるよう支援しています。NetAppのテクノロジを活用すれば、お客様は、組織が求めるサービスや機能を自信を持って提供し、オンプレミスとクラウド環境の両方で開発者の生産性を最大限に高めることに貢献できます。

NetAppのソリューションなら、開発者、テスト チーム、QAチーム、運用チームはインフラのリソース(永続的ストレージ ボリュームなど)をコードとして利用できます。すべて、DevOpsパイプラインで普段使用しているツール内から利用できます。たとえば、Puppet、Ansible、Docker、Kubernetes、OpenShiftなどのツールから、NetAppストレージAPIやIAC統合を活用できます。

NetAppのソリューションがもたらすメリットは、開発者がストレージをコードとして簡単に利用できるだけではありません。NetAppのテクノロジを活用すれば、運用チームも開発者やテスト担当者にリソースを確実にプロビジョニングし、提供できます。開発者やテスト担当者は、Snapshotやクローンなどのストレージ機能を自身ですばやくプロビジョニングすることで、コーディングやテストのサイクルを短縮できます。これらの機能によって、リアルタイムの本番環境のデータやコード セットのコピーをわずか数秒または数分でコードとしてプロビジョニングできるため、開発とQAのワークフローがスピードアップします。NetAppがDevOps向けに開発されている理由をご説明します。

NetAppがDevOps向けに開発されている理由

NetAppはコミュニティに注力しており、現在は、thePubとして実を結んでいます。この開発者コミュニティでは、コラボレーションの促進、ヒントやアドバイスの共有、最新のDevOps手法やプロトコルに関するアイデアの議論が行われています。

DevOps:文化、テクノロジ、ツールに関する包括的なガイド

DevOpsの文化は、分野の垣根を超えた少人数のチームに重点を置いています。これらのチームは、独立して作業を進めることができ、ソフトウェア製品で提供するユーザ エクスペリエンスに対して共同で責任を負っています。

Drift chat loading