質問: DevOpsとは ========
回答: DevOpsは、アプリケーション開発の時間短縮と品質向上を促し、新しいソフトウェア機能や製品、あるいはその修正版の迅速なリリースを推進する哲学とフレームワークであり、今も進化を続けています。 DevOpsを実践することで、アプリケーション開発チーム(Dev)とIT運用チーム(Ops)の担当者間の継続的なコミュニケーション、コラボレーション、連携、可視化、透明性の確保が円滑になります。 このような「Dev」と「Ops」の緊密な関係は、ソフトウェアの初期計画からコーディング、ビルド、テスト、リリースにとどまらず、導入、運用、継続的な監視に至るまで、DevOpsライフサイクルのすべての段階で維持されます。この関係によって、さらなる改善、開発、テスト、導入に役立つ、お客様からの継続的なフィードバック ループが活性化されます。このような取り組みの成果の1つとして、必要な機能の変更や追加を継続的に短期間でリリースできることが挙げられます。 DevOpsの目標は4つあると定義されることもあります。その4つとは、文化、自動化、評価、共有です(Culture、Automation、Measurement、Sharingの頭文字をとってCAMSとも言われます)。DevOpsツールを使用すると、これらの領域に対応できます。DevOpsツールは、開発と運用のワークフローの効率や連携を向上させ、統合、開発、テスト、導入、監視において、以前は時間のかかっていた手作業や定型タスクを自動化してくれます。 !コードの活用によってITインフラへの投資が伸びている理由 DevOpsがなぜ重要なのか 開発チームとIT運用チームの間にあるコミュニケーションやコラボレーションの壁を取り払う以外にも、DevOpsには、中核的な価値として、顧客満足度の向上と価値実現の高速化というメリットがあります。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の手法には、継続的な改善と自動化という哲学が反映されています。多くの手法が、特定の、または複数の開発サイクル段階に焦点を絞っています。DevOpsの手法には、次のようなものがあります。 * **継続的開発:**この手法は、DevOpsライフサイクルの計画とコーディングの段階を対象としています。バージョン管理の仕組みが利用される場合もあります。 * **継続的テスト:**この手法では、アプリケーション コードが作成または更新される際に、スケジュールが事前設定されて自動化された継続的なコード テストが使用されます。このタイプのテストによって、本番環境へのコードの提供を高速化できます。 * **継続的統合(CI):**この手法では、構成管理(CM)ツールを他のテストおよび開発用ツールと組み合わせて、開発中のコードのうち本番リリースの準備ができたコードの数を追跡します。また、テストと開発の間で迅速なフィードバックを行い、コードの問題をすばやく特定して解決します。 * **継続的提供:**この手法では、コードの変更を、テスト完了後に、テスト運用環境やステージング環境に自動的に提供します。そのあとで、スタッフがそのコード変更を本番環境に昇格するかどうかを判断します。 * **継続的導入(CD):**継続的提供に似ていますが、この手法では、新しいコードや変更されたコードを本番環境に自動的にリリースします。継続的導入を採用している企業では、コードや機能の変更を1日に数回リリースする場合もあります。DockerやKubernetesなどのコンテナ テクノロジを利用すると、異なる導入プラットフォームや環境全体でコードの一貫性が保ちながら継続的に導入することが可能になります。 * **継続的監視:**この手法では、運用環境とその基盤となるインフラの両方を継続的に監視します。バグや問題が発見されると、フィードバック ループによって開発チームに報告されます。 * **コードとしてのインフラ(IAC):**この手法は、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の目標を推し進めるために、業界やオープンソース界隈でツールやフレームワークが開発されたり提案されたりしました。 ネットアップとDevOps ネットアップでは、DevOpsを活用したビジネス成果の向上を後押ししています。運用チームが少ない技術作業でインフラの自動化を実現したり、開発者が軋轢を減らしながら信頼性と予測性の高い環境を構築したりできるよう支援しています。ネットアップのテクノロジを活用すれば、お客様は、組織が求めるサービスや機能を自信を持って提供し、オンプレミスとクラウド環境の両方で開発者の生産性を最大限に高めることに貢献できます。 ネットアップのソリューションなら、開発者、テスト チーム、QAチーム、運用チームはインフラのリソース(永続的ストレージ ボリュームなど)をコードとして利用できます。すべて、DevOpsパイプラインで普段使用しているツール内から利用できます。たとえば、Puppet、Ansible、Docker、Kubernetes、OpenShiftなどのツールから、ネットアップ ストレージAPIやIAC統合を活用できます。 ネットアップのソリューションがもたらすメリットは、開発者がストレージをコードとして簡単に利用できるだけではありません。ネットアップのテクノロジを活用すれば、運用チームも開発者やテスト担当者にリソースを確実にプロビジョニングし、提供できます。その後、開発者やテスト担当者は自分で、スナップショットやクローンなどのストレージ機能をすばやくプロビジョニングでき、コーディングやテストのサイクルを短縮できます。これらの機能では、本番環境のデータやコード セットのリアルタイム コピーを数秒や数分でコードとしてプロビジョニングできるため、開発やQAのワークフローを高速化できます。 コミュニティに対するネットアップの注力は、現在、thePubとして実を結んでいます。この開発者コミュニティでは、コラボレーションの促進、ヒントやアドバイスの共有、最新のDevOps手法や原理に関するアイデアの議論が行われています。 DevOpsに関するブログ * Transformative DevOps for Easier and Faster Software Builds * How to Build an Agile Infrastructure for DevOps with OpenStack, Containers, and Cisco CloudCenter * The Intersection of DevOps, Containers, and Storage