
従来のシステムはウォーターフォールで開発されているものがほとんどでした。しかしウォーターフォールでは、最初に要件やプロジェクト全体のスケジュールを十分に検討する必要があり、短期間での開発は困難です。
そこで生まれたのが「アジャイル開発」。
アジャイル開発は2001年に誕生した比較的新しい手法です。ウォーターフォールとは全く異なる方式で、短期間での開発を可能としました。
今回は、アジャイル開発のメリットと、ウォーターフォール開発との比較についてもお伝えします。
アジャイル開発は小さな単位で実装を繰り返す手法
「アジャイル(Agile)」とは「機敏な」「頭の回転が速い」という意味です。アジャイル開発はその名の通り機敏性のある開発方式で、小さな単位で実装を繰り返します。この小さな単位での開発を「イテレーション」と呼び、イテレーションを繰り返してシステムの完成を目指すのです。
アジャイル開発の起源は、2001年までさかのぼります。17名の技術者やプログラマーが米国ユタ州に集まり、開発手法について統合することを議論しました。その議論をまとめたものが「アジャイルソフトウェア開発宣言」です。
アジャイルソフトウェア開発宣言は、ソフトウェア開発とそれに基づく12の原則を定義しており、現在もアジャイル開発の公式文書として公開されています。
アジャイル開発のメリット
アジャイル開発のメリットは次の2点です。
- システム開発の着手が早い
- 顧客や利用者からフィードバックを細かくもらえる
それぞれ詳しくみていきましょう。
システム開発の着手が早い
アジャイル開発は、最初に明確に要件やスケジュールを決める必要がありません。イテレーションを繰り返して開発するので、その時の状況によって対応していき、要件やスケジュールが変わっていく可能性があるからです。
そのため、数週間ほどでシステム開発に着手でき、素早く開発を進められます。
随時チェックとフィードバックができる
イテレーションで開発を進めると、開発終了のタイミングが多く訪れます。そのため、必然的に出来上がった機能やパーツを顧客側が確認してフィードバックする機会が多くなるのです。
随時フィードバックすることによって、システムの方向性にニーズを反映させられるので、イテレーションのたびに細かく対応して軌道修正をしていけるでしょう。
アジャイル開発のデメリット
アジャイル開発が良い事ばかりのように見えている方もいらっしゃるかもしれませんが、もちろんデメリットも存在します。
デメリットは次の2点です。
- 開発の方向性が変わりやすい
- 開発のスケジュールや進捗を管理しにくい
開発の方向性が変わりやすい
システムの方向性に顧客側のニーズを反映させやすいということは、逆にデメリットでもあります。最初に取り決めた方向性が、イテレーションの結果によって全く異なる方向性へと変更されることもあるのです。
場合によっては、当初と全く異なるプログラミング言語でのシステム構築が必要となり、開発者が技術を新しく学び直さなければいけない場合も。また、システムの内容がつぎはぎになることもあり、時には動作が不安定なシステムが完成してしまうこともあります。
開発のスケジュールや進捗を管理しにくい
アジャイル開発では、最初のスケジューリングにあまり時間をかけません。またイテレーションの結果で、システムの構築方針も細かく変わるため、スケジュールや各メンバーの進捗状況を管理しにくいことがあります。
しかし、近年ではアジャイル開発に向いたスケジュール管理ツールなども多くリリースされているため、以前よりも管理がしやすくなってきていると言えるでしょう。
ウォーターフォールとの比較
ウォーターフォールは、その名の通り、滝から水が落ちていく様をモデルとしています。最初に厳格なシステム要件とプロジェクトを検討し、システム工程を後戻りさせることはありません。そのため、方針の変更はほぼなく、厳格なスケジュールの元で開発が進められます。
アジャイル開発は、このウォーターフォールモデルと比較して強い点と弱い点があります。それぞれみていきましょう。
アジャイル開発がウォーターフォールよりも強い点
- 柔軟性が高く、顧客を巻き込んで意見を聞きながらの開発となるため、要望のシステムに近づけやすい
- 試験的にシステムを作り、うまくいかなければ作り直すという手法がとれる
- スケジュールを最初に明確に取り決めないので、早く開発をスタートできる
アジャイル開発がウォーターフォールよりも弱い点
- 途中でコンセプトが頻繁に変わる可能性があり、大規模開発に適さない
- 既存のシステムを何回も変更することになるので、ミッションクリティカルなプロジェクトに適さない
- スケジュールが厳密に取り決められているシステムには適さない
最近では、アジャイル開発を更に発展させた「DevOps」と呼ばれる手法が注目を集めています。DevOpsでは、開発チームと運用チームが協力し、1日に複数回のリリースを実施します。
アジャイル開発とウォーターフォール、どちらを使うかはプロジェクトの特性、製品の仕様、納品期日、最終製品に求められる品質などで判断する必要があるでしょう。
アジャイル開発が向いているシステム
それでは、どのようなプロジェクトがアジャイル開発に向いているのでしょうか。
アジャイル開発が向いているのは、開発の途中で仕様の変更や追加が予想されるプロジェクトです。例えばソーシャルゲームや新規事業のプロジェクトなど、流行やサービス状況に左右されがちなプロジェクトに向いているでしょう。
逆に、企業の基幹システムや医療システムなどのミッションクリティカルなシステムには、厳格にプロジェクトを進行させるウォーターフォールが合っているといえます。
アジャイル開発の手法
アジャイル開発には、主に3点の手法が存在します。
- スクラム
- エクストリーム・プログラミング
- ユーザー機能駆動開発
同じアジャイル開発の手法ではありますが、それぞれに特色があります。
スクラム
チーム間のコミュニケーションを重視している点が特徴です。
メンバーが自分たちで計画を立案し、イテレーションごとに開発の進行に問題がないか、制作物は正しい動きをしているのかを精査していきます。
エクストリーム・プログラミング
事前に立てた計画よりも途中変更などの柔軟性を重視する手法です。
開発チームでは「コミュニケーション」「シンプル」「フィードバック」「勇気」の4つの価値を共有することを推進。中でも「勇気」は、開発途中の仕様変更や設計の変更について、失敗を恐れず実行していく姿勢を表しています。
ユーザー機能駆動開発
ソフトウェアの開発を反復的に繰り返す手法です。
顧客にとっての機能価値を重視し、ユーザーのビジネスに対して見える化を実施します。その後、必要なソフトウェアの機能を選定し、機能ごとにマイルストーンを設置し、各機能を開発していきます。
まとめ
アジャイル開発もウォーターフォールも一長一短です。
トレンドやサービス提供状況に左右されやすい、つまり変更や改善に柔軟であることが重要視されるプロジェクトの場合は、アジャイル開発が向いていると言えるでしょう。一方、日常業務に必要不可欠であったり、システムの安定性が最重要視される企業の基幹システムなどでは、綿密に練られた計画とスケジュールで進めるウォーターフォール型の開発がおすすめです。
プロジェクトの特性などに応じて、適切な手法を選択していきましょう。