こんにちは。ディベロップメントテクノロジーセンターの青山です。

 

DevOpsがどういうものか知らない方々へのDevOps紹介連載記事です。
前回からだいぶ間が空いてしまいましたが、これまで以下の紹介をしてきました。

今回はDevOpsと似た取り組みである「アジャイル開発」とDevOpsの関連性について紹介します。

アジャイル開発とは

「アジャイル開発」は、迅速かつ適応的にソフトウェア開発をする手法の総称です。
アジャイル開発手法として代表的なものは「スクラム(Scrum)」「エクストリームプログラミング(XP)」などがあります。

スクラムについては「出典:スクラムガイド」にまとめられていますが、スプリントと呼ばれる1~4週間のタイムボックスを繰り返しながら開発を進めます。
プロダクトバックログと呼ばれる優先度付けされた要求一覧から、各スプリントの開始時点で何をやるのかを決め開発します。
半年から1年以上の長い期間で計画を立てるウォーターフォール型の開発とは異なり、都度都度開発すべきものを決定するため、要求の優先度が変わった場合に素早く対応することができます。

アジャイル開発自体は2001年時点で「出典:アジャイルソフトウェア開発宣言」としてまとめられており、新しい開発手法というわけでないのですが、ここ最近は大きな注目を浴びており導入が増えてきています。
VUCA時代では自分たちの「仮説」を実際に市場に問うアジリティ(スピード/頻度)を極力上げてフィードバックを得ることが重要となるため、短いタイムボックスで開発し素早くフィードバックを得ることができるアジャイル開発はVUCA時代にうってつけであるからだと思います。

DevOpsも将来の予測が困難なVUCA時代に対応できるようにするため、ソフトウェアやサービスの迅速なリリースを行います。

そのため、アプローチが異なるもののDevOpsとアジャイル開発には多くの共通点があります。

DevOpsとアジャイル開発の共通点

DevOpsとアジャイル開発の共通点について、詳しく見ていきます。

小さな反復

両者とも小さな反復を実現します。
DevOpsでは小さなリリースを繰り返すことにより、フィードバックを得るアジリティを上げるのと同時にリリースにおけるリスクを低減させます。
アジャイル開発(スクラム)では、スプリント(1~4週間のタイムボックス)を繰り返しながら反復開発を進めます。

変化・改善の常態化

両者ともフィードバックに基づいて常に変化し改善していくことを求めます。
DevOpsでは、リーン(Lean)の考え方に基づいて、プロセスを見直し、無理・無駄を省きプロセスを最適化します。
アジャイル開発(スクラム)では、主に「ふりかえり(レトロスペクティブ)」を用いてスプリントの完了毎にチームのふりかえりを行い、変化・改善を進めていきます。

テクノロジ活用した効率・自動化

両者とも反復作業が基本となるため、テクノロジを活用した効率・自動化を求めます。
DevOpsではCI/CDツールを導入してリリース作業を自動化します。
アジャイル開発(スクラム)では、特にガイド類に定義されてはいませんが、実践にあたってテスト自動化は重要なプラクティスです。

可視化され計測可能な状態

両者ともチームが可視化され計測可能な状態であること、つまり「みえる化」を求めます。
DevOpsでは、人・プロセス・パフォーマンスの全てを計測し、フィードバックのインプットとします。
アジャイル開発(スクラム)では、開発に関わる情報が全て可視化されている状態「透明性」を大事なスクラムの柱としています。

DevOpsとアジャイル開発の違い

DevOpsとアジャイル開発では様々な共通点がありますが、多少の違いがあります。

DevOpsもアジャイル開発もバリューストリーム全体がターゲットではあるものの、個人的にはアジャイル開発では主に開発プロセス(企画、設計、開発)にフォーカスしており、DevOpsは主にリリースプロセス(テスト、リリース、運用)にフォーカスしていると考えています。

イメージ的には以下のような関係になるかと思います。

また、DevOpsでは「開発(Dev)」と「運用(Ops)」の協業の必要性から端を発しているためチーム/組織のサイロ化解消というものをとても大事な取り組みとして上げています。

一方でアジャイル開発(スクラム)では、チーム志向ということで個々のタスクではなくスクラムチームの成果の最大化を目指しますが、上記チーム/組織のサイロ化解消についてはあまり言及されていません。(スクラムガイドの2020年改訂で自己組織化から自己管理型と表現が改まっており、これはサイロ化を防ぐ・周りと協業することを意味しているとも解釈できるという意見もあります)

ただ、DevOpsとアジャイル開発の目的・大きな方向性は同じため、異なる要素についても相反するようなものではなく、どちらかというとお互いを補完するものとなります。そのため、DevOpsとアジャイル開発は組み合わせて取り組むことにより、より高い効果を期待することができます。

おわりに

今回はDevOpsとアジャイル開発の共通点・違いについて紹介しました。

DevOpsとアジャイル開発は、VUCA時代に対応できるようにするための多くの共通点があります。

従来のウォーターフォール型開発ではDevOpsのメリットが十分に享受できません。DevOpsを導入するにあたっては、開発プロセスもアジャイル開発とすることにより高い効果をあげることができますので、併せて導入することをぜひ検討してみてください。

次回はDevOpsを実際に実践していくためのアプローチについて紹介します。