技術解説
DevOpsとは?概要やアジャイル開発との違い、メリットなどを解説します
現代的なシステム開発においてよく耳にする言葉に、「DevOps」や「アジャイル開発」があります。しかし、言葉そのものには馴染みがあっても、これらが具体的に何を指しているのか、理解が曖昧なままという方もいるのではないでしょうか。本記事ではDevOpsの概要や、アジャイル開発との違い、そのメリットなど、DevOpsの基礎知識を解説します。
DevOpsとは
DevOps(デブオプス)とは、「開発(Development)」と「運用(Operations)」を組み合わせた造語です。簡単に言えば、「開発担当と運用担当が緊密に連携して、柔軟かつスピーディーにシステム開発を行う手法」のことです。
DevOpsが生まれた背景には、開発現場におけるチーム間の対立という問題があります。多くのソフトウェアの開発現場では、機能の開発を担当する開発(Dev)チームと、サービスの運用を担当する運用(Ops)チームに分かれて作業を行っています。Devチームの主なミッションは、ソフトウェアに新しい機能を追加していくことです。これに対してOpsチームのミッションは、現在動いている環境を維持し、サービスを安定して継続することです。このように、DevチームとOpsチームには課せられているミッションが大きく異なるわけですが、これが意見の対立を生む原因となってしまいます。
具体的な例を挙げると、Devチームが新しいバージョンのミドルウェアやライブラリのインストールを要求しても、Opsチームがセキュリティや運用ポリシーを理由に、それを許可しないということがよくあります。これをDevチームの視点から見ると、Opsチームの判断は、新機能開発の妨げになっているように見えるでしょう。しかしOpsチームの視点から見ると、Devチームの要望は、セキュリティやサポートといった運用の事情を考慮せず、自分たちの都合を通そうとしているように見えてしまいます。そしてこうした意見の食い違いが積み重なることで、チーム間の溝が深まる「サイロ化」が発生します。
DevチームもOpsチームも、価値のあるサービスをユーザーに届けるという最終的な目的は同じはずです。目的が一致しているのであれば、対立して足を引っぱり合うようなことをする必要は、本来ないはずなのです。現代は激しく、急速に変化し続けているビジネスシーンに対応するため、より迅速なソフトウェア開発が求められている時代です。そのためには、内部的な対立でチームが疲弊するようなことがあってはなりません。そこで「ありがちなチーム間の対立を解消し、協力して円滑に開発を進めていこう」という考え方、すなわちDevOpsが注目されているのです。
DevOpsとアジャイル開発との違い
DevOpsと同じような文脈でよく聞かれる言葉が、「アジャイル開発」です。アジャイル開発とは、従来の「ウォーターフォール開発」などと同じく、ソフトウェアの開発手法につけられた名称です。長い開発期間をかけて巨大で複雑なソフトウェアを開発するのではなく、ソフトウェアを機能ごとに小さく分割し、「計画・開発・リリース」を短いスパンで頻繁に行うのがアジャイル開発の特徴です。アジャイル開発はその特性上、要求変更や機能追加に柔軟に対処しやすい開発手法です。アジャイル開発の詳細につきましては、「変化の激しいビジネスニーズに迅速に対応する開発手法『アジャイル開発』」の記事をご確認ください。
簡単にまとめると、DevOpsとは「DevとOpsが協力することが重要」という考え方です。DevOpsは具体的なツールやワークフローだけを指す言葉ではなく、企業の文化や考え方といった組織的な面も含む、幅広い概念でもあります。これに対してアジャイル開発とは、具体的な開発手法の名称です。ただし、アジャイル開発を実現しようとすると、必然的にDevOps的な考え方やアプローチが必要となるでしょう。
DevOpsとアジャイルは、それぞれ背景や目的が異なる考え方ではあるものの、非常に関連性の深い言葉でもあるのです。
DevOpsのライフサイクル
DevOpsは、「プラン」「コード」「ビルド」「テスト」「デプロイ」「運用」「モニター」という7つのステップで構成されるライフサイクルを持っています。
- プラン: プロジェクト全体のタスク管理や開発の要件を定義する。
- コード: 開発要件に沿って、プログラマーがコードの作成を行う。
- ビルド: ソースコードから実際に動作させるアプリケーションを作成する。
- テスト: ビルドしたアプリケーションにバグなどの不具合がないかをテストする。
- デプロイ: アプリケーションを本番環境に配備する。
- 運用: 継続的にサービスを提供するための保守管理作業を行う。
- モニター: 運用から得られた情報や、ユーザーからの評価、要望などを確認する。
これらのステップを順に、かつ継続的に回していくことが、すなわちDevOpsの実践となります。
DevOpsを導入するメリット
DevOpsを導入するメリットとしては、主に「スムーズな開発の実現」「生産性の向上」「リリースの高速化」が挙げられます。
DevOpsの本質は、その名の通りDevチームとOpsチーム間の対立を解消することにあります。従来ありがちであった内部的な足の引っぱり合いをなくすことで、スムーズな開発と運用を実現します。
DevOpsを実践するには、そのライフサイクルの各ステップにおいて、さまざまな支援ツールの導入が必要となってきます。代表的なツールとしては、プロジェクト管理下のファイルに対する変更履歴を記録する「バージョン管理システム」や、これまで手作業で行っていた作業を自動化する「CI/CDツール」などが挙げられますが、こうしたツールを効果的に活用することは、なによりも生産性の向上に繋がります。そして生産性が向上するということは、従来よりも人的リソースに余裕ができるということです。こうして生まれた余剰リソースは、さらなる品質向上や新サービスの開発などに投入できるため、よりサービスの価値が高まるという好循環が期待できます。
ツールによるテストやデリバリーの自動化は、生産性の向上と同時に作業の高速化という恩恵をもたらします。高速化はシンプルに、DevOpsライフサイクルを回す速度の向上を実現します。これは言いかえると、ある一定期間内にDevOpsライフサイクルを回す回数を増やせるということです。ライフサイクルを回す回数が増えれば、市場からの要望やフィードバックを迅速に取り入れやすくなり、これはすなわち変化し続ける市場ニーズへの対応力の強化に繋がります。
富士通のDevOpsへの取り組み
富士通では従来よりDevOpsへの取り組みを行っており、こうした取り組みの成果は、実際のニフクラ自身の運用においても活用されています。具体的な取り組み例としては、さまざまなツールを活用した開発工程サイクルや情報共有の高速化が挙げられます。また、開発・運用・企画など、縦割りであった社内体制を提供サービスを中心とした体制に変革させることで、連携を強化しています。
こうしたDevOpsの実践を通して得られた知見を活かし、FJcloud-Vでは「DevOps with GitLab」などのDevOps支援サービスを提供しています。詳細については、「ニフクラのDevOpsとは」を参照してください。