アジャイル開発手法6選:スクラムからDSDMまで!選び方と組み合わせも解説
- 1. アジャイル開発とは?
- 2. アジャイル開発とウォーターフォール開発
- 3. アジャイル開発のメリット
- 4. アジャイル開発のデメリット
- 5. アジャイル開発に関連する用語
- 6. アジャイル開発の手法
- 7. アジャイル開発の進め方
- 8. アジャイル開発について学習する方法
- 9. アジャイル開発を推進するためには?
- 10. まとめ
アジャイル開発とは、素早く・短いスパンでシステム開発を行う手法です。
長年、システム開発業務に携わっているエンジニアの多くは、「ウォーターフォール開発」の方が、馴染みが強いかもしれません。
しかし昨今、DXの推進の需要増に伴い、アジャイル開発の採用率が上がりつつあります。
本記事では、アジャイル開発の特徴やウォーターフォール開発との違い、メリット・デメリット、進め方や推進のポイントなどについて詳しく解説していきます。
1.アジャイル開発とは?
アジャイルとは、日本語に直訳すると「機敏な」や「素早い」といった意味を持ちます。
アジャイル開発は、その直訳通り、「素早く・短いスパンでソフトウェアをリリースし続ける開発手法」です。
短い期間で開発を行いリリースすることで、より早く利用者にソフトウェアを利用してもらえます。
そうすることで、より早くフィードバックを受けることも可能です。
そしてそのフィードバックをいち早く取り込み、システムの改善をスピーディーに行えます。
アジャイル開発の目的は、柔軟に開発を進めることで、提供するプロダクトの価値を最大限に高めながら、より高速にビジネス展開を行うことです。
2. アジャイル開発とウォーターフォール開発
アジャイル開発と対比されやすいのが、「ウォーターフォール開発」です。
この章では、アジャイル開発とウォーターフォール開発の違いについて解説します。
①アジャイル開発と対義にある「ウォーターフォール開発」
これまでのシステム開発の現場では、多くの大手ベンダーがソフトウェア開発手法として採用してきたのが「ウォーターフォール開発」です。
ウォーターフォール開発は、ソフトウェアのリリースがゴールである点はアジャイル開発と同じですが、手法は真逆です。
ウォーターフォール開発では、企画からリリースまでに実施する内容を「工程」として分割し、順次実施していきます。
まず、大枠としての設計をすべて完了させてからプログラムの実装を行い、そのプログラムをテストします。
水が下に流れるように順次進んでいくことから、「ウォーターフォール(滝・落水)」という名前がついています。
ソフトウェア開発を「工程」に分割し、緻密なスケジュールを組んでその通りに開発を進めるため、完成までの見通しを立てやすいのが特徴です。
②アジャイル開発とウォーターフォール開発の違い
アジャイル開発とウォーターフォール開発の大きな違いは、「リリースするまでの期間」にあります。
一般的に、ウォーターフォール開発では「すべての機能を作り切ったうえでリリースする」のが通例です。
そのため、ウォーターフォール開発では数か月から数年の時間をかけて大きなソフトウェアをリリースします。
一方で、アジャイル開発は長くても一か月程度で、新しいバージョンをリリースしていきます。
ゲームで例えると、ウォーターフォール開発は数年かけて開発されたコンシューマ機向けゲーム、アジャイルは毎月のようにイベントや新機能がリリースされるスマホゲームのようなものであると考えると良いでしょう。
アジャイル開発は設計書を作らない?
稀に、「アジャイル開発だから設計書は作らないのですか」という質問を受けることがあります。
この考えは大きな間違いであるため注意しましょう。
たしかに、アジャイル開発においては、「設計書(仕様書)」よりも「動くプログラム」を重視します。
とはいえ、「どんな挙動をするプログラムなのか」という仕様をチームで共有する必要があります。
設計書を書かずにプログラムをし始める場合もありますが、その場合でもプログラムをリバースエンジニアリングして仕様書として残します。
いずれにせよ、「仕様」について残しておかないと、品質が非常に低いソフトウェアが出来上がることになります。
アジャイル開発であっても、何かしらの形でドキュメントは作成するものと考えておきましょう。
③アジャイル開発とウォーターフォール開発の向き・不向き
常にアジャイル開発のほうが優れているとは言い切れません。
アジャイル開発とウォーターフォール開発には、それぞれ向き不向きがあります。
項目 | アジャイル開発 | ウォーターフォール開発 |
継続的なリリース | ○ | × |
柔軟性 | ○ | × |
見積の立てやすさ | △ | ○ |
個人スキルの影響度 | ○ | △ |
向いている開発 | 小~中規模 | 大規模 |
3.アジャイル開発のメリット
アジャイル開発のメリットは、製品を提供する顧客に合わせ、柔軟にソフトウェアを進化させ続けられる点です。
ウォーターフォール開発の場合、ソフトウェアが納品されるまで顧客はそのシステムに触れることができません。
長い年月をかけて開発したソフトウェアは、リリースした時点ではすでに「古いもの」になっている可能性もあります。
特に不特定多数が使用するようなソフトウェアを開発するのであれば、1日でも早くリリースすることで、アーリーアダプター(流行に敏感な層)の目に留まりやすくなります。
そうしたユーザーの意見や要望を柔軟に取り入れることで、ソフトウェアの品質を高められます。
4.アジャイル開発のデメリット
一方で、アジャイル開発にはメリットばかりとは言い切れません。
・発注する時点で要件がほぼ決定している
・短いスパンでのリリースが不要である
・費用をあらかじめ見積もる必要がある
このような特徴をもつ一括受注のソフトウェア開発プロジェクトにおいて、アジャイルのメリットは非常に少ないと言えます。
そのため、多くの開発ベンダーでは今でもウォーターフォール開発が主流です。
5.アジャイル開発に関連する用語
ここからは、アジャイル開発を始めるにあたり覚えておくべき用語を解説します。
①ユーザーストーリー
ユーザーストーリーとは、ユーザーがソフトウェアを使用する際の操作や、それに対する影響や挙動です。
ウォーターフォール開発における「要件定義」に相当しますが、ひとつの「要件」をユーザー目線で記述していくという違いがあります。
ユーザーストーリーは、「誰がどんな理由で何をした結果、ソフトウェアが何をしてくれるか」といったように、ユーザー目線でどのようにソフトウェアを利用するのかを定義していきます。
②イテレーション(またはスプリント)
アジャイル開発においては、プロジェクトを一定の短い期間で区切り、その中で開発を進めます。
この期間は、1週間から長くても4週間(一か月)程度で設定します。
この期間をイテレーション(またはスプリント)と呼びます。
このイテレーションごとにソフトウェアをリリースすることで、顧客へのいち早い価値提供を実現するだけでなく、素早いフィードバックを得ることも可能です。
ひとつのイテレーションが終わったタイミングで振り返りを行い、次のイテレーションで開発する内容を決定します。
次に開発する新機能や顧客からのフィードバックを、プロジェクトにタイムリーに取り込むことで、より素早い価値提供を目指すのがアジャイル開発の基本です。
③ベロシティ
ベロシティは、アジャイル開発における開発速度を指し、イテレーション内で実施できる作業量を表します。
ウォーターフォール開発における「工数」とほぼ同義です。
ただし、ウォーターフォールでは「1人日」という単位で考えますが、ベロシティの場合には「作業量」をベースに考えます。
アジャイル開発においては、メンバー全員が同じ生産性を持っているとは考えず、「チームとしてどの程度の生産性があるか」という指標で考えます。
イテレーションを繰り返す中で、チームとしての生産性を計測するとともにメンバーの成長も「見える化」されていきます。
メンバーのスキルアップがチームとしてのベロシティ向上に直結するため、ベロシティの計測は非常に重要であると言えます。
6.アジャイル開発の手法
プロセスがしっかりと定義されているウォーターフォール開発と異なり、アジャイル開発はいわゆる「概念」であり、実際には様々な手法が存在します。
ここでは、アジャイル開発の中でも有名な手法を3つ紹介します。
①スクラム
スクラムは、アジャイル開発の手法の中でも最も有名な手法であり、アジャイルといえばスクラム、と言っても過言でないほど浸透している方法です。
スクラム開発では、ひとつのイテレーションを「スプリント」と呼びます。
スプリントとは「短距離走」や「全力疾走」の意味をもつ英単語で、その名の通り開発メンバーが短期間に全力で開発を進めることになります。
また、開発メンバーのほかに「プロダクトオーナー」と「スクラムマスター」を配置することもスクラムの大きな特徴です。
プロダクトオーナーはビジネス目標を設定するのが主な役割です。ひとつのスプリント内で開発する内容を決定し、「スプリントバックログ」にまとめます。
開発メンバーは、チームとしてスプリントバックログの内容をもとに開発を進めます。
開発を進めるうえで、開発メンバーのサポートをするのがスクラムマスターです。
スクラムマスターは、いわゆる「プロジェクトリーダー」や「プロジェクトマネージャ」とは異なり、各メンバーがスクラム開発の正しい手法に沿って開発を進めているかチェックしたり、問題発生時にメンバーが解決できるようにサポートしたりすることが主な役割です。
スクラム開発では、このように厳格に役割を分けた上で開発を進めるだけでなく、毎日のスクラムミーティングやスプリント終了時の振り返りが重要となります。
スクラムミーティングや振り返りを通して、メンバー全員のスキルアップを目指します。
②エクストリーム・プログラミング(XP)
エクストリーム・プログラミング(XP:eXtreme Programming)はスクラム開発と異なり、綿密な計画を立てずに臨機応変に進めることが大きな特徴です。
エクストリームは直訳すると「極端・過激」という意味をもちます。
XPもその意味を踏襲しており、シンプルかつ明快なコードを以て開発を進めることが求められており、アジャイル開発の中でもプログラム=ソースコードに大きな価値がおかれています。
XPにはいくつかのプラクティスが存在し、それらに従って開発を進めます。
・ペアプログラミング
・TDD(テスト駆動開発)
・リファクタリング
また、「小さなリリース」と「コミュニケーション」が非常に重要です。
綿密な計画こそ立てないからこそ、顧客やプロジェクトマネージャと密なコミュニケーションが重要であり、開発のかじ取りを間違えないためにも、「機能が完成したらすぐにリリースする」といったように細かなリリースを続けていくことも大きなポイントです。
③ユーザー機能駆動開発(FDD)
ユーザー機能駆動開発(FDD:Feature Driven Development)は、その名の通りユーザーの目線に立った開発を目指す開発手法です。
FDDで重要になるのがFeature、すなわち「ユーザーストーリー」です。
ユーザーの目線に立った際に重要である機能的な価値を「Feature」として定義し、それを起点として開発を進めます。
FDDのメリットは、システムの機能要件が明確にできる点であり、機能要件が明確になることで、ユーザー目線における品質の確保を狙えます。
ただし、このFeatureを正しく設定には、対象となる機能に関する業務知識や高いモデリング能力が必要です。
そのため、開発メンバー全員にある程度の知識やスキルが求められる点には注意が必要です。
7.アジャイル開発の進め方
アジャイル開発の手法を理解したところで、次はアジャイル開発の進め方を解説します。
①リリース計画
「どの機能をどのタイミングでリリースするか」という計画を策定します。
ただし、前述のとおりアジャイル開発は柔軟性を重視した開発手法であり、後から変更するという可能性を考える必要があります。
そのため、「厳密な計画」ではなく、「おおまかな仕様・機能をいつまでにリリースする」といった計画を策定することになります。
そのほか、「毎月のリリースにはバグ修正を含める」「半年ごとのリリースには新機能を含める」といったルール決めをするプロダクトも存在します。
②イテレーション(スプリント)
リリース計画を立てたら、その計画に向かってイテレーションを実施します。
イテレーションが終了したら、振り返りを行い、次のイテレーションで実施する内容を決定します。
リリース計画と大きく外れないかを確認の上、リリース計画の修正が必要であれば都度修正していきます。
8.アジャイル開発について学習する方法
①書籍で学習する
アジャイル開発の基本的な知識であれば、書籍でも十分に学習可能です。
アジャイル開発の手法を紹介した書籍を3冊紹介します。
いちばんやさしいアジャイル開発の教本 人気講師が教えるDXを支える開発手法
アジャイルに関する基本的な知識を学べる一冊です。
主に管理者向けの書籍で、アジャイル開発に関する基礎知識や実際の進め方が紹介されています。
本書籍はある程度開発経験のあるエンジニア向けの書籍です。
アジャイル開発を実際に始める際に必要な知識や心構えを学ぶことが可能です。
SCRUM BOOT CAMP THE BOOK【増補改訂版】 スクラムチームではじめるアジャイル開発
アジャイル開発の中でも、採用数の多いスクラム開発に特化した入門書です。
スクラム開発の進め方や各ロールの考え方が挿絵をふんだんに使用して解説されています。
これからスクラム開発を始めようとするチームにおすすめの一冊です。
②eラーニングサービスで学習する
アジャイル開発は、ただ進め方を覚えただけではなく、実践してはじめて身につきます。実際、書籍だけでは足りない点も多く存在します。
そのため、動画形式のeラーニングや、実践的な解説が含まれる講座を受講することでさらに知識を深めることが可能です。
とはいえ、書籍と同じ内容をしゃべっている動画だと費用対効果はあまり高くないかもしれません。
アジャイル開発で最も必要なのはチームワークであり、人との会話が重要なポイントのひとつだからです。
普段のミーティングや振り返りといった、コミュニケーションの方法も動画で分かりやすく解説している講座を選択すると良いでしょう。
9.アジャイル開発を推進するためには?
それでは、実際にアジャイル開発を推進するために必要な事項を解説します。
これらのスキルを備えることで、アジャイル開発をスムーズに進めることが可能です。
①アジャイル開発の理解
特にウォーターフォール開発に慣れた方であるほど、アジャイル開発の手法に戸惑うことが多いことです。
アジャイル開発を正しく理解できていない場合、「なんちゃってアジャイル開発」となり、結果として品質の悪いソフトウェアが完成した事例も多く存在します。
顧客に最高のソフトウェアを適切なタイミングで提供するためにも、アジャイル開発の進め方を正しく理解して導入することが必要不可欠です。
②プログラミング技術
アジャイル開発を進める上では、メンバー個々のプログラミングスキルが非常に重要です。
もちろん、全員のスキルが最高潮である必要はありませんが、個々のメンバーが自立して行動するために最低限のプログラミングスキルが必要です。
なお、ここでの「プログラミング技術」とは、「プログラミング言語を使えること」ではなくいわゆる「プログラミング的思考」を指します。
設計書通りにプログラミングするだけではなく、さらに効率よくプログラミングするための方法を常に模索してスキルアップに励むことが重要です。
③チームマネジメントスキル
ウォーターフォール開発では、いわゆる「縦割り」の開発をすることが多いため、マネジメント層に対して重視されるのは「スケジュール」や「人員配置」といったプロジェクト管理スキルです。
一方で、アジャイル開発ではチームメンバー全員が一丸となってプロダクトを作り上げることを目的として動きますので、そのチームがうまく動くようなマネジメントスキルがより重視されます。
具体的には、チームビルディングやメンバーに対する1on1などが挙げられます。
もちろん、ウォーターフォール開発ではこのチームマネジメントスキルは必要ですし、アジャイル開発においてもプロジェクト管理は必要です。
重要視されるのがどちらか、という違いしかないことに注意しましょう。
④ヒューマンスキル
アジャイル開発においては、チームが一丸となってプロジェクトを推進する以上個々のヒューマンスキルがより重要視されます。
前述のとおり、アジャイル開発の手法は複数存在しますが、いずれにおいてもメンバー個々のスキルがプロジェクト成功のカギを握ります。
アジャイル開発においては、「受け身」ではなく、「自発的に動ける」人材になることが必要不可欠です。
10.まとめ
いわゆる「受託開発」が多い日本のIT業界では、ほとんどのプロジェクトがウォーターフォール型で開発を進めています。
アジャイル開発を採用しているプロジェクトはあまり多くない、というのが現状です。
そのため、アジャイル開発を経験しているエンジニアは少なく、採用に苦労することでしょう。
アジャイル開発の重要なポイントは「チームワーク」です。
すでにウォーターフォール型の開発でチームワークが発揮できているのであれば、そのメンバーを育成することでスムーズにアジャイル開発を推進することも可能です。
トレノケートでは、今後アジャイル開発を推進できる人材を教育するカリキュラムを提供する予定です。
またエンジニア人材育成のための「伴走メンタリングサービス」も提供しています。
即戦力となる人材育成にお役立ててください。
※掲載された社名、製品名は、各社の商標及び登録商標です。