アジャイル開発とは

アジャイル開発とは

「アジャイル開発という言葉はたまに耳にするけど、具体的に何のことを言っているのかよく分からない」という人は多いのではないでしょうか。アジャイル開発とは、現在主流となっているシステム開発の手法のことで、アジャイルは「素早い、機敏な」という意味です。この名前の由来は、リリース期間を短くすることが出来るという所から来ていると言われています。アジャイル開発の特徴は案件定義、設計、開発、テスト、運用といった開発工程を、機能ごとに小分けにしたサイクルで繰り返すことです。この特徴は「プロジェクトに変化はつきもの」という考え方が根幹にあるため、仕様変更が起きても柔軟に対応できるようになります。従来はウォーターフォール開発という手法が取られていました。これからなぜウォーターフォール開発からアジャイル開発へと主流が変化していったのかについて解説していきます。

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

ウォーターフォール開発とは基本計画、外部設計、内部設計、プログラム設計、プログラミング、テストといった工程を順番に行う手法です。前の工程に戻らない事が前提、つまり下流から上流に戻らない事を水の流れに例えてウォーターフォール開発と呼ばれています。一つの工程が終わるごとに成果を文書化できるのでシステム管理を行う人にメリットがあるのに対して、後から仕様変更が行いづらい為、ユーザーの声が反映されにくいとったデメリットもあります。

ウォーターフォール開発からアジャイル開発へ主流がシフトした理由

ウォーターフォール開発からアジャイル開発へ主流がシフトした理由を知るためには、より二つの開発手法をイメージする必要があります。例えば機能A、機能B、機能Cがあるシステムの開発を行うとします。ウォーターフォール開発でこのシステム開発で行うと機能A、機能B、機能Cの企画が完了したら機能A、機能B、機能Cの要件定義を行う、といった流れになります。全体の要件定義や設計が完了してからでないと開発に着手できない為、開発が始まるまでに時間が多くかかってしまいます。
それに比べてアジャイル開発でこのシステム開発を行うと、機能Aの企画、要件定義、設計、実装、テスト、納品を行う、それが完了したら機能Bの企画、要件定義、設計、実装、テスト、納品を行う、といったように、機能ごとにサイクルを回して開発します。これにより途中で仕様変更が起きても大きな追加予算が必要でなくなったり、全体を1つ前から見直して納期に間に合わないといった問題も起きにくくなります。これらの理由によりアジャイル開発を使った開発が多くなりましたが、ウォータフォール開発が完全に劣っていてアジャイル開発が優れているというわけではありません。アジャイル開発にもデメリットがありますし、ウォーターフォール開発の特徴を活かせるシステム開発ならば、ウォーターフォール開発で行うこともあります。

アジャイル開発の始まり

アジャイル開発という考え方が生まれたのは2001年です。アメリカのユタ州に集まっていた17名の技術者や、プログラマーによって提唱されたのが始まりです。彼らはよりよい開発手法の確立のために方針の宣言を出しました。その方針を簡単に説明すると、プロセスやツールより個人との対話を優先、契約交渉よりも対話を優先、計画に従うよりも柔軟な変化を優先といった考え方です。

アジャイル開発の関連用語

アジャイル開発の中では様々な用語が使われますが、その意味を知らなければ何の話をしているのかもわからないという状態になってしまいます。アジャイル開発を理解する上で知っておくべき用語を解説していきます。

ユーザーストーリー

アジャイル開発において要件定義の中で使われる考え方のことです。ユーザーが実現したいこと、ユーザーにとって価値のあるものをまとめた文書の事を指します。要件定義から開発、フィードバックのサイクルを繰り返す中で使われます。

スプリント

別名イテレーションとも呼ばれています。イテレーションは反復、繰り返すという意味で、アジャイル開発の要件定義から開発、フィードバックのサイクルの単位を呼びます。アジャイル開発の1つのスクラム開発ではスプリントとも呼ばれています。イテレーションとスプリントの意味に特に違いは無いので、同意義と覚えておくと良いでしょう。

ベロシティ

開発チームが1回のスプリント(イテレーション)で実現することができたユーザーストーリの規模の合計値をベロシティと言います。チームの開発の進捗状況を確認する為にも必要な考え方です。

リリース計画

リリース計画とはプロジェクトの目標地点、イテレーション(スプリント)の長さ、ユーザーストーリーの優先度などを決めることをいいます。アジャイル開発ではまず、このリリース計画を立ててから開発を始める場合が多いです。ただし、計画を綿密に練ってから開発を進めるウォーターフォール型開発とは違い、アジャイル開発のリリース計画は流動的なことに留意しなければなりません。

アジャイル開発の手法

アジャイル開発にも様々な開発手法がありますが、ここでは代表的な3つの手法について解説したいと思います。

スクラム

スクラム開発は最もメジャーなアジャイル開発手法で、チーム開発を効率的に進めることができるフレームワークです。チームラグビーのスクラムが語源になっています。スクラム開発ではメンバー自身がイテレーションごとの計画を立案したり検索、動作確認を行うので、チーム内のコミュニケーションを疎かにしていると失敗する可能性がある開発手法です。よって、チームのコミュニケーション能力が求められる開発手法でもあります。スクラムには、短期の自己組織化とイノベーションを生む環境をつくりだすといった効果があります。

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

エクストリームプログラミングができた由来は、ケント・ベックとウォード・カニンガムがパタン・ランゲージ(pattern language)と呼ばれる建築理論を参考に、開発の成功事例の中からパターンを見つけることが出来たことがはじまりです。その後、彼らは自らが参画したシステム開発において、集めたパターンを実践しながら調整を加えて、エクストリームプログラミングという名前でそのパターンを発表しました。ソフトウェアの開発現場における経験則を極端(=エクストリーム:extreme)に実践するという意味で命名されました。
エクストリームプログラミングは技術面を重視したプログラマー中心の開発手法です。コミュニケーション、シンプル、フィードバック、勇気の4つの価値をチーム内で共有する事が特徴です。この4つの価値についてより詳しく説明すると、「コミュニケーション」はステークホルダー間のコミュニケーションを重視するという考え方です。「シンプル」は設計は必要最低限に留めるという考え方で、「フィードバック」はテストの頻度を上げ、フィードバックを重視するという考え方、「勇気」は仕様変更や設計変更を恐れないという考え方です。顧客もチームの一員であるという考え方があり、顧客と共にシステムを作り上げるという特徴もあります。

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

ユーザー機能駆動開発とはFeature Driven Development、通称FDDの事で、業界におけるベストプラクティスを複合したものです。FDDを一言で表すと顧客にとっての機能価値を最大化させることを重視した開発手法です。ユーザーのビジネスを視覚化して、反復して開発を繰り返すのが特徴です。内容は少々複雑なので、大まかな概要のみで詳しい内容は割愛します。実際にFDDの知識が必要になった時などに改めて詳しく調べるのがよいでしょう。

アジャイル開発がもたらすもの

アジャイル開発は迅速にソフトウェアを開発出来る反復増加型の開発です。開発側とビジネス側が完成させた機能を通じて、コミュニケーションを取りながら全体の完成を目指すことができます。アジャイル開発の強みは変化に柔軟に対応できることが挙げられますが、実はそれだけではないということについても解説していきます。アジャイル開発を行うことで、開発側はすぐにフィードバックを受けることができますし、ビジネス側は現物に触れることであらたなアイディアが湧くこともあるでしょう。つまり、アジャイル開発は変化に対応できる側面だけではなく、変化を作り出すという側面もあります。アジャイル開発の仕組みがシステムの変化をもたらすのです。

まとめ

いかがだったでしょうか。今回は簡単にアジャイル開発の概要や開発手法の紹介を行いました。今回は大まかにしか解説していないスクラム、エクストリームプログラミング、ユーザー機能駆動開発も一つ一つが奥深いもので、それぞれに考え方や背景がありますので、より詳しく知りたい方はこれらのキーワードを検索して調べてみるのが良いでしょう。

開発現場ではプログラミング言語の知識だけではなくこういった開発手法の知識も求められます。知識の偏りが出ないように、勉強することが大切です。プログラミング言語のみの勉強ではなく、開発手法の勉強や、ソースコード管理ツールの使い方の勉強、データベースの勉強など、開発に携わる人が学ぶ範囲は広いので、まずはこういった概要を学ぶことから初めていきましょう。最後までお読みいただきありがとうございました。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です