支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡

  • TOP
  •   
  • コラム
  •   
  • アジャイル開発とその手法

はじめに

近年ではアジャイル開発と言われる開発手法をよく耳にします。聞いたことはあるけど、何なの?という疑問をお持ちの方もいらっしゃることでしょう。本記事では開発手法であるウォータフォールモデルとアジャイル開発を比較しながらアジャイル開発の特徴と有名な手法である「スクラム」について紹介していきます。

アジャイル開発とは何か?

アジャイル開発とは何か見ていきます。 まずアジャイル開発とはシステムやソフトウェア開発手法の一つです。従来からある開発手法で有名なのが、「ウォーターフォールモデル」と言われるものです。ウォーターフォールモデルは全体の機能設計・計画を決定し、この計画に従って開発・実装していきます。ウォーターフォールモデルでは、基本的には以下のように工程を踏んで開発していきます。


要件定義:顧客から実現したいサービスをヒアリングし明確にします。
基本設計:ヒアリングした内容からどういった機能を実装するか決定します。
詳細設計:決定した機能をどのように実装するか具体的に決定します。(具体的なプログラミングやパラメータの設計)
プログラミング:詳細設計を元にプログラミングしていきます。
テスト:プログラミングした内容を動かしてテストしていきます。

「ウォーターフォール」と呼ばれるのは、川の流れが上流から下流に流れていくように、開発を進めていくからです。(要件定義が最上流、テストが最下流)。また上記と平行してWBSと呼ばれる計画を作成します。WBSでは要件定義~テストまで発生するタスクをすべて洗い出していきます。タスクをすべて洗い出した後、それに必要な工数(人と時間)を見積もっていきます。WBSを作成することで全体のプロジェクトのタスクと工数を俯瞰することができるようになります。ウォーターフォールモデルは、この計画を順守して開発を進めていく開発手法となります。

ウォーターフォールモデルのメリットは、上記のように最初にプロジェクトの計画を念入りに立てますので、戻りが発生しずらいという点です。また進捗が管理しやすく遅れなどを早期に発見することが可能になります。また工程を経ながら進めていきますので、品質が向上していきます。 ただしデメリットもあり、それは急な仕様変更などがあった場合、融通が利かないという点です。ウォータフォールモデルでは、基本的には前の工程には戻らないことを前提としています。仮にテスト工程でバグが見つかり仕様変更しなければならない場合、設計や詳細設計から戻って、プログラミングし、テストをするという工程を再度経る必要が生じます。さらにその場合、スケジュールなどの見直しも必要となりますので、大変な工数がかかってしまいます。また成果物(要件定義では要件定義書、基本設計では基本設計書)ベースで工程を経ていきます。決まった成果物を必ず作成しなければならない分、業務に負荷がかかります。従来の開発手法であるウォーターフォールは、上記のようなメリット・デメリットがあります。

では、アジャイル開発とはどういったものになるでしょうか? 「アジャイル(Agile)」という言葉ですが、「素早い」「機敏な」「頭の回転が速い」などの意味があります。言葉の意味からもわかるように、従来のウォーターフォールよりも開発期間を短縮できたり、急な仕様変更にも対応できる開発モデルがアジャイル開発となります。 アジャイル開発の流れは以下のようになります。

リリース計画

まずリリース計画を立てますが、ウォーターフォールモデルのように厳密な仕様を決定しません。おおまかな要求のみ聞きだします。厳密な仕様を決定しないので、開発の途中で仕様の変更要求があっても臨機応変に対応していくことが可能になります。

イテレーション

だいたいの要求をヒアリングしたら、開発を進めていきます。 その際に、イテレーションと呼ばれるサイクルを回して開発していきます。 イテレーションは、計画→設計→実装→テストのサイクルを繰り返すことです。 ウォーターフォールとは違い、アジャイル開発では機能単位で開発していきますので、重要な機能を最初に着手したりなど優先順位を決めることが可能です。 一回のイテレーションは1週間~2週間程度で、その都度、機能を開発/リリースします。 上記の特徴から機能の追加や変更要求があっても、早期に対応することが可能になります。 アジャイル開発手法の中でもスクラムと呼ばれるものがあります。 以下で紹介していきます。

スクラムとは?

スクラムとはアジャイル開発で最も有名な手法です。 ウォーターフォールでは事前に取り組むタスクを洗い出してしまいますが、アジャイル開発ではそうではありません。都度必要な機能や修正するべき機能を増やしていく形になります。ですので開発を個人の主体性に委ねてしまうケースが多いです。そうなるとそれぞれのメンバーで開発したシステムが単体では動作しても、結合させたら動かないなんて事態も発生する場合があります。スクラムはそうした個人の自由度の高い環境で、プロジェクトの開発の方向性に一貫性を持たせるためのフレームワークと言えます。

ロール(役割)

特徴としては、チーム内でロール(役割)を設定し、チーム一丸となってプロジェクトに取り組みます。 ロールには「プロダクトオーナー」、「開発チーム」、「スクラムマスター」の3つがあります。

プロダクトオーナー

プロダクトオーナーの役割は、作成するプロダクトのオーナーで、プロダクトで必要となる機能を考え、優先順位を決めて、開発チームに作業指示を出します。またスケジュールや予算の管理もします。

開発チーム

プロダクトオーナーの実現したい機能を開発していきます。 スクラムでは開発チームのメンバー個々の裁量が大きくなりやすいので、コーディング以外にも設計、プロジェクト計画・管理・進行、設計、ドキュメント作成、テスト、運用といった一通りのスキルが求められます。

スクラムマスター

スクラムマスターはプロジェクトを円滑に進める支援役です。 スクラムのルールや進め方をプロダクトオーナーや開発チームに伝えたり、開発チームからのフィードバックをプロダクトオーナーに伝える橋渡し的な役割をします。

スプリント

またスクラムのもう一つの特徴は、スプリントというサイクルを回します。 先程紹介したイテレーションと同じように短い期間が設定され、1スプリントがだいたい1週間~4週間程度と言われます。 スプリントは主に「目標設定→開発→評価」を繰り返すサイクルになります。

まずプロダクトに必要な機能の一覧を洗い出したプロダクト・バックログを作成します。 その中からスプリント内で開発する機能を決め、スプリント内の開発目標とします。 目標を達成するために、まずは開発対象の機能を詳細化します。ここで作成された成果物をスプリント・バックログと言います。スプリントの目標はこのスプリント・バックログを元に開発することです。

またデイリースクラムを実施し、進捗状況などを毎日メンバーで共有します。 スプリントの最終日にはスプリントレビューをします。プロダクトオーナーやステークホルダーが成果物をレビューします。レビューした結果、新たな機能の追加の必要性が挙げられた場合は、プロダクト・バックログを整理し、次のスプリントに向けて準備します。スプリント最終日にはもう一つ「スプリントレトロスペクティブ」を行い、スプリント内で良かった点や改善点を挙げて、次のスプリントに活かしていきます。 このように個人の裁量に委ねてしまいがちなアジャイル開発では、ロールを振り分けたり、進めかたをルール化することで、自由度を高く保ちながらも、方向性がブレてしまうことのないように開発を進めることが可能になります。他にもエクストリーム・プログラミング(XP)やユーザー機能駆動開発(FDD)と言われる手法があります。興味のある方は是非調べてみてください。

アジャイル開発のメリット・デメリット

アジャイル開発のメリットは、やはり変化に臨機応変に対応できる柔軟さがある点です。上記で紹介してきた通り、機能追加の要求があっても新しいイテレーションを1回実施すれば良いだけになります。 また機能単位の小さなイテレーション内で開発しますので、戻りがあった場合でも小さな被害ですむというのもメリットとして挙げられます。デメリットは、開発の方向性がブレやすい点です。スクラムのようなフレームワークもありますが、やはり機能変更などを繰り返し過ぎてしまえば当初の要求か外れていってしまう場合もあります。当初の要望を見失わないように、情報共有などをしっかり実施してプロジェクトを進めていく必要があります。また詳細な計画を立てないでプロジェクトを始めますので、スケジュールが管理しにくいという点も挙げられます。スプリント内のスケジュールをしっかりと管理し、進捗状況をチームで共有して進めていく必要があります。

最後に

いかがでしたでしょうか? アジャイル開発とその手法について紹介致しました。 開発手法はどれが優れているというのはなく、対象となるシステムや規模に応じて選定していく必要があります。例えばシステムのリプレースなどの案件であれば、要件や設計はすでに決まっていますので、最初に計画を立てるのはさほど大変ではありません。そう言った場合にはウォーターフォールモデルの方が向いていると言えるでしょう。全く一から新しいシステム、それも前例が無い場合のものなどは、試行錯誤しながら進めることができるアジャイル開発が向いていると言えます。ですのでWebサービスやスマホのアプリなんかにアジャイル開発は向いていると言えます。近年では新しいサービスやアプリが増えていますので、アジャイル開発の需要は増えていくのではないでしょうか。