アジャイル(Agile)開発とは、現在世界で最も広く採用されている、ソフトウェア開発手法の一種です。
これを直訳すれば、「機敏な開発」ということになり、意訳すれば「回転が早く柔軟性の高い開発」といった感じになります。
日本では未だに普及が進んでおらず、従来型手法(ウォーターフォール開発)が主流となっていますが、マイクロソフトのサム・グッケンハイマー氏は、
アジャイル開発とウォーターフォール開発のメリット・デメリットはなんですか?
という顧客からの質問に対して、
ウォーターフォールは一切メリットがないのでやめておきなさい
と答えています。
というわけでこの記事では、アジャイル開発の概要やプロセス、メリット・デメリットなどをわかりやすくまとめます!!
このページの目次
アジャイル開発という概念は、2001年に出されたアジャイルソフトウェア開発宣言に端を発します。
これは米ユタ州に集まった17人の技術者・プログラマーによって提唱されたものですが、中でも重要なのが、以下の部分です。
プロセスやツールよりも個人と対話を、
包括的なドキュメントよりも動くソフトウェアを、
契約交渉よりも顧客との協調を、
計画に従うことよりも変化への対応を、
これら4つの価値観をベースとしたソフトウェア開発手法が、アジャイル開発であると言えます。
アジャイル開発の最も大きな特徴は、ソフトウェアの機能を1つ1つ開発→リリースしていくということです。
このことから、アジャイル開発は反復増加型開発と呼ばれます。
アジャイル開発の特徴は、従来型のウォーターフォール開発と比較するとよりわかりやすいでしょう。
ウォーターフォール開発では、「計画→設計→実装→テスト→納品」という1つのサイクルを経て、ソフトウェア全体を完成させます。
一方、アジャイル開発では、この開発サイクルを機能ごとに何度も回して、ソフトウェア全体を作り上げます。
また、このアジャイル開発のプロセスは、リリース計画とイテレーションという2つの行程で出来ています。
リリース計画では、ソフトウェアのおおまかな仕様と要求を決定します。
この際、ウォーターフォール開発のように初めから綿密には決めないことで、顧客ニーズや仕様変更などに合わせた臨機応変な対応ができます。
イテレーション(iteration)とは、「反復」という意味で、上記で触れたような、小さな単位に分けた機能に対する開発〜リリースのサイクルのことです。
このイテレーションは、期間は1〜2週間が一般的で、毎回機能を実際にリリースするという点がポイントです。
アジャイル開発のメリットはたくさんありますが、ここではアジャイルソフトウェア開発宣言に照らして、4つのメリットを挙げてみましょう。
ウォーターフォール開発が、各工程ごとに大規模なチームを編成するのに対し、アジャイル開発では、毎回のイテレーションに3~10人の小規模なチームで臨みます。
これにより、当事者意識が刺激されモチベーションが向上し、コミュニケーションが活発化して有機的なチームが形成されるなど、チームに対して様々な良い作用があります。
また、メンバーが多様な作業を何度も経験できるため、多能工化や技術力向上など、開発者の成長を大きく促すという効果もあります。
アジャイル開発では、全体を小さな単位の機能で分け、動くソフトウェアを短い周期で、かつ、ワンチームで作ります。
そのため、ドキュメント作成の手間が大幅に省けることになります。
もちろん、仕様書などは作りますが、ウォーターフォール開発では必須となる、各工程ごとの引き継ぎ書などは不要になるので、結果として全体の作業量は減少します。
従来、顧客によるソフトウェアのチェックは、ソフトウェア全体が利用可能な形になった後なので、そこから修正できる範囲には限度がありました。
しかし、アジャイル開発では、機能を1つずつ順に利用可能な状態にまで完成させます。
そのため、要望の誤解や品質の検証が早期に実施され、結果的に故障が少なく満足度の高いソフトウェアを提供出来るのです。
当然、顧客にも競争相手がいるので、市場に変化があった場合は仕様にも変更が出ることがあります。
アジャイル開発では、確定していない要望や変更の可能性が高い機能は後回しに出来るため、開発後期に要求が変更されても柔軟に対応可能です。
そのため、初期の計画にある程度規定されてしまう従来型開発とは異なり、顧客、ひいては市場のニーズに合った製品を作ることが出来ます。
基本的にはメリットの方が多いアジャイル開発ですが、当然デメリットもありますので、確認してみましょう。
アジャイル開発は、ウォーターフォール開発のように、初めに詳細な計画は立てません。
なので、全体としての進捗具合やスケジュールをコントロールしにくいために、納品時期が予定から前後することがあります。
アジャイル開発では、ウォーターフォール開発のように、計画段階で厳密な仕様を決めることはしません。
そのため、イテレーションを繰り返すうちに、当初の開発計画から方向性がズレてしまうことがあります。
以上が大体のデメリットですが、どちらも開発の柔軟性を重視した弊害と言えます。
なので、アジャイル開発は、計画性を多少犠牲にして非常に大きなメリットを得る手法と考えれば良いでしょう。
アジャイル開発の具体的な手法は数多くありますが、中でも最も有名なスクラムというフレームワークを紹介します。
大体の流れは上記の図のようになります。
1つ1つ簡単に説明していきましょう。
前述のリリース計画のことです。
完成品に必要な機能をリストアップし、優先順位をつけ、どのくらいの期間でやるかを決めます。
今回のイテレーション期間でどの機能を開発するか決めます。
ちなみに、スクラムでは概ねスプリント=イテレーションと考えてよいです。
イテレーション期間における開発フェーズです。
全ステップで決めた機能を、動くソフトウェアにしていきます。
出来たソフトウェアを顧客に見せて検証し、よければリリースします。
その後、今回のスプリントを振り返ってから、次のスプリントプランニングに入ります。
スクラムの核となるのはこの4ステップです。
要するに、リリースプランニングで方向性を定め、スプリントを繰り返して製品を完成させます。
また、デイリースクラムという、プロジェクトの見える化を目的とした朝会を毎日行うことも大きな特徴です。
以上、アジャイル開発についてまとめてきました。
登場した当初、アジャイル開発は大規模プロジェクトには適さないと言われていましたが、最近ではプロジェクトの規模を問わずアジャイル開発を採用するようになってきています。
いずれ来るアジャイル開発が主流となる時代に備え、アジャイル開発をいち早く導入しましょう!
また、アジャイル開発の運営に際しては、ツールを導入した効率よく行うことをおすすめします。
詳しくは、以下の記事をご覧ください。