2023.09.29更新日:2023.12.01
近年「DX(デジタルトランスフォーメーション)」推進の観点からも注目を集めているアジャイル開発という手法があります。
アジャイル開発は2000年代頃からシステム開発の現場で採用されるようになりましたが、従来主流とされてきたウォーターフォール開発と比較して、どのような特徴があるのでしょうか?
この記事ではアジャイル開発の基本特徴や開発の流れ、マネジメント手法などをわかりやすく解説します。
アジャイル開発とは、英語の agile(意:「敏捷」「素早い」)をその名に冠する通り、「機動性」「スピード」を重視する、ソフトウェア開発手法の1つです。
変化が激しくニーズが多様化する現代においては、デジタルサービス・システムは「より早く」「より柔軟に」提供することが求められます。
例えば、ある製品の設計図を作り、2年後の完成を目標に2年分の開発作業計画を立てたとしても、開発開始から半年後に法律や税制の変更が発表されたら、その法律にあった製品になるよう設計図の修正が必要です。また、1年後に競合他社がほぼ同じ製品を発売していたとしたらどうでしょうか。市場にとって「時代遅れ」な製品を出さないよう、その都度その都度設計図に手を加え、開発計画を修正していくのがアジャイル開発です。その時その時の市場ニーズやユーザーの要望に合わせて仕様を変えていく開発手法で、時代にあった機能提供が持続可能な点から近年大きく注目を集めています。
アジャイル開発を取り入れている企業は、日本で4割、米国では8割に上るという結果が出ています。
(IPA『DX白書 2023 』より)
では、アジャイル開発はどのように「機動性」「スピード」を確保しているのでしょうか?
これはアジャイル開発の進め方に最も特徴がよく現れています。
アジャイル開発では、"変化を受け入れる"ことを前提に、短期的なサイクルで開発とリリースを何度も繰り返し、バージョンアップを重ねることで完成度を高めていきます。優先度の高い機能から着手・リリースが可能なため、サービスのリリースまでの時間を効率的に短縮することができます。
システム開発の現場で代表的な開発技法にウォーターフォール開発があります。 こちらは上流工程(要件定義・基本設計)から下流工程(実装・テスト)を順番通りに完了させていくのが特徴です。
(比較表)
アジャイル開発 | ウォーターフォール開発 | |
---|---|---|
要件に対する考え方 | 要件は変わるもの | 要件は明確なもの |
進め方 | 短期サイクルを繰り返す | 事前にスケジュールを計画し、それに沿って進める |
チーム編成 | 顧客も含め、チーム一丸で | 各工程毎に分担 |
評価単位 | チーム単位 | 与えられた役割ごと |
開発計画 | サイクル毎に計画 | フェーズごとに事前にスケジュールを組む |
機能の確認・リリース | 機能・サイクルごと | プロジェクト全体で |
目指す方向 | 段階的なレベルアップ | 当初の計画の実現 |
向いているプロジェクト | スピード・柔軟性・機動性 | 要件が明確・大規模 |
ウォーターフォール開発では、要件や全体の機能設計を固めてから開発に着手するため、予算や人員などのプロジェクト計画が立てやすい点がメリットになります。
一方で、順序立てて各工程を進めていくことからプロジェクトの進捗は比較的ゆっくりです。また、開発途中での仕様変更を行うと前工程からやり直す必要が生じるため、変更に適応しにくい側面があります。
アジャイル開発・ウォーターフォール開発ともにそれぞれベースとなる考え方が異なります。もし自分がプロジェクトを推進する立場となった場合は、そのプロジェクトがどちらの考え方に合うのかを考え、開発手法を選択しましょう。
ここからは、実際にアジャイル開発を行う流れを解説します。
どのようなプロジェクトでも、開発に着手するためには"顧客が求めること"を決める必要があります。
アジャイル開発では「要件は変わるもの」という考え方に基づき、大まかに仕様や要求事項などを整理していきます。整理は"顧客がやりたいこと"というレベル感で行い、この整理結果を『ユーザーストーリー』と呼びます。
「要件は変わるもの」という考え方を出発点としている点も、顧客ニーズの変化にも臨機応変に対応していくアジャイル開発の特徴が現れています。
大まかな仕様や要求事項の整理が終わると、次は実際に機能を作っていく工程に移ります。
アジャイル開発では、「計画」→「設計」→「実装」→「テスト」といった一連の開発工程を1〜2週間の短期的なサイクルで繰り返し行います。この一つのサイクルのことをイテレーション(iteration; 反復)と呼びます。イテレーションを繰り返し行い、機能のアップデート&リリースを重ねていきます。
これまでに説明したアジャイル開発の考え方・進め方を実際の開発に適用するために、世界中でさまざまなマネジメント手法が考案されています。ここでは、そのうち代表的な3つを紹介します。
アジャイル開発を進める際に重視するポイントによって採用すべきマネジメント手法は異なります。その点を意識しながら読み進めましょう。
スクラムとは、アジャイル開発の中でも特に"チームメンバー間のコミュニケーション"を重視して開発を進める手法です。メンバーごとにプロダクトオーナー、開発者、スクラムマスターなどの役割が与えられ、チームとしてお互いの作業を支えながら開発を進めていきます。
より具体的には以下の5つのプロセスを経て、開発を進めます。
まずプロジェクト全体でやるべきタスクの一覧を元に優先度の高い要件を抽出し、大まかな計画を立案します。
このタスク一覧のことをプロダクトバックログと呼びます。
ここからいよいよスプリント(イテレーション)に入ります。スプリントの最初に当たるこのプロセスでは、スプリント内のタスク整理を実施します。プロダクトバックログから優先度の高い要件を選び、実現に向けたタスクを考えます。
この際、優先度や計画について、メンバー間で認識相違が無いことを確認しあうことが大切です。
スプリントプランニングを終えてから、チームでの開発が始まります。
日々の進捗確認のため、メンバー全員で毎日会話する時間を毎日15分ほど設けます。開発者同士が進捗確認のために行う時間で、開発者は必ず全員参加します。
メンバーの自律を促すため、デイリースクラムの司会進行役をチームメンバーで輪番制で入れ替えて行いうまくいったというケースもあります。
開発が一通り終わったところで、スプリントの成果のデモやレビューを行い、プロダクトゴールに対する進捗について話し合うのがこのプロセスです。
レビュー結果を受け、新たに見つかった要望・課題に基づき、プロダクトバックログを追加することもあります。
最後に、今回のスプリントの振り返りをメンバー全員で行います。
ふりかえりの際には、ビジネスフレームワークとして有名なKPT(Keep, Problem, Try)法などを用い、ロジカルに現状把握を行ったうえで今後の方針の見直しを行います。
また、開発内容についてのみではなく、コミュニケーションなど、スプリントの活動全体の振り返りを行い、次のスプリントに繋げていきます。
プロジェクトとしては製品の完成度が十分であると判断できるまで②~⑤のスプリントを反復し、製品の改良を重ねていきます。
このように、チームメンバー間のコミュニケーションを密にとって開発を進めていくという点が、スクラムの特徴です。
エクストリームプログラミング(Extreme Programming; XP)は、"変化に対する柔軟性を最も意識する" のが特徴の手法です。
「コミュニケーション」「シンプル」「フィードバック」「勇気(開発途中の仕様変更や設計の変更に立ち向かう勇気)」の4つを行動原則に、最小限のリソースで最大限の成果を出すことを第一に考えます。
実際に開発を進める上では、「ペアプログラミング」や「テスト駆動開発」といった手法を積極的に取り入れています。これらを通じてコードレビューやユニットテストなど、成果物に対するアクションを頻繁に行うことが可能となり、変更をすぐに開発内容へ反映できるのです。
これらの手法は少人数で進めていくことが前提となっているため、大規模な開発には向いていません。しかし、チームメンバーが少ない分意思疏通のスピードも早く、より変更を取り入れやすくなっています。
ユーザー機能駆動開発(Feature Driven Development; FDD)は、"ユーザーへの価値"を開発の中心に据える手法です。ユーザーが最も価値を置く機能から順に開発を行い、適切な間隔で開発・アップデートを繰り返していく、という進め方をします。"ユーザー第一主義"で開発を行い、2週間程度で製品のリリースを実施していくことが一般的です。
ユーザーを中心に考える手法のため、ニーズやビジネスモデルをしっかりと理解する必要はありますが、スクラムやXPに比べると大規模プロジェクトでも活用がしやすい、という点も特徴です。
これまでアジャイル開発の考え方や代表的な手法を紹介してきました。ここで改めてアジャイル開発のメリットをおさらいします。
アジャイル開発のメリットは、以下の2点です。
冒頭でもお伝えしましたが、まさに現代のニーズである、「より早く」「より柔軟に」という点に応えやすい開発手法です。
一方で、アジャイル開発にもデメリットがあります。
主なデメリットは以下の2つです。
アジャイル開発では、しっかりとしたプロジェクト管理の中にも柔軟性が求められます。プロジェクトの失敗を回避するためにも、プロジェクト管理をリードする体制も重要になります。
アジャイル開発は、「機動性」「スピード」を備えた手法であることから、開発途中での変更が生じやすいプロジェクトに向いています。
具体的には以下のような分野が、アジャイル開発に向いていると言えるでしょう。
アジャイル開発について、イメージはついたでしょうか?
初めて見る用語もあったかもしれませんが、実際に開発をどの手法で行うかを考える上で、少しでも参考になれば嬉しいです。
また、プロジェクトを進める上では、どの手法においても、進捗・スケジュール・タスク管理は大切な要素になります。
特にアジャイル開発では、事前に計画が決まっていないことから、プロジェクトの"現状"をしっかり把握することがより大切になります。
これらを効率的に管理するために、プロジェクト管理ツールを使うのも一つの選択肢です。リモートワークが普及する以前は、スプリントバックログを付箋に書いて模造紙に張り付けたり、ホワイトボードをカンバンボードに見立てて作業の優先度を可視化するチームが多かったのですが、現在アジャイル開発を支援するツールがたくさん出ています。Ricksoftが扱うアトラシアン製のJira Software(ジラ・ソフトウェア)は、「プロダクトバックログ」の優先度順に並べそのままスプリントバックログに流し込みができるなど、スクラム開発に便利な機能が多数搭載されています。そのほか、社内Wikiとしても振り返りツールとしても使えるコラボレーションツール“Confluence”と合わせて使うとより効果的にプロジェクトを推進することができます。
各プロジェクトに合ったプロジェクト管理ツールが見つかると思いますので、是非ご検討ください。
【監修】
リックソフト株式会社
小田倉晃