アジャイル開発とは?開発手法や開発の流れをわかりやすく解説
「アジャイル開発」という言葉を知っていても、具体的な内容までご存知ない方もいらっしゃると思います。アジャイル開発とは、従来型のウォーターフォール開発とは考え方や工程が異なるシステムやソフトウェアの開発手法です。この記事では、アジャイル開発の特徴やメリット・デメリット、開発手法などについて解説しています。ぜひともご確認ください。
-
アジャイル開発とは
アジャイル開発(アジャイルソフトウェア開発)とは、システムやソフトウェアの開発手法のひとつです。アジャイル【agile】とは英語で「機敏な」、「頭の回転が速い」という意味の単語で、企業や案件にもよりますが、1〜4週間あるいは2〜3ヵ月の短いスパンでシステムやソフトウェアをリリースします。期間内には「イテレーション」というサイクルを繰り返し、ユーザーの反応やフィードバック、開発中に気付いたことなどを次の開発サイクルで着手し、段階を追ってプロジェクトを完成に近づけていく手法です。
他の特徴としては、システムやソフトウェアで必要になる機能を分割し、優先順位の高いものから開発・リリースすることができる、開発チームの成長やプロセスの改善を促すことができる、などがあります。
また、アジャイル開発の考え方は、2001年に米国ユタ州にソフトウェア開発者17名が集まり、「アジャイルソフトウェア開発宣言」というマインドセットを公開したことから広まっていきました。
※参考:アジャイルソフトウェア開発宣言
アジャイルソフトウェア開発宣言は、従来の開発手法を尊重しつつ、「個人との対話」、「動くソフトウェア」、「顧客との協調」、「変化への対応」の4つを重視しています。また、これらのマインドセットを実現するための原則や取り組み姿勢について書かれた「アジャイル宣言の背後にある原則」というものもあります。
※参考:アジャイル宣言の背後にある原則
アジャイル開発を無事に遂行するためには、「アジャイルソフトウェア開発宣言」と「アジャイル宣言の背後にある原則」について、誤解のないしっかりした理解が必要であるとIPA(独立行政法人 情報処理推進機構)が提唱しています。下記出典の資料では、それらの点についてわかりやすく解説されています。気になった方はぜひともご一読ください。
-
ウォーターフォール開発とは
ウォーターフォール開発とは、システム開発の工程を複数に分割し、上から下(上流工程から下流工程)へと、ウォーターフォール(滝、落水)のようにシステム開発を進めていく手法です。一般的な工程は以下のようになっています。
①要件定義
②基本設計
③詳細設計
④開発(プログラミングや実装ともいわれる)
⑤テスト
⑥リリース
⑦運用・保守
ウォーターフォール開発では、①〜③までの上流工程と呼ばれる部分が特に重要となり、なかでも①要件定義はその後の開発を左右するものとなっているため、厳格に定められます。プロジェクトの開発期間は半年〜数年に渡ることもあり、一般的にアジャイル開発よりもシステムやソフトウェア開発に時間を要します。
また、ウォーターフォール開発は、1970年代に誕生し現在でも利用されている、歴史のある開発手法となっています。ウォーターフォール開発の各工程の説明は、下記関連記事にある「システムエンジニア(SE)とは?」の【目次|2.1 システム開発の主な流れ】をご確認ください。また、要件定義についてもまとめている記事がありますので、気になった方はそちらもご一読ください。
関連記事:システムエンジニア(SE)とは?仕事内容・プログラマーとの違いや平均年収などをご紹介
-
アジャイル開発が向いている場合
アジャイル開発は、開発をするうえで価値のある、必要最低限の仕様や設計、計画などしか定めず、柔軟で素早いサイクルの開発を続けていきます。そのため、素早いリリースが求められる場合や開発段階で仕様変更が予想される場合、開発を通してシステムやソフトウェアの内容を深めていきたい場合などに向いています。
それに対してウォーターフォール開発は、開発途中に仕様変更をすると費用の増加や開発期間の延伸につながるため、アジャイル開発とは向いているシステムやソフトウェアの開発が異なります。具体的には、既存システムのリプレースや管理系システムなど、仕様変更の可能性が低く、厳格な仕様や設計などが求められる場合で利用されます。
アジャイル開発は近年注目をされている開発手法ではありますが、ウォーターフォール開発より一概に優れているものではなく、開発物によって適した手法が異なると覚えておきましょう。
-
アジャイル開発の流れ
アジャイル開発で重要な用語となる、「ユーザーストーリー」と「イテレーション」について説明し、一般的な開発の流れを解説します。
-
ユーザーストーリー
ユーザーストーリーとは、ウォーターフォール開発の要件定義に相当する概念で、「開発するシステムやソフトウェアがユーザーにどのような価値をもたらすか」をまとめたものです。「ペルソナ(ユーザーの仮想的な人物像)を想定」し、「どのような目的で」、「何を達成したいのか」を端的に示します。
また、ユーザーストーリーの決定には、「3C」(Card:カード、Conversation:会話、Confirmation:確認)と「INVEST」(Independent:独立、Negotiable:交渉可能、Valuable:価値がある、 Estimatable:見積もり可能、 Small:小さい 、Testable:テスト可能)という作成方法や原則があります。ユーザーストーリーは、プロジェクト参加者であれば誰でも作成可能ですが、一般的にはプロダクトオーナーやプロジェクトマネージャーが作成します。
-
イテレーション
イテレーション【iteration】は英語で「繰り返し」、「反復」という意味の単語で、アジャイル開発では、「計画」、「設計」、「実装」、「テスト」(「リリース」、「改善」を含む場合もある)の工程を繰り返して開発を進めることです。一般的にイテレーションは1〜4週間で設定され、「計画」から「テスト」までの工程を経たあとにリリースし、ユーザーの反応やフィードバック、開発中に気付いたことなどを次のイテレーションに反映させ、イテレーションごとに機能追加や改善を繰り返していきます。
イメージとしては、ビジネスなどでよく説明される、「PDCAサイクル」(Plan:計画、Do:実行、Check:測定|評価、Action:対策|改善、を繰り返すミッション達成方法)に近いものがあります。
-
基本的なアジャイル開発の流れ
アジャイル開発の流れに厳格な決まりや規範はありません。また、詳しくは後述しますが、アジャイル開発のなかにもスクラムやユーザー機能駆動開発(FDD)といった手法が存在します。しかし、どちらの手法も短い開発サイクルを繰り返すことに変わりはありません。企業や案件によって詳細は異なりますが、基本的なアジャイル開発の流れは以下のようになります。
①導入テーマの決定
②チーム結成
③優先順位やスケジュールの決定
④イテレーション
⑤上記を繰り返し、プロダクトの完成
また、アジャイル開発の手法によって重視するものが変化します。しかし、アジャイル開発の手法に共通するものとして、「仕様変更を許容する柔軟な開発」は変わらないものとなっており、その点においてウォーターフォール開発とは考え方が異なります。
-
アジャイル開発のメリット
アジャイル開発のメリットを3つお伝えします。
-
開発スピードが速い
上述したように、アジャイル開発は1〜4週間、2〜3ヵ月の期間で開発をおこないます。優先順位の高い機能を決定し、機能ごとにリリースが可能なため、ウォーターフォール開発に比べてシステムやソフトウェアを早くユーザーに届けることができます。
-
柔軟な対応が可能
アジャイル開発では、優先順位の高い機能から実装し開発サイクルを繰り返していきます。そのため、プロダクトオーナーの要望変更やフィードバックなどで改善点などが見つかり、急な仕様変更があっても次のサイクルで柔軟に対応していくことができます。
-
開発者チームの成長を促す
アジャイル開発では、チーム同士で協力し、一丸となって開発を進めていきます。また、ウォーターフォール開発のようにエンジニアの役割を明確に分けていないため、エンジニアはさまざまな業務を担当することになります。専門知識以外の業務に触れ、チームで連携を取りながら作業を進めるため、開発者チームの技術的能力はもとよりチームワークやマネジメント能力も磨かれていきます。
-
アジャイル開発のデメリット
アジャイル開発のデメリットを2つお伝えします。
-
スケジュール管理が難しい
アジャイル開発は機能ごとにリリースをしていき、柔軟な対応を視野に入れた開発手法となっているため、スケジュール管理が難しくなる傾向があります。また、規模の大きい開発ではチームごとに開発が進むため、システムやソフトウェアの全体像がつかみにくく、この点もしっかりとコントロールする必要があります。
-
方向性のずれが生じやすい
アジャイル開発の柔軟性の高さは方向性がずれやすいことにもつながります。要望変更やフィードバックなどを反映させた結果として、システムやソフトウェアとしての整合性がとれなくなる危険性を孕んでいます。
-
アジャイル開発の代表的な手法
アジャイル開発の代表的な手法を5つお伝えします。
-
スクラム
スクラムはアジャイル開発で代表的な手法のひとつです。1〜4週間で開発工程を繰り返す「スプリント」というプロセスを採り、ラグビーのスクラムのようにチームで団結し、開発を進めていきます。
スプリントでは、「スプリントプランニング」、「デイリースクラム」「スプリントレビュー」、「スプリント・レトロスペクティブ」などの工程があり、チームでのコミュニケーションが大切になります。スクラム開発についての詳細は関連記事をご覧ください。また、下記出典にあるIPAの資料ではスクラムを例にしたアジャイル開発の進め方が説明されています。
関連記事:スクラム開発ってなに?アジャイル開発との違いや特徴を解説
※参考:アジャイル開発の進め方
-
ユーザー機能駆動開発(FDD)
ユーザー機能駆動開発(FDD|Feature Driven Development)とは、ユーザー目線で価値のある機能の開発を重視した手法です。システムやソフトウェアの全体像を作成し、Feature(フィーチャー|機能)ごとにチームを分けて開発するため大規模開発にも対応しやすく、ユーザー目線を大切にするため、高品質な開発がしやすい手法といわれています。また、開発サイクルの期間が1日〜2週間程度と短いことも大きな特徴です。
-
エクストリーム・プログラミング(XP)
エクストリーム・プログラミング(XP|Extreme Programing)はアジャイル開発で最も柔軟な対応ができると言われている手法です。エクストリーム・プログラミングでは、顧客が開発チームに参加あるいは密に連携して、システムやソフトウェアの完成を目指します。
また、エクストリーム・プログラミングには「5つの価値基準」と「19のプラクティス」という開発時に重視するべき規範が定義されており、2名のプログラマーが1組になり、1人はプログラミング、もう1人はコードのチェックなどをおこなう「ペアプログラミング」やテストをしてから実装する「テスト駆動開発」などの特徴的な工程が入ります。
-
リーンソフトウェア開発
リーンソフトウェア開発(Lean Software Development)とは、TOYOTA自動車の「トヨタ生産方式」から派生した「リーン生産方式」をソフトウェア開発に応用したものです。リーンソフトウェア開発では、「7つの原則」と「22の思考ツール」を重視し、「ムダをなくす」、「決定を遅らせる」などの特徴があります。また、リーンソフトウェア開発のカテゴリ内にある、ひとつの手法がアジャイル開発です。アジャイル開発の手法としてリーンソフトウェア開発があるわけではないので注意しましょう。
-
適応的ソフトウェア開発
適応型ソフトウェア開発(Adaptive Software Development)とは、プロダクトの開発における継続的な仕様変更に適応するための手法です。思索、協調、学習のサイクルを回して開発をしていくことが特徴で、ユーザーのフィードバックやレビューを大切にし、複雑なソフトウェア開発に強い手法になっています。
-
まとめ
アジャイル開発は近年注目を集めている手法であり、仕様変更が起こりやすいWEBサービスやWEBアプリケーション、スマートフォンアプリなどと相性のよい手法です。また、アジャイル開発の手法を組み合わせて開発をおこなうこともあり、そういった面でもプロジェクトによって柔軟に対応できる魅力があります。
アジャイル開発を選択肢に入れることで、より効率的な開発が可能になるでしょう。また、新しくアジャイル開発を取り入れる際は、「アジャイルソフトウェア開発宣言」と「アジャイル宣言の背後にある原則」をしっかりと勉強することをおすすめします。下記出典のIPAの資料をぜひともご参考ください。