アジャイル開発とは?プロジェクト推進からチームビルディング、見積もりのコツまでを完全解説
![](https://thinkit.co.jp/sites/default/files/styles/main_image_730x/public/main_images/22032_main.jpg?itok=scvb4S2m)
あらゆる業界で変化のスピードが速まり複雑化している現代においては、将来を正しく予想し、それに基づき計画を立ててプロダクトを開発していくことが難しくなってきています。場合によっては計画段階で見込んでいた条件や状況が、実行段階には変化していることもありえます。そういったケースにも臨機応変に対応しやすいのが「アジャイル開発」です。この記事では、アジャイル開発について詳しく解説します。
アジャイル開発とは?
agile(アジャイル)には、「機敏な」「素早い」「迅速な」などの意味があります。アジャイル開発は、その名の通り、ソフトウェアの開発をスピーディーに、そして柔軟に行うことができる手法のひとつ。要求や要件定義、計画、設計、開発、テストといった一連の開発工程を短期間で反復的に繰り返し、その都度ユーザーからのフィードバックなどを反映させてプロダクトを完成させていくのが大きな特徴です。
機能単位で開発をし、それらを取りまとめてひとつの大きなシステムを構築する仕組みなので、優先度の高い要件から開発を進めていくことが可能です。また仕様変更に強く、必要に応じてブラッシュアップできる点も魅力です。サービスインまでの期間を短縮できる開発方法と言えるでしょう。
アジャイル開発の流れ
ここでは、基本的なアジャイル開発の流れを大きく4つに分けてご説明します。アジャイル開発は、「アジャイルソフトウェア開発宣言」(アジャイルマニフェスト)の概念に則った形で進められるのが基本です。
1.開発チームの組成
プロダクト開発に必要なスキルを持った開発エンジニア、プロジェクトマネージャー、テストエンジニアなどで比較的小規模なチームを構築。プロダクトによっては、さらにデザイナーやライターが加わることもあります。
2.機能や業務を切り分ける
アジャイル開発は複数回の開発、リリースを繰り返すことで完成させていきます。そのため、まずプロジェクトを1~4週間程度の期間で完了できる規模に分割し、その後、切り分けられた機能や業務の重要度に応じて優先順位を付け、優先順位の高いものから着手していきます。
3.イテレーション
それぞれのテーマに合わせた要件を定義し、設計→開発→テスト→顧客からのフィードバックを基に改善するという流れのサイクルをイテレーションと呼び、2で定めた期間内に繰り返しながらその都度リリースしていきます。
4.次に取り組むべきテーマの検討
2で決定した優先順位、リリースに対するフィードバックや、開発のなかで気づいたことなどを含め、次に実施する開発テーマを決めていきます。その後、決まった次のテーマに沿って3~4を繰り返していき、徐々にプロダクトを完成形に近づけていく流れです。
アジャイル開発の種類
アジャイル開発と呼ばれる手法のなかにも、いくつかの手法があります。ここでは、スクラム、カンバン、エクストリーム・プログラミング(XP)、ユーザー機能駆動開発(FDD)の4つについて見ていきましょう。
スクラム
「スクラム」は代表的なアジャイル開発の手法で、チームで効率的に開発を進めることができる軽量なフレームワークです。「スクラムガイド」と呼ばれる公式ガイドブックが存在しており、このガイドで定義されたルールや価値観、チーム、イベントなどに沿って進めていきます。
カンバン
「カンバン」はビジュアルを重視してプロジェクトを開発・管理する手法のこと。視覚的なプロジェクトの管理方法になるため、チームが現在どのプロセスにいて、次に何をするべきか把握しやすい点が特徴です。
エクストリーム・プログラミング(XP)
「エクストリーム・プログラミング」(eXtreme Programming、XP)は、技術面に重きを置いたプログラマーを中心とする開発手法です。XPでは、コミュニケーション、シンプル、フィードバック、勇気、尊重という5つの価値が提唱されており、開発する上ではこれらを重要なポイントと考えています。
ユーザー機能駆動開発(FDD)
「ユーザー機能駆動開発」(Feature Driven Development、FDD)は、ユーザー目線で価値のある機能を中心に開発を進めていく手法。ソフトウェア工学に基づく「ベストプラクティス」を組み合わせることで、全体としてまとまりのあるものにしていきます。
アジャイル開発が向いているプロジェクト
アジャイル開発をスムーズに進めていくには、その特徴を理解し、適切なプロジェクトで採用していくことが大切です。では、アジャイル開発はどのようなプロジェクトに向いているのでしょうか。
常に新しい機能や改善点を加えてリリースし続けるプロジェクト
アジャイル開発は、ユーザーからのフィードバックや、開発を通じて得た結果を基に改善を繰り返していく手法です。そのため、一度のサービスリリースで終わりではなく、新しい機能の実装や改善を継続的に繰り返していくプロジェクトに適しています。
クライアント側もチームの一員として参画するプロジェクト
アジャイル開発はイテレーションが終わるたびにチーム内で振り返りをするため、発注側のリアルタイムな優先度や要求の変化に応じ、迅速かつ柔軟な開発が可能です。そのため、発注側が受注側に開発を丸投げするのではなく、共にワンチームとして取り組むプロジェクトに向いています。
アジャイル開発とDX
デジタルトランスフォーメーション(Digital Transformation、DX)とは、デジタル化や新技術を導入することでビジネスに変革をもたらし、より良いものにしていく活動です。DXは試行錯誤を繰り返して進めるため、実際に導入してみてからわかることが多く、途中で仕様が変更になることも少なくありません。
その点、イテレーションを繰り返しながらプロダクトを作っていくアジャイル開発であれば、現場やユーザーの声を柔軟に取り入れることが可能です。また、機能単位に分割し、優先順位の高いものからリリースできるため、最低限の機能からでもリリースできます。
アジャイル開発とウォーターフォール開発の違い
従来のシステム開発でよく採用されてきたのが「ウォーターフォール開発」です。ウォーターフォール開発は要件定義からリリースまで、すべてのステップが段階を踏んで進んでいきます。そのため、基本的に途中での仕様変更や後戻りができません。そのため最初の要件定義が非常に重要になってくる開発手法と言えるでしょう。
ウォーターフォール開発は要件定義や全体の機能設計をしっかりと固めてから開発に着手するため、開始までに時間がかかる傾向があります。その反面、進行計画に余裕を持たせることが多いため、予算組みがしやすい、メンバーのアサイン計画が立てやすいのがメリットです。
なお、ウォーターフォール開発がアジャイル開発と最も大きく異なる点は、開発途中で仕様の変更や追加が困難な点です。仕様の抜け・漏れや、発注側から要件追加の要求があった場合には、ひとつ手前の工程から見直しが必要になるため、費用の追加が必要になったり、開発期間が延びたりするケースが少なくありません。
アジャイル開発の主な手法「スクラム」とは
アジャイル開発には複数の手法がありますが、主に使われる「スクラム」に焦点を当てて解説します。
スクラムとは、複雑なプロダクトを開発・維持するためのフレームワークです。プロダクトオーナー・開発チーム・スクラムマスターで構成されるチームを組み、4つのイベントに参加して、3つの成果物を作成するのが全体の流れ。「スプリント」と呼ばれる1ヶ月以内のサイクルで計画と開発を何度も繰り返していき、少しずつプロダクトを完成させていきます。
スクラムの4つのイベント
スクラムには、以下4つのイベントがあります。
・スプリントプランニング
スプリントの最初にチーム全員で必ず行うイベントです。プロダクトのゴール設定(スプリントゴール)、このスプリントで何ができるのか、選択した作業をどのように成し遂げるのかなどを決め、プロダクトバックログ、スプリントバックログなどを作成します。
・デイリースクラム
スプリント期間中に毎日同じ時間、同じ場所で行うイベントです。開発者が各自の進捗や課題を共有したり、状況に応じて作業の見直しを行ったりします。
・スプリントレビュー
スプリントで作成した物がプロダクトのゴールをどの程度達成したのか、または達成していないのかなどを明らかにし、レビューの結果に応じて今後の調整などをしていくイベントです。
・スプリントレトロスペクティブ
スプリント内最後のイベントです。チーム全員で振り返りを行い、次回以降のスプリントに向けた改善点や対策を作成します。
スクラムの3つの成果物
スクラムでは以下3つの成果物が作られます。
・プロダクトバックログ
プロダクトに必要なすべてのアイテム(プロダクトバックログアイテム:今後のリリースで実装するプロダクトのフィーチャ・機能・要求・要望・修正など)が並べられた一覧です。プロダクトバックログはプロダクトが存在する限り、変化し続けます。
・スプリントバックログ
成果物を作成するための作業計画。開発者が開発者のために作成するものであり、プロダクトバックログより詳細なものです。スプリントプランニングで作成されます。
・インクリメント
プロダクトゴールを達成するために作成された完成の定義を満たしている成果物です。過去に作成されたインクリメントを積み重ねていき、最終的にプロダクトが完成します。
アジャイル開発以外の開発手法
アジャイル開発以外に、どのような開発手法があるのでしょうか。代表的な開発手法について簡潔にご説明します。
反復型開発
アジャイル開発と同様に「分析→要件定義→設計→実装→テスト」という一連の工程を繰り返す開発手法です。ただし、アジャイルが「価値」に重きを置くのに対し、反復型開発は「計画」を重視します。
プロトタイプ開発
最初に製品をイメージできるよう、早い段階で簡単な試作機を作って全体の開発工数を減らす手法です。
スパイラル開発
小さい単位で設計、実装、テスト、プロトタイプを繰り返しながらゴールを目指す開発手法です。アジャイル開発に似ていますが、プロトタイプをユーザーに提供する方法が異なります。
リーン開発
工程からできる限り無駄を取り除いて開発する手法です。「構築・計測・学習」を繰り返しながら、必要最低限を提供して改善し、顧客満足度を高めていきます。
アジャイル開発のメリット・デメリット
開発手法を選ぶ際、プロジェクトにマッチした開発手法を選択することが重要です。では、アジャイル開発のメリットとデメリットには、それぞれどのようなものがあるのでしょうか。
メリット
優先順位の高い機能から開発およびリリースできるアジャイル開発の最大のメリットは「開発スピードが速い」という点です。また、プロジェクト全体を複数のイテレーションに分けて作業するため、システムの仕様を最初にカッチリと決めておく必要がありません。そのため「修正しやすい」「状況の変化に柔軟に対応できる」といったメリットもあります。
デメリット
アジャイル開発はイテレーションごとにスケジュールを設定し、その都度修正などを加えながら進めるため「全体のスケジュールが見えにくい」「納期が遅れがち」といった点がデメリットです。また、ユーザーとのコミュニケーションを重視するあまり場当たり的な開発に陥って「方向性がブレやすい」「正しい要求が導き出せない」といった状態に陥ることも考えられます。
アジャイル開発の費用/料金相場はいくら?
アジャイル開発を新たに採用しようとする場合、費用はどれくらいなのかという点が気になるところでしょう。
実は、アジャイル開発の場合、進めていく過程で追加の要件が発生することが多いため「おおよその見積もり金額」となるケースが少なくありません。また、プロダクトの規模や求める機能によって数百万~数千万まで幅があり、一概に相場を提示することは難しいのが現実です。
では、実際にどのように見積もりをするのか見ていきましょう。
まず、見積もりを出すためには、ベロシティの割り出しから行います。ベロシティは開発チームが一回のイテレーション(スプリント)でどれだけの作業を進めることができるかという指標のこと。ベロシティは開発会社によって異なり、過去の実績から算出することが多いです。
ベロシティを割り出したら、開発要件に併せて必要な各項目の工数を見積もっていきます。スクラム開発を採用した場合は、プロダクトバックログでリスト化されている項目が見積もりの対象です。この段階で必要な人員や工数、設計やテストまでの工程、期間などを決定。これらをベースにおおよその見積もり金額が算出されます。
アジャイル開発の場合、基本的な開発コストは「1イテレーションあたりのチーム単価×イテレーション数」です。ただし前述のように、アジャイル開発の場合は途中で要件が変更になったり増えたりすることも多いため、当初の見積もりと最終的な費用が異なるケースも少なくありません。
そういった不安を解消できるのが「準委任契約」です。準委託契約の場合、月額固定の開発になるため、おおよその枠組みだけ決めてプロジェクトをスタートさせても毎月のコストは変動しません。ゴールが確定していないプロジェクトの場合でもグロースを目指せる柔軟性の高さが魅力です。
さらに、開発に使用できる補助金制度もあるので、ぜひ調べてみてください。
アジャイル開発の関連用語
最後に、アジャイル開発でよく使われる基本的な関連用語をご紹介します。
イテレーション(スプリント)
アジャイル開発は「設計→開発→テスト→改善」という一連の工程を機能単位かつ短期間に複数回繰り返しながら進めますが、この開発サイクルを「イテレーション」または「スプリント」と呼びます。どちらも同じ意味ですが、主にイテレーションはXP(エクストリーム・プログラミング)開発で、スプリントはスクラム開発で使用される言葉です。
ベロシティ
ベロシティとは、開発チームが1回のイテレーション(スプリント)で完了した作業量や作業速度を表すための指標です。作業完了までに必要な見積もりを示す単位「ストーリーポイント」として数値化することにより、業務完了までの期間が予測できたり、スクラムの成長度合いを把握できたりします。
リリース計画
システムの方針を固めるため、何をいつまでに行うのかといった全体を管理するための仕様や要求を取りまとめる工程です。アジャイル開発は流動的なため常に更新が必要です。
ユーザーストーリー
アジャイル開発をする上で軸となる要件定義の代わりに使われる概念です。「誰が」「どんな目的で」「何をしたいのか」といった部分を、エンドユーザーにもわかりやすいように短い文章で書き示します。
まとめ
今回は、アジャイル開発について詳しく解説しました。アジャイル開発は変化の激しい昨今に適したソフトウェア開発手法になるため、多くの開発現場で採用されています。ただし、プロジェクトの特性や規模によっては従来のウォーターフォール開発の方が適しているケースもあるため、メリット、デメリットをよく理解して適切に選択することが大切です。