顧客がのぞむ価値を迅速かつ継続的に届けることを優先するために、従来とは異なるアプローチを採用するアジャイル開発。「よく耳にするものの、あまり詳しくはない」という人も多いのではないでしょうか。
今回はアジャイル開発とは何かについて解説していきます。
1. アジャイル開発とは?
アジャイル開発とは、『メンバー間のコラボレーションを重視すること』『変化への柔軟な対応が可能なこと』などを特徴とする開発手法です。以下でアジャイル開発の定義や従来の開発手法との違いなどを紹介します。
1.1 アジャイル開発の定義
2001年、ソフトウェア開発について当時の主流とは異なる取り組みをしていた17名のITエンジニアが、ソフトウェア開発で重視すべき新たなマインドセットについて議論し、『アジャイルソフトウェア開発宣言』として公開しました。アジャイル開発は、アジャイルソフトウェア開発宣言の原則にのっとって実践する一連のソフトウェア開発手法です。
アジャイル開発では『個人との対話』『動くソフトウェア』『顧客との協調』『変化への柔軟な対応』に重点を置いています。
1.1.1 アジャイル開発とウォーターフォール開発の違い
アジャイルが導入されるまでソフトウェア開発の主流とされていた『ウォーターフォール開発』では、開発のステージを要求・設計・実装・テスト・保守など複数の段階に分割し、より上位の工程から下位の工程へと順に開発を進めていきます。
一方アジャイルでは、ソフトウェア開発の流れを『上流から下流へ』という単一的な流れではなく、顧客や状況の変化を考慮した『反復的な流れ』として捉えることにより、ウォーターフォールより柔軟に『変化』へ対応した開発を行います。
1.1.2 アジャイル開発とDevOpsの違い
開発・運用を一体化する取り組みであるDevOpsは、対話や変化への対応を重視するなど複数の点でアジャイルと共通しています。アジャイルとDevOpsは別物ではなく、DevOpsに採用される開発モデルがアジャイルであるという関係を持っているため、DevOpsはアジャイルの一種とも言えます。
アジャイル開発とDevOpsの違いについてこちらの記事で解説しているので、興味のある方はご覧ください。
2. アジャイル開発の流れ
アジャイル開発は、ユーザーストーリーやイテレーション、ベロシティの計測など、従来の開発手法にはない新たな取り組みでプロダクトの開発を進めていきます。
以下でアジャイル開発の流れについて紹介していきます。
2.1 ユーザーストーリー
アジャイル開発では、要求も優先順位も変わるという前提のもと、小さなサイクルを繰り返しながら開発を進めます。しかし、サイクルを繰り返していくうちに、要求や優先順位が揺れ動き、そのまま開発を進めると、『何を(What)』『何のために(Why)』作成しているのかがぶれてしまうことがあります。
つまり、アジャイル開発は、プロジェクトの全体像が分かりづらくなってしまうことがあるのです。
それを防ぐために、『ユーザーが実現したいことやユーザーにとって価値があることを簡潔にまとめた文章』を、プロダクトの骨格として定めておく必要があります。その文章が、ユーザーストーリーと呼ばれるものです。
ユーザーストーリーには、ユーザーの視点で、プロダクトの要求を思いつく範囲で書きます。要求については、後から書き加えても問題ありません。
また、大きすぎるユーザーストーリーは、見積もり可能な単位に分割されます。アジャイル開発では、分割されたユーザーストーリーを一つずつ管理します。
2.2 リリース計画
アジャイル開発では『いつまでにどの機能をリリースできるか』というスケジュールを示したリリース計画を作成し、プロジェクト全体を管理していくことになります。この段階で、プロジェクトのゴールやイテレーションの長さ、各ユーザーストーリーの優先順位などが決定されます。
ただし、アジャイル開発のリリース計画は、あくまで流動的なものであるということが前提です。イテレーションを回しながらベロシティを計測し、リリース計画の精度を徐々に上げていくことが求められます。
2.3 イテレーション(スプリント)
イテレーションとは、『反復』『繰り返し』という意味を持った用語で、アジャイル開発における【計画→設計→開発→テスト】の1サイクルを単位にしたものです。
アジャイル開発では、イテレーションごとに機能をリリースし、ユーザーストーリーの単位でユーザーにプロダクトの確認を依頼し、要望通り実現されていることを承認してもらいます。
もしその際、ユーザーからフィードバックがあった場合、追加のユーザーストーリーを作成し、次のイテレーションで対応することになります。
各用語の詳しい意味や進め方の詳細をこちらの記事で解説しているので、興味のある方はご覧ください。
2.3.1 ベロシティの計測
ベロシティとは、1イテレーションにチームが消費したポイントの合計値です。ポイントはタスクごとに付けられており、1イテレーションにおいて、どのくらいの作業量を行なうことができたかを示すものとなります。つまり、ベロシティは、プロジェクトの進捗状況を計る目安となる数値です。
より多くの機能をより早くユーザーに提供するために、アジャイル開発では、品質面の担保と同時に、ベロシティの向上が期待されます。ベロシティと品質の両立が、アジャイル開発においては大きなテーマとなります。
3. アジャイル開発の手法3選
アジャイル開発には様々な開発手法があります。今回はその中でも代表的な3つの開発手法について解説していきます。
3.1 スクラム
スクラム開発は『プロダクトオーナー』『スクラムマスター』『開発メンバー』という明確な役割分担を定め『チームとしての仕事の進め方』に特化したアジャイル開発方式です。スクラムの取り組みは、プロダクトに対するメンバーの責任感を高め、優れた協調性と連帯感をもたらします。
スクラム開発についてさらに知りたい方はこちらの記事をご覧ください。
3.2 エクストリーム・プログラミング
エクストリーム・プログラミングは『コミュニケーション』『シンプルさ』『フィードバック』『尊重』『勇気』を重視するアジャイル開発手法です。短期間での開発と変化への柔軟な対応を実現するために、テスト駆動開発などのアプローチを行います。
3.3 かんばん
かんばんは作業全体の見える化により生産性を最大化するアジャイル開発手法です。ホワイトボードやWeb上のボードに付箋やラベルを貼り付けていくことで、『コラボレーションの活性化』『プロジェクトの状況把握』などをチームや組織にもたらします。
4. アジャイル開発のよくあるQ&A
従来の開発手法とはアプローチが異なるため、初めてアジャイル開発をプロジェクトで採用する時にはメンバーから多くの疑問や不明点が出ることがあります。よくある質問に対しての回答を以下で紹介してきます。
4.1 アジャイル開発では設計書は作らない?
アジャイル開発は、要件や優先順位は変わるという前提のもとでプロジェクトを進めるため、ウォーターフォール型開発で作成されるような、厳格な要件定義書や設計書の作成は行ないません。その代わりとなるものとして、ユーザーストーリーを作成することになります。
ユーザーストーリーは、『ユーザーにとって価値があることをまとめた概念』であり、開発者はユーザーストーリーに沿ってソフトウェアの開発見積もりを行ない、リリース計画を立て、イテレーションのサイクルを回してプロダクトを実装していきます。
4.2 アジャイル開発をするとプロジェクトの全体像が分かりづらくならない?
出典:簡単!楽しい!5分でわかるユーザーストーリーマッピング(User Story Mapping)|Qiita @Koki_jp
アジャイル開発では、プロジェクト開始段階で要件が完全に確定しているわけではないため、ウォーターフォール型開発と比較すると、全体像がわかりづらくなることがあります。
そうならないために、ユーザーが実現したいこと、つまりユーザーにとって価値があることを正確且つ簡潔にまとめたユーザーストーリーの重要性が高くなってきます。
ユーザーストーリーは、エンジニアが実装する個々の『機能』とは似て非なるものです。ただの機能の羅列ではなく、ユーザー目線での要求内容が示されるため、エンジニアの実装する『機能』が複数集まって形作られることもあります。
そのため、ユーザーと意思疎通し、ユーザーの意図とずれが生じないようにプロジェクトを管理していくことが、全体像にぶれが生じることを防ぐために重要になってきます。
4.3 アジャイル開発はウォーターフォール開発よりも主流の開発手法?
ウォーターフォール型開発のベンダーに不満を募らせるユーザー企業が増え、柔軟性のあるアジャイル開発を選択するプロジェクトが多くなってきているのは事実ですが、だからといって、アジャイル開発が万能かといえば、そうではありません。アジャイル開発では、変更が頻発して要求が膨れ上がったり、要求変更を繰り返すうちに他機能との整合性が取れなくなるなどのリスクが高いからです。
ウォーターフォール型開発もアジャイル開発も一長一短であり、プロジェクトの性格によって、開発手法の向き不向きは変わってきます。
ウォーターフォール型開発は、要件が最初からはっきりとしているプロジェクトや、大規模なプロジェクトに向いているとされます。一方でアジャイル開発は、仕様が最初から明確になっていないプロジェクトや、その時のビジネスの状況によって開発の優先度が変わるプロジェクトに向いている手法です。
近年では、上流工程と下流工程をウォーターフォール型開発で進め、中流工程である詳細設計、開発、フィードバックをアジャイル開発で進めることで、個々の機能を短い期間でユーザーに確認してもらうという、ハイブリッドアジャイルの手法も生まれています。このハイブリッド型開発が、今後主流になっていく可能性も十分にあります。
4.4 アジャイル開発では納期やスケジュールも流動的?
確かに、アジャイル開発はウォーターフォール型開発と比べて、流動的であると言えるでしょう。しかし、ベロシティの計測を細かく正確に行なうことで、開発スピード自体は担保されることになります。
ただし、要求変更が加わり続けて要件が膨れ上がるリスクはあるため、スケジュールが後ろ倒しにならざるを得なくなる可能性は十分にあります。そのため、先ほども記載した、ハイブリッド型開発でプロジェクトを進めることのニーズも高くなってきています。
4.5 アジャイル開発のメリット・デメリットは何?
メリットとしてはまず第一に、仕様変更にも柔軟に対応することができるため、ユーザの要求に最大限応えることができる点が挙げられます。また、不具合があったとしても、影響はイテレーション内に留まるため、手戻りがミニマムであることも大きいでしょう。
デメリットは、プロダクトの要件は変わっていくという前提のもと進められる開発手法であるため、全体の進捗管理が難しくなることが挙げられるでしょう。それに加えて、ユーザーとの意思疎通を重視するため、なかなか要件がまとまらない可能性も高くなります。
5. まとめ
対話や変化への対応を重視するアジャイル開発では、ユーザーストーリーによる要件把握や反復する開発サイクルによって、従来の開発手法より迅速に高品質なプロダクトを顧客へ届けることができます。
またアジャイル開発には、スクラムやエクストリーム・プログラミングなどさらに実践的な複数の開発手法が存在しています。様々なアプローチの知識を付けて、より多くのケースで優れた開発手法を実践できるようになりましょう。