こんにちは、SOLASTER BizDevの徳永(@kotaxi_ru)です!

今回はIT開発手法の一つで近年主流になりつつある「アジャイル開発」について解説します。

アジャイル開発は変化が激しい現代にも対応しやすいので、これからIT開発を発注する方やまだIT開発の発注に慣れていない方はぜひ参考になれば嬉しいです。

この記事を読んで欲しい人
  • IT開発の発注が初めてor慣れていない
  • ウォーターフォール開発について詳しく知りたい
  • オフショア開発に興味がある
  • ロシアやウラジオストクに興味がある
  • SOLASTERに興味がある

弊社SOLASTERでは、日本から近いロシアのウラジオストクでオフショア開発事業を展開しています。

IT開発の人的リソースでお困りであれば、お気軽にお問合せください!

アジャイル開発とは?

アジャイル開発って最近よく聞くけど、どんな開発なんだろう…?

アジャイル開発とは、近年主流になっているソフトウェア開発手法で開発工程を機能単位に分解し、それぞれ「計画→開発→テスト」のサイクルを短期間で回しながら開発を進めていきます。

これは従来のウォーターフォール開発の欠点である「開発の途中で修正しにくい」のを改善するために作られており仕様変更に強いのが特徴です。

アジャイル開発では優先度の高い重要な機能から手をつけられるので、短期間でリリースをしその反応を見ながら仕様変更を重ねプロダクト価値の最大化を目指します。

ちなみにアジャイルはAgile=素早いという英単語からきています。

アジャイルソフトウェア開発宣言

”アジャイル開発”という考え方が生まれたのは2001年にアメリカのプログラマーや技術者によって提唱された「アジャイルソフトウェア開発宣言」が始まりです。

宣言の内容は以下の通りです。

《アジャイルソフトウェア開発宣言》

私たちは、ソフトウェア開発の実践

あるいは実践を手助けをする活動を通じて、

よりよい開発方法を見つけだそうとしている。

この活動を通して、私たちは以下の価値に至った。

プロセスやツールよりも個人と対話を、

包括的なドキュメントよりも動くソフトウェアを、

契約交渉よりも顧客との協調を、

計画に従うことよりも変化への対応を、

価値とする。すなわち、左記のことがらに価値があることを

認めながらも、私たちは右記のことがらにより価値をおく。

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

アジャイル開発の大まかな流れ

なるほど、短期間で開発サイクルを回していくのがアジャイル開発の特徴なんだね。となると大まかな開発の流れはどんな感じになるんだろう…?

ここではアジャイル開発での大まかな流れを解説します。

アジャイル開発では、「計画・開発・リリース」の3つを反復的に繰り返すことで効果を発揮します。

アジャイル開発の基本3点

上記の「計画・開発・振り返り」のサイクルを機能ごとに短期間で繰り返すことで、サービスの課題やユーザーの反応に対し柔軟に対応できるようになります。

リリース計画

設計や仕様を最初の「リリース計画」というプロセスで決めます。リリース計画は細かい要件や機能を決めるためではなく、あくまで開発を進めるにあたって大まかな方向性を示すくらいのものです。

これはアジャイル開発には「開発プロセスの途中で仕様変更があるのは当然のこと」という前提があるため、アクシデントなどにも柔軟に対応できるようになります。

イテレーション

リリース計画プロセスが終われば、イテレーション(反復作業)という開発プロセスに入っていきます。

イテレーションでは機能ごとに

  1. 計画
  2. 設計
  3. 実装
  4. テスト&リリース

のサイクルを短期間で繰り返すことでプロダクトの質を高めていきます。

ウォーターフォール型開発と他の開発手法との違いは?

なるほど、聞いてる感じオーソドックスなウォーターフォール型開発とは全然違う感じするね…!

ということで、ここからは長く日本の開発現場でも採用されているウォーターフォール型開発や他の開発手法との違いをみていきましょう。

ウォーターフォール型開発とは?

ウォーターフォール型開発はシステム開発で用いられる開発手法のうちの1つで、「要件定義」「設計」「実装」「テスト」などの工程に分けて、作業を一つ一つ完成させて順番に進めていく方法です。

アジャイル型やラボ型など数ある開発手法の中で、歴史が古いかつ認知度の高いので現在でも大規模なプロジェクトを中心にシステム開発で用いられています。

プロトタイピングとは?

プロトタイピングモデルは、本格的な設計が始まる前に簡単なプロトタイプ(試作品)を開発しユーザーや顧客によってその試作品の評価が行われる開発モデルです。

ではこのプロトタイピングの工程はどこに組み込まれるかというと、要件定義と基本設計の間に組み込まれます。

プロトタイピングモデルのメリットは、顧客の要件と開発者の齟齬などを早期に発見&解決できるため最終工程から大きく手戻りしてしまうリスクを事前に防ぐことができます。

スパイラルモデルとは?

スパイラルモデルは設計・実装・テストのシステム開発の一通りの工程を繰り返し、成果物(システム)の質を向上させていく開発モデルです。

この開発モデルのメリットは、品質が高くない状態でも一旦成果物としてアウトプットすることで顧客にソフトウェアがどのように動くのかといったイメージを、早い段階から共有することができます。

開発サイクルをグルグルと渦のように回していくイメージなので、スパイラルモデルと名付けられました。

アジャイル開発と他の開発手法との違い

アジャイル開発ウォーターフォール型開発プロトタイピングスパイラルモデル
向いているソフトウェア・システムWebアプリなどユーザーの反応で改善を繰り返す必要があるソフトウェア銀行ATMなどの基幹系システム小中規模のプロジェクト品質重視だが、途中で仕様変更が生じる可能性がある開発プロジェクト
仕様・要求「開発途中で仕様が変更になる」という前提の元にある為、仕様変更が頻繁に発生する仕様や開発する機能などを厳密に決定してから実装に取り掛かるため、開発途中での仕様変更は基本的にはしない本格的な設計が始まる前に簡単なプロトタイプ(試作品)を開発しユーザーや顧客によってその試作品の評価が行われる開発モデル設計・実装・テストのシステム開発の一通りの工程を繰り返し、成果物(システム)の質を向上させていく開発モデル
開発の工程システムやソフトウェアの機能ごとに「計画→開発→テスト」という工程を繰り返す全ての機能について「要件定義→基本設計→詳細設計→実装→単体テスト→結合テスト→受け入れテスト(納品)→リリース」という工程を一回限り行う。後戻りは想定していないウォーターフォール型開発の「要件定義」と「システム設計」の間にプロトタイピング工程が加わる「分析→設計→実装→テスト&評価」の工程を一定の品質に到達するまで繰り返す
納品・リリースのタイミング開発が完了した機能から随時納品またはリリース全ての開発やテストが完了した後全ての開発やテストが完了した後一定の品質に到達した後

アジャイル開発でよく使われる用語

アジャイル開発をするにあたって、覚えておいた方がいい用語とかある?

ここでは、よりアジャイル開発の理解を深めるためによく使われる用語を解説していきます!

ユーザーストーリー

ユーザーストーリーとは

  • ユーザーが開発を通して実現したいこと
  • 何がユーザーにとって価値があるのか?

といったといわゆる「要件」を簡潔にまとめた文章をいいます。

Twitterのユーザーストーリーを例に取ると

”ユーザー”が”140字以内の短い文章”を”ツイート(発信)”できる

のように、「誰が」「何を」「どうする」を端的に表しています。

イテレーション(スプリント)

イテレーション(iteration)とは英語で「反復・繰り返し」といった意味で、効率よく開発を進めていくアジャイル開発の1サイクルを単位にして示したものです。

また同じ意味合いで使われる言葉で「スプリント(sprint)」というものがありますが、後で解説するスクラムというアジャイル開発手法の一つで使われます。

基本的にイテレーションの期間は1~2週間ほどのサイクルで回して、その期間ごとに機能をリリースします。

ベロシティ

ベロシティ(velocity)とは英語で「速度」という意味で、1回のイテレーションで開発が完了したユーザーストーリー(要求)の進捗状況を計るためのものとなります。

簡潔に表現すると、ベロシティは開発の進捗具合を数値化したものですね。

開発チームの進捗具合を可視化することで、開発を非常に把握しやすくなります。

リリース計画

リリース計画とは、読んで字のごとく「いつまでに、どの機能をリリースできるか?」という開発プロジェクト全体を管理するためのものです。

リリース計画フェーズで決めること

  • 開発プロジェクトのゴール
  • イテレーション(1開発サイクル)の期間
  • ユーザーストーリー(要件)の優先順位

アジャイル開発を行う場合、初めに「いつまでにどの機能をリリースできるか」というプロジェクト全体を管理するためのリリース計画を立てます。

そしてリリース計画はウォーターフォール型開発のように最初に作ったら終わりということではなく、ベロシティを算出しつつイテレーションの終了時などその都度更新します。

アジャイル開発の開発手法

アジャイル開発は色々な手法があるって聞いたんだけど、具体的にどういうものがあるの?

アジャイル開発という言葉は様々な開発手法の総称なので、ここでは各々のアジャイル開発の開発手法を解説します!

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

エクストリーム・プログラミング(Extreme Programming)はXPと略されることが多い開発手法の一つで、顧客とのコミュニケーションを頻繁に行い途中の仕様変更にも柔軟に対応できるのが特徴です。

XPは「技術を駆使して柔軟に仕様変更へ対応する」というのをゴールとしているので、技術者(プログラマー)中心の開発手法と言われています。

XPで重視されている考え方
  • コミュニケーション:認識の齟齬を減らす
  • シンプル:企画の内容をシンプルで分かりやすくする
  • フィードバック:顧客からのフィードバックを参考に必要な機能を洗い出す
  • 勇気:開発途中でも大胆に変更する勇気
  • 尊重:チームメンバーをお互い尊重

顧客と開発サイドが一体となって柔軟により良いソフトウェアを開発していきます。

スクラム開発

スクラム開発とはラグビー用語のスクラム(Scrum)が語源で、ラグビーのスクラムのようにプログラマー(技術者)と顧客ががっちり一体となって行うアジャイル開発の開発手法です。

スクラム開発は

  • 透明性(Transparency)
  • 検査(Inspection)
  • 適応(Adaptation)

の3つに基づいて行われます。

スクラム開発ではチームメンバー自身がプロジェクトの企画・設計・実行まで進行するので、チーム内でのコミュニケーションが非常に重要な要素となります。

ただコミュニケーションが滞っていたり不足していたりすると、リリース後に認識の齟齬が出て失敗してしまう可能性があるのでデイリースクラム(朝会)を設置するなどして仕組みとしてもコミュニケーションを増やしていきましょう。

ユーザー機能駆動開発

ユーザー機能駆動開発(Feature Driven Development)は「ユーザーにとっての機能価値」を重視した開発手法です。

顧客のビジネスを見える化し、必要な機能を洗い出して本質的な要望に寄り添うため品質が高くなりやすい開発と言われているのが特徴です。

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

ここからはアジャイル開発のメリットを改めてご紹介します!

仕様変更にスムーズに対応できる

アジャイル開発は昔から主流のウォーターフォール型開発のデメリットである「途中で仕様を変更しにくい」から生まれた開発手法と言われています。

「途中で仕様が変更になる」という考えを前提で取り入れられてるので、開発の初期段階で厳密に仕様は決定しません。

機能単位で細かく開発の工程を繰り返すので、修正や仕様変更が途中で発生しても後戻りしやすくなります。

変化の多い現代において、プロジェクトの軌道修正は常に必要になってくるのでアジャイル開発は非常に時代に沿った開発手法と言えます。

開発のスピードが速くユーザーの意見が反映されやすい

これまで主流だったウォーターフォール型開発は実装(プログラミング)を行うまでに要件定義や設計など、細かい書類の作成や調整が必要でした。

ですがアジャイル開発では大まかな仕様を決めて機能ごとに開発サイクルを回していくので、リリースまでのスピードが非常に速いです。

またリリースごとにユーザー(顧客)の意見を取り入れながら仕様を変更したり修正したりするので、最終的に質の高いアウトプットが期待されます。

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

もちろん、アジャイル開発のデメリットもあります。

全体スケジュールの把握が難しく、長期的なスケジュールが立てにくい

アジャイル開発は開発途中の仕様変更に対する柔軟さが一つのメリットではありますが、これが逆にデメリットとなる場合があります。

機能単体でのスケジュールは把握しやすいですが、途中で仕様変更が多いためプロジェクト全体のリリースや開発スケジュールが把握しづらくなってしまいます。

また従来のウォーターフォール型開発で主にやっていてアジャイル開発に慣れていない開発者の場合、開発に対するストレスがより出てくる可能性があるので十分に配慮して取り組みましょう。

方向性が定まりにくい

ユーザーの意見を反映しやすいアジャイル開発ですが、その反面プロジェクトの方向性がブレやすくなってしまいます。

小さな仕様変更を開発途中で繰り返すうちに、本来の目的や方向性が見えにくくなってしまうのもアジャイル開発のデメリットの一つです。

なので定期的に全体の振り返りをし、チームの方向性を定めるようにしていきましょう。

最終的な予算が分かりにくい

アジャイル開発では頻繁に仕様変更が起こるので、追加の予算が急に必要になるケースが度々発生します。

ウォーターフォール開発と違って最初に予算をきっちり決めれないので、最終的な開発費用が思ってたよりかさんでしまうこともあります。

アジャイル開発に向いているケース

なるほどね…じゃあアジャイル開発が適した開発ってどんなのがあるの?

では、アジャイル開発が向いているケースを3つご紹介します。

柔軟な開発をしていきたい

アジャイル開発は途中で仕様変更が何回も必要な柔軟さが必要とされているプロジェクトに向いています。

大まかな方向性だけを最初決めて、ユーザーの意見を取り入れながら柔軟に開発を進めていくことができます。

迅速に新規サービス/ソフトウェアをリリースさせたい

とにかくスピードを重視して、迅速にソフトウェアをリリースさせたいケースもアジャイル開発と非常に相性がいいです。

機能ごとにリリースを繰り返し開発サイクルを回していくので、即座にユーザーの反応を取り入れることができるようになります。

新規事業の開発などにも非常に適しています。

成果物(ソフトウェア)を継続的に改善していきたい

SaaSなど製品やサービス自体がソフトウェアとなっている場合などにも、アジャイル開発は非常に適した開発手法です。

各現場からフィードバックを受けながら短期間のサイクルで改善を繰り返していくことで、ユーザーの満足度向上に繋がります。

アジャイル開発が適していないケース

開発途中での仕様変更やリリース後の修正が前提になっているアジャイル開発は、基幹系システムや生命に関わる医療システムなど失敗が許されない開発は適しておらず、ウォーターフォール型開発の方が適しています。

また大規模な長期開発や売上が十分でない開発などは、企画プロセスからしっかり練り直すことが必要になってきます。

まとめ

アジャイル開発はそれまで主流だったウォーターフォール型開発の欠点を改善するために生まれました。

開発スピードが非常に速くユーザーの意見を取り入れ急な仕様変更に対応しやすいが、全体スケジュールの把握が難しかったりコストがかさんだり方向性が定まりにくくなるという弱点もあります。

ぜひプロジェクトに合わせたシステム開発をするための参考になれば幸いです!

弊社SOLASTERでは、日本から近いロシアのウラジオストクでオフショア開発事業を展開しています。

IT開発の人的リソースでお困りであれば、お気軽にお問合せください!