DevOps とは?基礎知識、アジャイル開発との違い、利点を説明

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

DevOps とは?

DevOps 構造

DevOps (デブオプス) とは、開発を意味する Development と、運用を意味する Operations を組み合わせた合成語である。開発担当者と運用担当者が協力することで、開発と運用を円滑に進め、製品の価値を継続的に向上させることが目的である。

DevOps が生まれた背景

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

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

アジャイル開発との違い

DevOps とアジャイル開発は、継続的にサイクルを回すことや、小さな単位に分けて開発サイクルを回すことなど共通点があるため混同されることがあるが、別物である。DevOps は組織の協力体制に関する組織論であり広範な概念だが、アジャイル開発は具体的な開発方法論の 1 つである。ただし、両者の親和性は高く、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 などがある。