webサービスの開発の現場でよく出るアジャイル開発とウォーターフォール開発の違いについて解説していきます。開発の進め方、考え方が大きく違い、この辺の言葉の定義を知らないと開発を進めるにあたって齟齬が出てくるので要チェックです。
この記事は下記で動画としても配信しています。
アジャイル開発とは?
アジャイル(agile)とは元々「素早い」「機敏な」「頭の回転が早い」という意味。その名の通り、仕様変更などに素早く対応するための開発フローで計画→設計→実装→テストといったフローを短いスパンでやることで仕様変更が入ってもすぐに対応できるようにしています。
アジャイル開発という概念が生まれたのは、2001年、アメリカ・ユタ州に集まった17名の技術者・プログラマーによって提唱された「アジャイルソフトウェア開発宣言」が始まりです。
アジャイルソフトウェア開発宣言
私たちは、ソフトウェア開発の実践
あるいは実践を手助けをする活動を通じて、
よりよい開発方法を見つけだそうとしている。
この活動を通して、私たちは以下の価値に至った。プロセスやツールよりも個人と対話を、
包括的なドキュメントよりも動くソフトウェアを、
契約交渉よりも顧客との協調を、
計画に従うことよりも変化への対応を、価値とする。すなわち、左記のことがらに価値があることを
http://agilemanifesto.org/iso/ja/manifesto.html
認めながらも、私たちは右記のことがらにより価値をおく。
アジャイル開発の特徴
アジャイル開発は考え方であり、開発手法ではありません。考え方は下記をもとにしています。
- Individuals and interactions over processes and tools(プロセスやツールよりも個人と対話を)
- Working software over comprehensive documentation(包括的なドキュメントよりも動くソフトウェアを)
- Customer collaboration over contract negotiation(契約交渉よりも顧客との協調を)
- Responding to change over following a plan(計画に従うことよりも変化への対応を)
もう少し具体的にいうと元々アジャイルが出る前はウォーターフォールが主流でした。ウォーターフォールは事前に仕様を決め、その通りに作っていく開発手法でそのアンチテーゼとして出てきたのがアジャイル開発になります。
アジャイル開発ではイテレーションという短いサイクルの中で計画・実装・デプロイを行います。その際にドキュメントを都度定義してから動くのではなく、実装したものをもとにコミュニケーションを取って進めていくのが特徴になります。
スクラムとアジャイル開発の違い
スクラムはアジャイル開発の考え方を踏襲した開発手法になります。アジャイル開発が考え方でスクラムは手法になります。スクラム自体は下記の特徴を持つ開発手法です。
- スクラムマスターというスクラムのスケジュール管理などを担当する役職を設ける
- スプリントという期間を設けこれを繰り返すことで開発を進めていく(アジャイルでいうイテレーション
- 下記のスクラムイベントを回していく
- スプリントプランニング
- デイリースクラムで毎日のタスク確認
- スプリントレビューで振り返り
ウォーターフォール開発とは?
対してウォーターフォール開発は事前に仕様を決めて開発する手法です。計画を事前に決めることから予測型の開発手法と呼び、逆に事前の計画よりも随時適応していくことに重きを置いた手法を適応型と呼びます。
ウォーターフォールとアジャイルはどこが違うのか?
ウォータフォール開発とアジャイル開発の違いは大きいところはウォータフォール開発は事前の計画を重視する開発手法であるのに対してアジャイル開発は期間を短く区切り、随時対応できるようにしているというところです。
もし、開発するものが決まりきっている場合、ウォーターフォールで事前に計画を一気に全部練ってしまい、そのまま開発するのが一番早いでしょう。ただ、実際にはwebサービスの開発は作りながら常に調整する必要があります。
それは技術的な問題が出る場合もありますし、作ってみてユーザーにとって魅力的じゃなく、調整するという場合もあります。
webサービスを開発した経験のない人からすると事前に計画立てた方が早いんじゃない?途中になって初めてわかるのは事前調査が足りないのでは?と思うかもしれませんが、プログラミングは作ってみないとちゃんと動くかわからない場合も多いのです。
受託ではなぜウォーターフォールになりやすいか?
ここからは私の経験談になりますが、受託開発の場合、ウォーターフォールになりやすいです。正確にいうと請負契約の受託開発になります。
というのも請負契約の場合、何を作るのかを先に決めないと見積もれないため、最初に仕様を策定するウォーターフォールに自然となってしまうのです。もし、アジャイルで柔軟に対処していきたい場合は、準委任契約で時間当たりの契約にする必要があります。