アジャイルなシステム開発、デザイン、ブランディング、マーケティングを得意とし、全方位から企業のDXを支援するスパイスファクトリー株式会社です。
システム開発手法は大きくアジャイル型とウォーターフォール型に分かれます。
近年では変化に強いアジャイル開発が注目されるようになり採用事例も増えていますが、両者にはどのような違いがあり、どのように使い分けるべきものなのでしょうか。
本記事では、アジャイル開発とウォーターフォール開発の違いや双方の使い分けについて詳しく解説します。
アジャイル開発とウォーターフォール開発の違い
以下ではアジャイル開発とウォーターフォール開発の概要をご紹介しつつ、両者の違いを解説していきます。
アジャイル開発とは
アジャイル開発とは、顧客に価値のあるソフトウェアを早く、継続的に提供するためのアプローチのことです。アジャイル開発では、一度に全ての機能を開発するのではなく、各工程を繰り返しながら徐々に開発を進めていきます。
「機敏に」という意味を表す「アジャイル」という言葉のとおり、必要に応じて方針を修正していけるのがアジャイル開発の大きなメリットです。
一口にアジャイル開発といっても、以下のとおり様々な開発手法が存在します。アジャイル開発というのはこれらの手法の総称です。
- スクラム
- XP(エクストリームプログラミング)
- FDD(ユーザー機能駆動開発)
- リーンソフトウェア開発
- ラピッド・プロトタイピング など
アジャイル開発については以下の記事で詳しく解説していますので、よろしければ併せてご覧ください。
また、近年ではシリコンバレーをはじめとした海外を中心に、ラピッド・プロトタイピングと呼ばれる手法がソフトウェア開発領域においてもその有用性が認識されるようになりました。
以下の記事でラピッド・プロトタイピングについて詳しく解説しておりますので、ぜひご覧ください。
ウォーターフォール開発とは
ウォーターフォール開発の特徴を一言で言えば、あらかじめ作る機能を決めたうえでシステム開発を行う点です。ウォーターフォール開発では、要件定義、設計、開発、テストといったフローでシステム開発を進めていきます。
要件定義工程で決めた内容を基に、設計工程へと進みます。設計で決めたことを開発し、開発した内容をテストしと、まるで水が流れていくかのように段階的に開発を行っていきます。
過去、ウォーターフォール開発はシステム開発における一般的な手法として採用されてきました。しかしながら、ビジネス環境が激しく変化する現代においては、アジャイル開発を採用するケースも増えています。
アジャイル開発とウォーターフォール開発の相違点
アジャイル開発とウォーターフォール開発にはどのような違いがあるのでしょうか。結論として、各観点での違いをまとめると以下の表のとおりです。
両者にはメリット、デメリットがありますが、変化に対する柔軟性が高く、また早い段階で実際にシステムに触ることができるというメリットがあるアジャイル開発は、変化の激しい現代において有効なシステム開発手法といえます。
一方で、開発内容があらかじめ確定しているシステムであれば、ウォーターフォール開発により各工程を厳密にクローズさせていくことで、品質の高いシステムを作りやすくなります。
以下では、さらに観点ごとに詳しく比較を行っていきます。
観点①:作業工程
それぞれの開発手法におけるもっとも大きな違いは、作業工程の考え方です。ウォーターフォール開発においては、要件定義・設計・開発・テスト・リリースと各フェーズを段階的に実施していきます。要件定義工程が完了するまで設計工程には進みませんし、設計工程が完了するまで開発工程には進みません。
各工程の最後にはフェーズ完了レビューを行い、作成した成果物の承認を行います。その工程で作成した成果物は、次工程へのインプットとなります。
一度作成した成果物は基本的に変更しません。要件定義で定めた内容をそのまま設計・開発していくこととなります。アジャイル開発においては、ウォーターフォール開発における要件定義~リリースまでのサイクルを短期間で繰り返し実施することとなります。
たとえば各サイクルを2週間程度とするのであれば、その2週間で開発する内容を決め、実際に開発を行い、テストし、操作できる形でリリースを行うまでの一連の作業を完了させます。
観点②:柔軟性
このような作業工程の違いは、柔軟性の違いに影響します。
ウォーターフォール開発においては、要件定義工程で決めたものをそのまま開発しますので、柔軟に開発内容を変更することはできません。ウォーターフォール開発においても変更を吸収するための方法として、変更管理という仕組みがありますが、変更管理での変更は最低限とすることが原則です。
開発内容の変更を途中で行うと、どうしても作業工数が大きくなりがちです。対してアジャイル開発は柔軟性に優れます。
2週間など短いサイクルで開発を繰り返すため、タイミングごとに今後開発する機能を検討し続けることができます。
開発内容が明確である場合は、各工程で開発内容を定義し、開発を進めていくウォーターフォール開発が有効です。一方で柔軟に開発内容を変更していきたい場合は、アジャイル開発が適しています。
観点③:テスト
テスト方法や頻度についても、それぞれの手法は異なります。ウォーターフォール開発においては、テストはテスト工程のみで行います。
一方で、アジャイル開発は、それぞれのサイクルごとにテストを行います。よって、アジャイル開発の方が高頻度でテストを行うこととなります。
アジャイル開発では繰り返しテストを行うため、一般的にテストは自動化します。
観点④:レビュー
発注者がレビューを行うことができるタイミングも異なります。
ウォーターフォール開発においては、基本的に実物を確認できるのは開発の最終工程である受入テスト段階となります。
もちろん、それまでに画面のイメージ図などで認識合わせを行うものの、実際のシステムを確認できるタイミングはプロジェクトの最終場面です。アジャイル開発では、各サイクルの完了時点で実際に触ることができる実物を完成させます。
よって、発注者は開発内容を実物の形で確認しやすくなります。
観点⑤:発注者側のかかわり方
発注者の方のかかわり方もそれぞれの開発手法で大きく異なります。ウォーターフォール開発においては、要件定義工程で集中的に開発内容を議論します。
その後、設計工程では要件定義内容を基に実際の画面イメージなどのレビューを行うものの、開発・テスト工程へと移るにつれてプロジェクトへの関わりは薄くなります。
最終的に受入テストの段階で、要件定義で定めた内容が確実に実装されていることを確認します。一方で、アジャイル開発においては発注者の方は開発中、継続的に深くプロジェクトに関わることとなります。
各サイクルにおいて何を開発するのか、開発しようとした機能は正しく実装されたかを、繰り返し検討・確認していきます。このように、アジャイル開発の方が、よりプロジェクトへのコミットメントを強く求められるという特徴があります。
アジャイル開発とウォーターフォール開発のメリットを比較
以下では、アジャイル開発とウォーターフォール開発の双方のメリットを比較していきます。
アジャイル開発のメリット
①変化に対する柔軟性
アジャイル開発の一つのメリットは、変化に対する高い適応力です。
アジャイル開発では、イテレーションごとに小規模な改善を繰り返し行い、最適なソフトウェアへと漸進的に近づけるアプローチを採用しています。そのため、プロジェクトの途中で新たな要件やニーズが生じても迅速に対応することが可能です。
たとえば、競合他社が新機能を導入し、その機能がユーザーの需要に適合している場合には、自社サービスにもその機能を追加する戦略をとる必要があります。
また、開発中のソフトウェアに不満点が見つかった際には、リリース前にそれを改善したいと思うこともあります。ウォーターフォール開発では、このような変更を加えるためには変更管理プロセスを経る必要があり、要件やスケジュールの見直しに時間がかかりオーバーヘッドも大きくなります。
一方で、アジャイル開発においては比較的容易に仕様変更が可能です。顧客の要求や市場の変化に迅速に適応でき、最終成果物の品質向上を図る点は、アジャイル開発の大きなメリットと言えるでしょう。
②早期フィードバックの実現
アジャイル開発では、各イテレーションにおいて最低限動作するソフトウェアを構築します。
必要最小限の機能を持ったソフトウェアを実際のユーザーに提供することで、早期に意見や満足度、ニーズを収集することができます。
新規事業開発の場面では、市場調査やユーザー調査を行って仮説を立てた上でプロダクトを開発しますが、そのプロダクトが市場やユーザーに適しているかどうかは、市場やユーザーの反応を見て確認します。
こうした「PMF(プロダクト・マーケット・フィット)」を評価するためにも、アジャイル開発のアプローチが有効です。社内向けシステムでも早期フィードバックが重要です。プロジェクトの終盤で「思っていたシステムと違う」という事態はよくある失敗ケースといえるでしょう。
プロジェクトの初期段階で改善点を収集し、修正を行うことで、コストや開発期間を抑えつつ、利用者のニーズに沿ったソフトウェアを構築することが可能です。
③チームの一体化とモチベーション向上
アジャイル開発の特徴として、チーム全体で協力しながら開発を進める点が挙げられます。プロジェクトメンバーは一丸となってプロジェクトを推進し、「顧客」の役割を持つ人はいません。
ウォーターフォール開発では、請負契約によって発注側と開発側が明確に分かれ、発注側は開発側のプロジェクトマネージャーのみとコミュニケーションを取ります。このような体制は、時に「受注側への丸投げ」や「発注側の無関心」といった結果を招くことがあります。
一方でアジャイル開発では、発注側と開発側が一つのチームとしてプロジェクトを運営します。この一体感は問題発生時の迅速な解決につながります。チーム内のコミュニケーションが活発になることで、各メンバーの専門知識が最大限に活かされ、効率的な開発が可能になります。結果として、高品質なソフトウェアの開発が実現します。
このような体制のもとプロジェクトが進むアジャイル開発では、チームメンバーが協力して目標を達成する文化が醸成されます。各メンバーが自身の役割と責任を持ち、プロジェクトの進行状況を共有しつつ主体的に取り組むことができます。
この特性はメンバーの「やらされている感」を排除し、モチベーションアップにつながります。
ソフトウェアを作り上げるのは人間であるため、モチベーションはソフトウェアの品質において非常に重要な要素です。
ウォーターフォール開発のメリット
一方で、以下ではウォーターフォール開発のメリットをご紹介します。
①スケジュールとコストの予測しやすさ
ウォーターフォール開発の最大のメリットの一つは、スケジュールとコストの予測がしやすい点です。ウォーターフォール開発では企画構想・要件定義といった初期段階で詳細な計画を立てるため、開発のために必要なリソースやスケジュール、コストを明確に算出することができます。
基本的に当初立てた計画に沿って開発を進めるため、プロジェクトの進行中においても変更は最小限に抑えられます。これにより、予算の超過や開発の遅延といった事態も避けやすくなります。
②マネジメントのしやすさ
ウォーターフォール開発では、進捗管理、課題管理、品質管理などのマネジメント手法が体系化されており、ベストプラクティスに沿ったマネジメントを行うことができます。
進捗管理においては週次や月次などでの進捗確認の他、各フェーズの終了時にレビューを行うことで、プロジェクト全体の進捗状況を明確化します。また、課題管理表やタスク管理表によりドキュメントベースでプロジェクトの現状を整理していきます。
特にプロジェクト規模が大規模となると、マネジメントのしやすさは重要な観点です。サブチームごとに各種マネジメントを行いつつ、プロジェクト全体はプロジェクトマネージャーが統括するといった体制を組みやすいのもウォーターフォール開発の特徴といえるでしょう。
③明確な成果物
各手法はどのような使い分けが有効なのでしょうか。以下では、具体的なケースを想定してご紹介します。
ケース①:新規事業開発
新規事業開発においては一度に大規模な投資を行うのではなく、PoC(Proof of Concept:概念実証)などを通して事業の成功可否を段階的に判断していくのが一般的です。
このような進め方をする際に向いているのが「継続的な改善」を前提とするアジャイル開発です。アジャイル開発によりまず最低限動作するプロトタイプを構築し、ユーザーニーズの調査などを進めていくことで、より市場にフィットしたプロダクトを開発することができます。
なお、アジャイル開発を適用した新規事業開発の進め方については以下の記事でも詳しくご紹介しておりますので、併せてご覧ください。
※関連記事:なぜ今、アジャイル開発×デザイン思考が新規事業開発に必要なのか
ケース②:基幹システムのモダナイズ
基幹システムをモダナイズする場合、基本的には現行システムと同じ機能を構築することとなります。このように、開発内容がある程度明確となっている場合は、ウォーターフォール開発が適しています。
要件定義工程で既存システムの分析を行い、開発内容を確定することで、品質面も担保しやすく、また開発スケジュールや総額のコスト見通しも立てやすくなります。
企業において予算とスケジュールが見通せることは意思決定において重要な観点ですので、これらを見通しやすいウォーターフォール開発が有効です。
ケース③:業務改革プロジェクト
システム導入により業務改革を行うような場合、両者をうまく組み合わせることも選択肢の一つとなります。
業務をそのままシステム化する場合は要件が明確となりますが、業務プロセスの変更など既存業務から改善を行う場合、アジャイル開発で実証しながら取り組みを進めることが有効です。
既存業務をそのままシステム化する領域についてはウォーターフォール開発を採用しつつ、検証を繰り返しながら改善していく領域についてはアジャイル開発を採用するような分担も検討できます。
ハイブリット開発を採用するケースもある
両者様々な特徴があるアジャイル開発とウォーターフォール開発ですが、前述した例のようにその両者を組み合わせたハイブリット型の開発手法が採用されることもあります。
ハイブリット開発における開発の流れは以下のとおりです。
- プロジェクト計画を明確に定める
- 要件定義、開発、テストはアジャイル方式で繰り返し実施する
- システム全体のテストを結合テスト・システムテスト・受入テストで行う
ハイブリット開発では、プロジェクトの最初と最後はウォーターフォール開発を採用し、中盤の実際に開発を行う工程はアジャイル開発を採用することで、両者の良いところを組み合わせています。
大企業における基幹システム開発など、コストやスケジュールへの制約が厳しくプロジェクト全体にアジャイル開発を適用することが難しいものの、開発内容自体は柔軟に検討を進めたい場合に、このようなハイブリット開発の採用が適しています。
以下では、実際にハイブリッド開発を採用した事例をいくつかご紹介します。
ハイブリット開発の事例 その①
エンタープライズ向けのシステムを再構築したある事例では、要件定義から基本設計までの上流工程と結合テスト以降のテスト工程をウォーターフォール開発で行い、詳細設計やプログラミングはアジャイル開発で行うハイブリッド開発を採用しました。
本事例では、スクラムをベースにテスト駆動開発や継続的インテグレーションなどの手法を利用し、品質向上を図りました。結果として、ウォーターフォール開発を採用したケースよりも、バグの抽出件数が増加し、システムの品質向上を実現。生産性についても、10%程度改善を図れたとのことです。
※参考:アジャイルプロセスにおける実践的な品質向上施策の適用事例
ハイブリット開発の事例 その②
次に紹介する事例は、ある損害保険会社がパッケージソフトウェアをベースにハイブリッド開発により基幹業務システムを開発した事例です。
本プロジェクトでは要件定義工程の後、画面インターフェイスの定義から結合テストまでをアジャイルにより開発しました。
プロジェクトはスクラムをベースとして進めつつ、プランニングポーカーやかんばんなどの手法も採用。プロジェクト推進にあたっては、社外メンバーによるアジャイル研修も活用し、アジャイルマインドをインプットした事例です。
※参考:アジャイル型開発におけるプラクティス活用事例調査 調査報告書
まとめ
この記事では、アジャイル開発とウォーターフォール開発の違いについて詳しくご紹介しました。
両者は「どちらが優れている」というものではなく、使いどころに合わせて採用するべきものです。「要件が明確であるか」「柔軟な変化が求められるか」「繰り返し検証を行うべきものか」などの観点で、どちらを採用するか検討してみてください。
特に、新規事業・新サービスの開発においては、アジャイル開発が適している場面も多々あります。これらの取り組みにおいては、プロダクトのUXデザインも重要となってきます。プロジェクトにおいて、UXデザイナーが参画することも重要です。
当社では、アジャイル開発の豊富な知見を生かし、密なコミュニケーションを行いながらお客さまのビジネスを具現化していくことを強みとしています。新規事業開発においては、企画・構想や要件定義の段階からUXデザイナーが参画し、よりユーザーに届きやすいプロダクトの開発を支援します。
開発に関して悩まれている方、アジャイルでシステム開発を検討されている方は、ぜひお気軽にお問い合わせください。

About The Author
スパイスファクトリー公式
スパイスファクトリーは世界がより良い⽅向に向かうよう、変化を加速させる “触媒”(スパイス)としての役割を全うすることをミッションとしたDXエージェンシーです。最新テクノロジー、UIUX、アート、マーケティングなどの技術・メソッドを⽤いて、モノゴトを素早く、美しく、本質的に再定義し、幅広いクライアントのデジタルトランスフォーメーションを⽀援しています。