ALLSPICE

スパイスファクトリー株式会社のメンバーが運営するWeb開発メディア

アジャイル開発とは? – システム開発を発注する時に知っておきたい開発手法の話

Posted by 三澤悠人 | |システム開発
アジャイル開発とは? – システム開発を発注する時に知っておきたい開発手法の話

システムやサービスの受託開発の会社を探すとき、実績や予算、納期など気になる部分は色々あるかと思います。
今回はそこから一歩踏み込み、「どのような開発手法でシステムの開発を行う会社か」という視点から開発会社を見るために、システムの開発手法と、その一つであるアジャイル開発についてご紹介したいと思います。

良いシステム開発の要となる”開発手法”

良いシステム開発とは

システム開発手法について理解するためには、まずどのようなシステム開発が良いシステム開発か? ということを考えなくてはいけません。
「良いシステム開発」というのは抽象的な表現になってしまいますが、ここでは以下の二つの条件を満たすものを「良いシステム開発」として仮に定義していきたいと思います。

  • 条件内でシステムが完成すること
  • 完成したシステムがその時に必要な要件を満たしていること

当たり前の事のように思えるかもしれません。
しかし、この二つを満たすことができないケースは少なくありません。

「実際に開発を始めてみたら想定以上に必須機能が多く、さらに複雑で高度な機能も多いため、予算や納期の中での完成が困難という事が開発の途中で判明」

「システムを利用する業務のフローが開発当初とは変わってしまい、システムが完成したは良いが大幅な修正を行わないと使い物にならない」

このような事態を回避するために重要となるのが、どのように開発を進めていくか、つまり開発手法です。
そして、どのような開発手法を選択するかは「良いシステム開発」だけでなく、より使いやすいシステムやサービスを作るためにも重要になります。

二つの開発手法

システム開発を大きく左右する開発手法ですが、現在システムの開発手法は大きく分けて二種類あります。

  • ウォーターフォールモデル
  • アジャイルソフトウェア開発(アジャイル開発)

一つ目のウォーターフォールモデルは古くから使われている開発手法です。ウォーターフォールモデルは下記のように開発の各フェーズを順番にこなしていく、シンプルな手法です。

  1. 要件定義(どのようなシステムを作るかの決定を行うフェーズ)
  2. 設計(定義された要件を具体的にシステムでどのように実現するかを決定するフェーズ)
  3. 実装(実際の開発フェーズ)
  4. テスト(開発されたシステムが要件を満たし問題なく動作しているかを確認するフェーズ)

対して、アジャイル開発はシステムを機能ごとに小さく分割し、その小さな機能単位に開発、リリースを繰り返していく手法です。

アジャイル開発とウォーターフォールモデル

海外ではアジャイル開発が主流となりつつありますが、まだ日本ではアジャイル開発を採用している会社は少ないのが現状です。
しかし、プロジェクトによって適切な開発手法を選択することは、良いシステム開発のために重要です。
今回は、その中でも徐々に広まりつつあるアジャイル開発について、その特徴やメリット、使いどころを解説していきたいと思います。

アジャイル開発とは

アジャイル開発とはどのような開発手法か

アジャイル開発とは開発の指針を示す方法論の事を意味しており、アジャイル開発に含まれる開発手法には様々なものがあります。
その中で共通して言えるのは、アジャイル(agile : 機敏な、素早い)という言葉がさすように、小さい開発スパンの繰り返しによって螺旋階段のようにシステムの開発を行っていく、という部分です。

具体的に言うと、アジャイル開発は開発するシステムを機能単位に小分けにし、その小さな単位ごとに要件定義、設計、実装、テスト、という工程を繰り返していきます。
このときのスパンはプロジェクトにもよりますが、大体1週間から1カ月くらいの長さになることが多いと言われています。

また、アジャイル開発の特徴の一つとして、最初の開発スパンが完了した時点で実際にある程度動くものに触ってみることができる、という点が挙げられます。

アジャイル開発の原則

アジャイル開発の定義はアジャイルソフトウェア開発宣言に記載されており、そこではアジャイル開発の原則についても触れられています。
ここで宣言されているアジャイル開発の原則・前提とは、計画や契約よりも顧客の満足を優先し、その実現のために変化に対応し価値のあるシステム開発を行う、と言うものです。
そのためにはまず、最低限動くシステムをなるべく早く開発すること。そして、それをベースとしてエンジニア同士はもちろん、クライアントとも密にコミュニケーションを取り合いながら開発を進めて行くこと。その上で、変化する状況に柔軟に対応し、より良いシステムを開発するために継続的に取り組み続けることを目標とします。
これが、アジャイル開発の根底にあるスタンスです。

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

変化に対する柔軟性

アジャイル開発では、小さな機能単位に分割して少しずつ開発してきます。
そのため、システムを利用する業務の変更や状況の変化があった場合にも、それに合わせてシステムの軌道修正を行いやすい、と言うメリットがあります。
ウォーターフォールモデルで開発を行った場合、要件変更の影響があまりに大きく、対応に膨大な時間がかかってしまうような状況が発生するリスクが高くなります。

早い段階で動くシステムに触ることができる

完成したシステムに触ってみたらイメージしていたものと違っていた、と言うケースは少なくありません。
どのようなシステムが欲しいのかを、いきなり100パーセント開発会社に伝えるのはかなり難しい事だと思います。
まず最低限動くものを作ってもらい、それをベースにどのようなシステムにするかを話し合いながら徐々に開発をしていく、という方が開発を依頼する側にとっては少ない負担で理想のシステムを作る事につながります。

欲しいシステムを一歩一歩目指すことができる

どのようなシステムが欲しいか完成形が具体的にイメージできていなかったとしても、欲しいシステムを目指して一歩一歩開発を進めていく事が出来ます。
これは上記の二つのメリットを合わせたメリットです。
少しずつ出来上がっていくシステムを実際に触り、そこから次に作る機能の決定や既存の機能の修正を行い、さらに段階的なリリースをすることで、システム開発を進めながらPDCAサイクルを回すことができます。

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

予算と完成時期の見通しを立てづらい

少しずつ機能を開発し、変更にも柔軟に対応していくという事は、裏を返せば先の見通しが立ちづらいという事になります。
もちろん、アジャイル開発の場合も納期や予算のラインをある程度決めて開発を行なっていきますが、そこに収めるためには柔軟に機能の取捨選択などを行うことが求められます。

難易度が高い

短いスパンでの開発を繰り返すため、システム開発を行うプロジェクトのコントロールが難しくなります。
さらに、開発に携わるエンジニアに求められるレベルも格段に上がります。
技術についてはもちろん、しっかりコミュニケーションをとり、仕様やクライアントの事を深く理解し、何を求められているか自分で考えることができる能力がエンジニアひとりひとりに求められます。

クライアントとの協力が必須

クライアントは、予算と納期と要件を開発会社に丸投げしてあとはすべて任せる、という事が出来なくなります。
エンジニアと密にコミュニケーションを取り合いながら、次にどの機能を追加もしくは修正するかを決定し、要件に変更がある場合はそれについて議論を行う。
このように、一歩ずつシステムの完成に向けてエンジニアとのやり取りを頻繁に重ねていく必要があります。

どのような時にアジャイル開発が向いているか

アジャイル開発が向いているケースとして、例えば、システムやサービスを必要としているが、具体的にどのようなものが必要なのかが明確ではない場合などが挙げられます。
このような場合、とりあえず最低限動くものに触りながら必要な機能を順番に決定していき、試行錯誤を行いながらシステムやサービスを完成に近づけていくことができます。
より具体的な例として以下のようなケースが挙げられます。

  • 業務効率化のために専用のシステムを開発して欲しいが、どのようなシステムであれば業務をより効率化できるのかがわからない
  • 自社で持っているデータやノウハウを活かして新しいサービスを展開したいが、どのようなサービスがターゲットに求められているかがわからない

これらのケースではアジャイル開発の持つ速度、柔軟性が大きく影響してくるでしょう。
特に新しいサービスの開発については、最低限の機能のみを開発したリスクの少ない状態でリリースを行い市場の反応を見ることができるため、とてもアジャイル開発と相性のいいケースと言えます。

逆に、アジャイル開発があまり向いていないケースとしては、既存のシステムのリプレイスを行う場合、欲しいシステムの要件が細部まで明確に決まっている場合などが挙げられます。

まとめ

開発手法がプロジェクトの成功を左右する

どのように開発を行っていくか、というガイドラインである開発手法は、プロジェクトの成功やどのようなシステムが出来上がるか、という部分に大きく影響します。
システムが必要な背景やどのようなシステムを目指したいかによって、どの開発手法を採用するかを慎重に決定しなければいけません。

アジャイル開発という選択

必要なシステムやサービスのイメージが細部まで明確に出来ている場合には、ウォーターフォールモデルによる開発が適切であるかもしれません。
しかし、どのようなシステムやサービスが欲しいのかがはっきりと定まっておらず、環境に合わせながら柔軟に開発を行なっていきたい場合には、アジャイル開発が最適な開発手法です。
アジャイル開発は、システムやサービスを育てる開発手法と言えます。

三澤悠人
About The Author

三澤悠人

事業部長

東京芸術大学を卒業した後、雑誌の編集アシスタントとして働いていましたが、「これからのものづくりにはITが必須!」と感じ、未経験からエンジニアになりました。エンジニアになってからはJavaの証券系の案件をこなし、その後はPHPの案件にキャリアチェンジ。スパイスファクトリーの創業後はCakePHPの3.x系をメインにしつつ、pythonやrubyにも手を出しています。現在は客先との打ち合わせによる要件定義から設計、実装、インフラ周りまで広く関わり、その中でも特に業務フローの整理やDB設計が好みです。