DevOpsとは?基礎知識、アジャイル開発との違い、メリットを解説

ソフトウェア開発プロジェクトにDevOpsを導入することで、迅速な開発と運用が可能になる。

DevOpsとは?

DevOpsの構造

DevOpsとは、開発を意味するDevelopmentと運用を意味するOperationsを組み合わせた造語である。開発担当者と運用担当者が協力し、開発と運用を円滑に進めることで、製品の価値を継続的に高めることを目的としている。

DevOpsが生まれた背景

DevOpsが生まれた背景には、開発現場でチーム間の対立構造が生じるという問題がある。多くのソフトウェア開発現場では、システム開発を担当する開発(Dev)チームと、サービス運用を担当する運用(Ops)チームに分かれて作業する。開発チームの目標は「新しい機能を追加し、より早くリリースすること」である一方、運用チームの目標は「システムを安定稼働させ、サービスを安定して提供すること」である。このように目的の違いによって、立場上の対立が生じることがある。そして、その対立が積み重なるとチーム間の溝が深まり、サイロ化につながる可能性がある。しかし、両者の目的の先には「価値あるサービスをより迅速に顧客へ届ける」という共通の目的が存在する。最終的な目的が同じであれば、本来は対立する必要はない。

また、デジタル化が急速に進む現代では、顧客が求める価値も流動的である。その変化に対応するためには、より迅速なソフトウェア開発を可能にする開発プロセスや組織づくりが求められる。このような背景から、DevOpsが重視されるようになった。

アジャイル開発との違い

DevOpsとアジャイル開発は、継続的にサイクルを回すことや、小さな単位に分けて開発サイクルを回すことなどの共通点があるため混同されることがあるが、別の概念である。DevOpsは組織の協力体制に関する組織論であり、広範な概念である。一方、アジャイル開発は具体的な開発方法論を意味する。ただし、両者は相性がよく、DevOpsを実現するための開発手法としてアジャイル開発が採用されることもある。

アジャイル開発とは、「要件定義、設計、開発、テスト、リリース」という開発工程を、1つの機能単位ごとに小さなサイクルで繰り返す方式である。従来主流だったウォーターフォール開発のように一連の流れを順番に進める手法と比べて柔軟性が高く、リリースまでの期間が短いという特徴がある。DevOpsの組織論のもとでアジャイル開発を行うことで、より効率的で柔軟な開発が可能になる。

DevOpsのメリット

DevOpsの本質は、開発担当者と運用担当者の間の衝突を解消し、開発と運用を円滑に行うことである。DevOpsを実現するには、各段階でさまざまなツールを導入する必要がある。代表的なものとして、管理対象ファイルの変更履歴を記録するバージョン管理システムや、作業を自動化するCI/CDツールなどがある。これらのツールを活用することで生産性の向上につながる。そして生産性が向上すれば、その分の時間を品質向上や新サービス開発などに使えるため、製品やサービスの価値が高まる。こうしたツールによる自動化には、作業を高速化できるというメリットもある。高速化によってDevOpsのライフサイクルを回す速度が上がり、顧客からの要望やフィードバックをすばやく取り込みやすくなり、急速に変化する市場ニーズへ迅速に対応できるようになる。

DevOpsプロセス

DevOpsの開発は、次の6つのプロセスで構成される。これらのプロセスを継続的に回すことでDevOpsを実践できる。

計画(Plan)

プロジェクト全体の要件定義を行い、実装する機能、タスク管理、進捗管理などを決めていく。プロジェクト管理ツールとして有名なものには、JIRAやAzure DevOpsなどがある。

開発(Code)

計画に従って、プログラマーがコーディングするような開発作業を行う。

ソフトウェアの設計・実装段階では、過去の編集履歴をすぐに確認できるように、バージョン管理システムやビルド自動化ツールを利用する。プログラムテストを自動化する実行機能を備えたGitHubやGitLabのようなツールも使用する。

テスト(Test)

開発した成果物にバグなどの欠陥がないかをテストする。

ここで使用される代表的なツールには、JUnit、Selenium、BlazeMeterなどがある。

デプロイ(Deploy)

開発工程が一度完了し、テストに問題がなかった場合は、本番環境で正常に動作するように整備する。ここで使用されるツールには、Ansible、Puppet、Docker、Kubernetesなどがある。

運用(Operate)

リリース後、製品やサービスを継続的に提供するための保守管理である。

サーバーやアプリケーションソフトウェアの監視、トラブル発生時の対応などを行う。

監視(Monitor)

運用で得られたデータや顧客の要望、フィードバックなどを継続的に受け取り、開発に反映することである。

そのために、モニタリングやインシデント管理ツールを使用する。有名なものには、New Relic、Datadog、Grafana、Wiresharkなどがある。