アジャイル開発とは?抑えておきたい開発手法のメリット・デメリットを解説

  • 2022.05.12
       
アジャイル開発とは?特徴やメリット・デメリットを解説

アジャイル開発とは?

アジャイル開発とは、システム開発における手法の一つで、機能ごとに細かく分け、小さなサイクルで反復的に開発を進めていくという開発手法のことです。
優先度の高いものから機能単位で開発していき、それぞれを組み合わせることで1つの大きなシステムを形成します。
一般的なやり方に比べて、短い期間でリリースできることから、「アジャイル(素早い)開発」と呼ばれています。
この手法は、「プロジェクトの進行途中で仕様変更は必ず出てくるもの」という前提のもとで開発を進めるので、容易に仕様設計の変更や機能の追加ができ、顧客に価値の高い成果物を届けられるのです。このように成果物の質や価値を最大化することに重きを置いている開発手法です。

アジャイル開発のはじまり「アジャイルソフトウェア開発宣言」

私たちは、ソフトウェア開発の実践
あるいは実践を手助けをする活動を通じて、
よりよい開発方法を見つけだそうとしている。
この活動を通して、私たちは以下の価値に至った。

プロセスやツールよりも個人と対話を、
包括的なドキュメントよりも動くソフトウェアを、
契約交渉よりも顧客との協調を、
計画に従うことよりも変化への対応を、
価値とする。すなわち、左記のことがらに価値があることを認めながらも、
私たちは右記のことがらにより価値をおく。

引用元:アジャイルソフトウェア開発宣言

「アジャイルソフトウェア開発宣言」とは、簡単に言ってしまえば、従来の開発手法への問題提起と新たな価値観の提案です。
従来型の開発手法と異なる手法で開発を行っていた17名のソフトウェア開発者が米国ユタ州に集い、お互いの考えや手法についての議論し、2001年に発表されました。従来の開発手法では「プロセス、ドキュメント、契約、計画」が重視されていましたが、この手法は、時として開発の障害になると感じていたのです。そこで、効率性を上げ、迅速に、より価値や質の高い成果物を顧客に届けられるよう、前述した価値観よりも、「チームでコミュニケーションをとること、動くソフトウェアを作ること、顧客と強調すること、変化に対する柔軟性」を重視すべきだという価値観の提言に至りました。
この宣言では、ソフトウェア開発の「12の原則」を定義しており、アジャイル開発の公式文書としてしばしば参照されています。

アジャイル開発とウォーターフォール開発の違い

ここからは、システム開発の二大手法といわれるアジャイル開発とウォーターフォール開発の違いについて解説します。

そもそもウォーターフォール開発とは?

ウォーターフォール開発は、従来から使われてきた開発手法で、あらかじめソフトウェアにおける全ての機能に関する要件定義や設計を綿密に行った上で、プロジェクト全体で「企画→計画→設計→実装→テスト→運用」という順に工程を進めます。ウォーターフォール開発は、これらの工程を水が下に落ちていくように一方通行で行うことからこう名付けられました。開発初期に定めた要件定義や設計が重視されているため、基本的には、後からの仕様変更は想定されておらず、開発途中での顧客の要望は聞き入れられず、成果物ができて初めて、顧客に手渡されます。

ウォーターフォール開発についてお分かりいただいたところで本題に入ります。
結論から言うとこの2つは工程が全く違います。

アジャイル開発は機能ごとに小単位で反復的に開発を進めていくのに対し、ウォーターフォール開発は企画からリリースまで一方向の大きなスケジュールで開発を進めます。

機能ごとに工程を細かく分けて開発を進めていくアジャイル開発では、重要な機能や優先度が高いものから着手できるため、速やかにリリースして、後からユーザの感想や使い勝手を参考にしながら、追加機能や改善を行うなど、質や価値を上げていくことが可能です。このように、ビジネスのスタートを早めに切れるだけでなく、開発作業も効率的になり、急な仕様変更やトラブルにも柔軟に対応できるところも魅力です。
それに対し、手順ごとに開発を進めていくアジャイル開発では、リリース時にすべての要求を満たしていることが求められます。工程の変更や後戻りを想定していない手法であるため、途中で機能追加や致命的な欠陥が見つかった場合、最初からやり直さなくてはいけないといったリスクもあり、修正に多大なコストや労力がかかります。

また、企画段階での具体性も大きく違います。
アジャイル開発は、数回の打ち合わせでおおよその仕様や方向性しか決めず、設計における余白を残しておくことで、開発途中での仕様変更にも柔軟に対応できるようにしています。それに対し、ウォーターフォール開発では、綿密な打ち合わせを重ね、企画段階でかなり具体的に内容を検討し、設計段階では画面やデザインなどもより詳細に決めていきます。

業務の役割分担についても、アジャイル開発は役割が明確に決まっているわけではなく、チーム全体で一丸となってプロジェクトを遂行していくのに対し、ウォーターフォール開発では役割ごとに担当が決められており、役割分担がはっきりしています。

DX推進と好相性

アジャイル開発は、近年のビジネスシーンで話題となっている「DX(デジタルトランスフォーメーション)」推進の観点からも注目を集めています。
DXとは、「IT技術の活用によって、人々の生活をあらゆる面でより変革をもたらす」という概念です。進化し続けるテクノロジーやそれに伴う人々の生活の変化に合わせて、ビジネスの在り方自体を再構築するには、市場が絶えず変化していくことを意識する必要があります。
不確実性の高い昨今では、刻一刻と変わる顧客のニーズにマッチした商品やサービスを素早くリリースして質や価値を上げていくような座組や経営が求められており、アジャイル開発は、DX推進に最も適した開発手法としてさまざまなプロジェクトで取り入れられています。

アジャイル開発の流れ

アジャイル開発は、2つの工程に分けることができます。

リリース計画
プロジェクト全体を管理するためのリリース計画を立てます。「開発の最中に仕様変更が出てくる」という前提のもと、初期の計画段階では、細かく仕様設計を定めず、おおまかな仕様設計や要求を決めて作業に取り掛かります。おおまかに計画を立てたとしても、後々の実装段階で問題が発生しそうですが、細かな仕様設計が決まっていないため、開発の途中で変更点が出てきても臨機応変に対応でき、顧客のニーズに最大限応えられるのです。

イテレーション
大まかな仕様設計と要求を決めたら、イテレーション(iteration)という工程を繰り返し行います。このイテレーションには「反復」という意味があり、開発を小さい単位に分け、1週間~2週間という短いスパンで「計画→設計→実装→テスト」を繰り返し行い、毎回、各々が機能の新規リリースを繰り返しながらプロジェクトを推進していきます。

アジャイル開発が向いている開発/不向きな開発

次のような場合はアジャイル開発が向いています。

  • 1から新しいシステムを開発する場合
  • 開発中に開発内容の変更が予想される場合
  • 最新技術が使われる場合
  • クライアント自身がチームメンバーとして開発に携わる場合

逆に、以下のような場合はアジャイル開発に不向きといえるでしょう。

  • ソフトウェアの不具合などにより人の生死に直結しうる医療システム
  • システムの仕様が決まっている場合
  • 今後機能を追加する予定がない場合

このように、開発手法にも開発するシステムの内容によって向き不向きがあるので、適切な手法を選ぶことが大切です。

アジャイル開発の手法

アジャイル開発には主に3つの開発手法があります。

スクラム

スクラム開発は、古くからある最も有名な手法で、少人数での開発に適した手法です。ラグビーでは肩を組み、チーム一丸で押し合うフォーメーションを指すラグビー用語「スクラブ」が語源となっており、メンバー同士のコミュニケーションや連携に重点を置いています。
チーム内で計画を立案し、イテレーションごとの進行状況に問題がないか、成果物は正しく動作するかを精査するため、メンバー同士のコミュニケーションが重要です。コミュニケーションがうまくとれていないと、イテレーションの成果物として問題が生じる可能性があるため、スクラムを組むように、チームで一丸となって開発を進めることが大切なのです。

エクストリーム・プログラミング(XP)

エクストリーム・プログラミング(Extreme Programming)は初期に立てた計画はあってもよりも技術的な部分を重視する手法です。最初の段階で計画を固めるのが難しい場合に有効で、XPと略されることもあります。この手法はアジャイル開発のなかでも、プログラマーを中心とした開発手法といえるでしょう。
開発チームの中では、開発を円滑に進めるためにチーム間やクライアントとの「コミュニケーション」、クライアントからのフィードバックからクライアントが本当に必要としている機能を聞き出して実装するための「フィードバック」、初期段階の企画をシンプルにすることで企画案の完成度よりも開発段階の柔軟性を重視する「シンプル」、開発途中でも思い切って仕様変更に立ち向かう「勇気」、メンバーと協力しあえる「尊重」といった5つの価値を共有されることが期待されます。

ユーザ機能駆動開発(FDD)

ユーザ機能駆動開発(Feature Driven Development)とは、顧客にとっての機能価値(feature)に重点を置き、機能を分割して開発を進める手法のことです。
開発を進めるにあたり、クライアントが希望する機能をリスト化し、優先順位の高いものから取り掛かります。
これには顧客側のビジネスの可視化を行う必要があるため、あらかじめビジネスモデリングを実施する必要があります。

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

システムやソフトウェアやに適した開発手法を選ぶには、それぞれの特性への理解が必要です。メリットの多いアジャイル開発ですが、デメリットも考慮したうえで最適な開発手法を選びましょう。

アジャイル開発のメリット
不具合や問題が発覚した場合に、戻る工数が少ないことは大きなメリットです。ウォーターフォール開発では、初期に決定した仕様設計を重視するため、トラブルの発生した箇所によっては戻る工数が多くなってしまい、それに伴って、労力や時間が膨大に膨らんでしまうこともあります。一方で、アジャイル開発の場合では、小さな単位で計画から「計画」→「設計」→「実装」→「テスト」と繰り返すため、テストで問題が発生しても戻るのは少ない工数で済むのです。

また、計画段階では、綿密に仕様設計を立てずに、開発の途中段階でも顧客の要望を聞いて開発を進められます。仕様変更や追加にも対応できるため、顧客のニーズに最大限応えられるのも大きなメリットといえます。

アジャイル開発のデメリット
初期の計画段階で詳細に仕様設計を決めないため、開発の方向性が大きくブレやすいというデメリットがあります。改善を繰り返すうちに、当初の計画から反れてしまっていたという事態にならないよう注意が必要です。

ウォーターフォール開発で進める場合は、はじめに開発スケジュールを決めるため、進捗状況を把握できますが、アジャイル開発では計画をおおまかにしかに立案しないため、スケジュールや進捗状況が把握しにくく、全体の把握や統率が難しくなります。

そのため、チーム間で意思疎通を図るだけでなく、ある程度の変化を許容する、クライアントとも定期的に意見をすり合わせるといった工夫が必要でしょう。

終わりに

ここまで、アジャイル開発について概要やメリット・デメリットなどについて解説してきましたが、いかがでしたでしょうか。
アジャイル開発は、現代の動向に適しており、ウォーターフォール開発に代わって主流になりつつあります。

しかし、必ずしも全てのケースで適しているわけではありません。
開発の内容によって、適した開発手法が異なるので、どちらが適しているか適宜判断するようにしましょう。

     

Otherカテゴリの最新記事