アジャイル開発とは?主流の開発手法「スクラム」もくわしく解説!

ソフトウェア開発を取り巻く環境は日々進化していますが、つねに効率の良い開発プロセスが課題となっています。

「アジャイル開発」は、2000年代に誕生し、現在では主流となっている開発手法です。アジャイル(Agile)とは「素早い」という意味を持ち、アジャイル開発では、ソフトウェアを開発する期間の短縮が期待できます。

この記事では、アジャイル開発の手法やポイント、ウォーターフォール開発との違いや注意点について紹介していきます。

アジャイルソフトウェア開発とは?

アジャイル開発は、システムやソフトウェア開発におけるプロジェクト開発手法の一つです。アジャイル開発の「アジャイル」は「素早い」という意味で、従来のウォーターフォール開発などよりも素早いという意味です。

「あらかじめ全工程にわたる計画を立て、それを実行する」という開発プロセスではなく、開発中に発生する様々な状況の変化に対応しながら開発を進めていく手法です。

アジャイル開発では、チームを組んで「要件定義→設計→開発→テスト→リリース(運用)」といった開発工程を、1つの機能を単位とした小さいサイクルで繰り返します。このような小さいサイクルを繰り返すことで、個々の機能の開発が独立して完結するため、開発期間中の仕様変更の発生に強く、リスクを最小化させることが可能です。

この小さなサイクルの繰り返しを、アジャイル開発では「イテレーション(反復)」と呼んでいます。イテレーションは1週間から4週間ごとが一般的であり、イテレーションごとに機能をリリースすることを繰り返します。

アジャイル開発のイメージ

また、アジャイル開発では、顧客(ステークホルダー)を含めたチーム単位で開発を進めることも特徴の1つです。

チームメンバーは、設計者やテスターのように役割が決まっているわけではなく、チームで分担して1つのイテレーションを完結させていくという考え方のもと、プロジェクトが進みます。

顧客や製品のユーザーは、直接的に開発チームに要望を伝えることはできませんが、レビューの際にフィードバックすることなどにより、チームに貢献します。

アジャイル開発の背景にある「アジャイルソフトウェア開発宣言」

アジャイル開発の背景となっているのが「アジャイルソフトウェア開発宣言」です。

「アジャイルソフトウェア開発宣言」は、従来のソフトウェア開発手法とは異なる手法を実践していた17人のソフトウェア技術者が集まり、ユーザーのニーズ、プログラミングの手法や言語、ソフトウェアの設計などについて議論を通じ、生み出されました。

「アジャイルソフトウェア開発宣言」には、アジャイルの定義と12の原則が定義されています。アジャイルソフトウェア開発宣言の内容は、以下の通りです。

私たちは、ソフトウェア開発の実践
あるいは実践を手助けをする活動を通じて、
よりよい開発方法を見つけだそうとしている。
この活動を通して、私たちは以下の価値に至った。
プロセスやツールよりも個人と対話を、
包括的なドキュメントよりも動くソフトウェアを、
契約交渉よりも顧客との協調を、
計画に従うことよりも変化への対応を、
価値とする。すなわち、左記のことがらに価値があることを
認めながらも、私たちは右記のことがらにより価値をおく。

アジャイルソフトウェア開発宣言 2020/2/10)

顧客満足を最優先し、価値のあるソフトウェアを早く継続的に提供します。また「アジャイルソフトウェア開発宣言」12の原則は、以下の通りです。

  1. 要求の変更はたとえ開発の後期であっても歓迎します。変化を味方につけることによって、お客様の競争力を引き上げます。
  2. 動くソフトウェアを、2-3週間から2-3ヶ月というできるだけ短い時間間隔でリリースします。
  3. ビジネス側の人と開発者は、プロジェクトを通して日々一緒に働かなければなりません。
  4. 意欲に満ちた人々を集めてプロジェクトを構成します。環境と支援を与え仕事が無事終わるまで彼らを信頼します。
  5. 情報を伝えるもっとも効率的で効果的な方法はフェイス・トゥ・フェイスで話をすることです。
  6. 動くソフトウェアこそが進捗の最も重要な尺度です。
  7. アジャイル・プロセスは持続可能な開発を促進します。一定のペースを継続的に維持できるようにしなければなりません。
  8. 技術的卓越性と優れた設計に対する不断の注意が機敏さを高めます。
  9. シンプルさ(ムダなく作れる量を最大限にすること)が本質です。
  10. 最良のアーキテクチャ・要求・設計は、自己組織的なチームから生み出されます。
  11. チームがもっと効率を高めることができるかを定期的に振り返り、それに基づいて自分たちのやり方を最適に調整します。

アジャイル宣言の背後にある原則 2020/2/10)

従来の手法「ウォーターフォール開発」との違い

アジャイル開発が普及する以前は、システム開発手法として「ウォーターフォール開発」が広く使われていました。

ウォーターフォール開発とは、システム開発の開始時に、全工程を通したプロジェクトの要件定義や設計を細かく決めてから、開発に取り掛かる方法のことです。「分析→設計→開発→テスト→保守」という一通りの工程を、すべての機能において、一斉に上から順番に実行していきます。

プロダクトは、プロジェクトの立ち上げ当初に決定した仕様を忠実に実装することを想定し、その仕様を全て満たした時点で開発完了となります。

ウォーターフォール開発

ウォーターフォール開発は大規模なシステムの開発で使われていた技術であり、工程の変更や後戻りを想定していない手法です。そのため、開発やテストの段階で仕様や設計のミスが明らかになった場合、修正に多大なコストが必要となることが弱点でした。

一方、アジャイル開発は、最初から決まった仕様を100%満たすように開発することだけを想定したものではありません。アジャイル開発では、テストを含んだイテレーションを何度も繰り返して、システム全体をブラッシュアップしながら徐々に100%に近づけていくイメージです。そのため、エンジニアだけでなく、顧客も巻き込んだチーム一体となってシステムを開発していきます。

アジャイル開発では、各工程で発生した小さなエラーを修正しながら開発できるため、開発チームにあまりコストをかけることなく、少しずつプロダクトを完成に近づけることが可能です。

 

アジャイル開発の手法とポイントをおさえよう

アジャイル開発の手法として代表的なものに「スクラム」「エクストリーム・プログラミング(XP)」「ユーザー機能駆動開発(FDD)」の3つがあります。それぞれについて詳しく解説します。

アジャイル開発の主流:スクラム

スクラム(Scrum)とは、チーム一体となってシステム開発を行うフレームワークのことです。ラグビーのスクラムが語源とされています。

開発チームの作業とプロダクトに責任を持つ「プロダクトオーナー」と、プロジェクトを円滑に進めることに責任をもつ「スクラムマスター」がチーム全体を支援し、開発チーム(3~9人程度)が実際に開発を行います。

スクラムでは、以下の6つのプロセスを定義し、これらの段階的な管理と反復をしながら開発を進めます。

1.デイリースクラム

毎朝チームで集まり、チーム全体の状況や障害、問題点、その日に行う予定の作業を確認します。

2.リリースプランニング(プロダクトバックログ)

プロジェクトの立ち上げ時に、開発するプロダクトの機能の実装順序や開発期間について、チーム全体で計画を立てます。

3.スプリント計画(スプリントバックログ)

1つのイテレーション期間で、プロダクト全体からどの範囲の機能を実現させるかについて、チーム全体で計画を立てます。

4.スプリント

実際の1つのイテレーション期間の開発工程です。スプリントプロセスでは機能の追加や変更、削除は認められません。

5.スプリントレビュー

1つのイテレーション期間で完成したプロダクトのデモを行います。プロダクトがミスなく実装されており、安定して動作することを確認します。

6.振り返り

振り返りはスプリントごとに行います。各スプリントの良かったことや問題点、これから挑戦したいことなど、メンバー全員で話し合い確認します。

このように、スクラムではアジャイル開発の中でもエンジニアや顧客がチームとなってプロジェクトを遂行することに重点を置いています。そのため、チーム内でのコミュニケーションが非常に重要となります。

スクラムのイメージ

アジャイル開発の手法:エクストリーム・プログラミング(XP)

エクストリーム・プログラミング(Extreme Programming)は、技術者を重視した開発手法です。「XP」と略されます。

エクストリーム・プログラミングは、アジャイル開発の中でも、プログラマー中心の開発手法と言えます。

仕様や要求の途中変更、機能追加などを想定していることが特徴です。

つねに2人1組でプログラミングを行い、細かなチェックを行う「ペアプログラミング」、チーム内で共通したコード記法などを定める「コーディング規約」などのプラクティス(原則)のもと、開発を行います。

アジャイル開発の手法:ユーザー機能駆動開発(FDD)

ユーザー機能駆動開発(Feature Driven Development)は、ユーザーにとっての機能価値(feature)を重視した開発手法です。

あらかじめビジネスモデルを理解し、ログイン機能や購入機能といったユーザー機能を中心に計画をたて、設計や開発を行います。

開発に特化した手法ではなく、プロジェクト管理の面も持ち合わせていることが特徴です。

 

アジャイル開発の注意点

最後に、プロジェクトにアジャイル開発を導入する際の注意点を紹介します。

企画・開発の目的を定める

アジャイル開発は厳密な計画がなくても開発を進めることができますが、思いつきのままプロジェクトを進行すると、無駄な作業が増えてしまいます。変更を想定しているとはいえ、最終的な企画と開発の目的を定めておくことが重要です。

システム設計を徹底する

プロジェクトの最初の段階で、システム設計を徹底することが重要です。設計が曖昧なままだと、不要な機能を実装してしまうなど、無駄なコストが発生してしまいます。

ドキュメントを作成し共有し合う

プロエジェクトはチームで行うため、メンバー間の意思疎通が不可欠です。自分の作業や進捗などを整理して、チーム内で円滑な意思疎通を行うために、ドキュメントを作成して共有することが重要です。

チームとしてバランスの取れたスキルセットが必要

チーム構成は機能横断(クロスファンクション)型が理想です。5人から10人程度でチームを組み、バランスの取れたスキルセットが必要です。

1人では不足している知識・スキルをチームで補う

チーム単位での作業となるアジャイル開発では、必要な知識・スキルの全てを1個人が身に付ける必要はありません。1人では欠けている知識・スキルを、チーム全体で補っていく編成が必要です。

プロジェクトがアジャイル開発に向いているかを考慮する

アジャイル開発には、向いているプロジェクトと、そうでないプロジェクトが存在します。

アジャイル開発を導入すべきプロジェクトの特徴は、以下の通りです。

  • 要件の全体像がはっきりしないプロジェクト

アジャイル開発では、初期段階における要件の全体像がはっきりしないプロジェクトを遂行することができます。

例えば、要件が7割程度しか固まってなくても、残りの3割は、プロジェクトの状況を見ながら、並行して固めていくことが可能です。

  • 顧客の都合で開発の優先度が変わるプロジェクト

アジャイル開発は、開発中の仕様変更や機能追加などに、柔軟かつ迅速に対応できます。

そのため、顧客の都合で開発の優先度が変わるようなプロジェクトでも、フレキシブルに対応できます。

  • 顧客がチームのメンバーとして参加してくれるプロジェクト

アジャイル開発の特徴は、顧客を含めてチームとして開発を進めていくことです。

顧客がチームのメンバーとして参加することで、綿密なコミュニケーションを取りながら、迅速かつ柔軟なシステム開発ができるようになります。

 

アジャイル開発の概要と注意点、について解説してきました。アジャイル開発が登場した当初は、目新しさと画期的な手法であることで注目を集めました。しかし、プロジェクトによってはアジャイル開発が有効に機能しないこともあります。

この記事を参考にして、自分が手掛けようとしているプロジェクトがアジャイル開発に向いているかどうか、しっかりと見極めてから導入することをおすすめします。

 

目的別!ITスキル講座

基礎的なパソコン操作の知識があればOK!

最新!iOS12アプリ開発講座

日本を代表するデータサイエンティスト辻真吾氏による人気講座

初級者から学べる人工知能講座の決定版