「アジャイル開発」は、昨今のソフトウェア開発において広く採用されている開発手法です。企業の開発担当者やエンジニアを目指す人のなかには「アジャイル開発に携わりたい」「アジャイル開発を導入したい」「アジャイル開発を学びたい」という人も多いでしょう。
この記事では、アジャイル開発に関心を持つ全ての方々が押さえておくべき基礎知識について、わかりやすく解説します。
アジャイル開発を成功させたい方はもちろん、アジャイル開発に関して理解を深めたい方も、ぜひ参考にしてみてください。
- もくじ
1.アジャイル開発とは?概要と歴史背景
昨今、採用されることが増えている「アジャイル開発」の概要と歴史背景について解説します。
1-1 アジャイル開発の概要
アジャイル開発とは、ソフトウェアの開発内容を機能別などで細かいサイクルに分け、サイクル単位で開発を進めていく開発手法です。
個々のサイクルには、要件定義・設計・実装・テスト・リリースといった工程が含まれます。短期間のサイクルを積み重ねながら、1つのソフトウェアを作り上げていきます。
アジャイル開発の「アジャイル」は、「機敏な」「俊敏な」などを意味する英語のAgileです。その意味のとおり、開発を機敏に進めていけることが強みであり、小回りの利く開発手法といえます。
1-2 アジャイル開発の歴史背景
ソフトウェア開発が日本で広まった頃、開発手法の主流は「ウォーターフォール開発」でした。ウォーターフォール開発は、流れ落ちる水のように直線的に工程を進めていき、1つのソフトウェアを作り上げていく開発手法です。
ウォーターフォール開発では、初期段階で決めた開発計画に沿って進めていき、前の工程に戻ることは基本的に想定しません。そのため、顧客の要求が変わると多大な手戻り工数が発生し、開発スケジュールの遅延を起こすリスクがあります。こうした問題に頭を抱える現場は少なくありませんでした。
そこで誕生したのが、アジャイル開発です。
アジャイル開発は、2001年に発表された「アジャイルソフトウェア開発宣言」で体系化され、広く普及していきました。
★「アジャイルソフトウェア開発宣言」とは?
アジャイルソフトウェア開発宣言は、アジャイル開発に関する価値観・原則を整理した文書です。
軽量開発手法に関するエキスパートが、アメリカで深い議論を交わした末に体系化しました。「Agile」という言葉が使われるようになったのも、この文書がきっかけとなっています。
アジャイル開発には多くの手法やプラクティスがありますが、どのようなアジャイル開発チームであっても、これらの価値や原則を根底に持っていることが重要です。
アジャイルソフトウェア開発宣言では、4つの価値・12の原則が中核になっています。詳しくは、次の記事をご覧ください。
2.アジャイル開発のメリット・デメリット
アジャイル開発にはメリットはもちろん、デメリットもあります。主なメリット・デメリットを押さえておきましょう。
2-1 アジャイル開発のメリット
アジャイル開発の主なメリットは、次の3つです。
リリースを高速化できる
アジャイル開発では、1サイクルの成果物が完成するたびにソフトウェアをリリースできます。
1サイクルあたりの期間はウォーターフォール開発よりも短いため、従来と比べてリリースの高速化が可能です。
変化に柔軟に対応できる
1サイクルが短いということは、次のサイクルが早く訪れることを意味します。
つまり、そのサイクルで判明した問題に対して、次のサイクルで早期に対応することが可能です。リリース周期が短い分、顧客からのフィードバックも頻繁に受けられます。
手戻りを抑えやすい
開発を短いサイクルで区切る分、手戻りのリスクも分散できます。仮に問題が判明したとしても、そのサイクルで費やした工数が少ない分、ダメージも少ないでしょう。
また、新たな開発タスクとして対応するため、前工程の成果物修正に多くの工数をかける必要がありません。
2-2 アジャイル開発のデメリット
アジャイル開発の主なデメリットは、次の3つです。
メンバーの負担が増えやすい
ソフトウェアのリリースは、多くの労力をともないます。アジャイル開発は高速なリリースができる反面、メンバーにとっては頻繁なリリースがプレッシャーとなる場合もあるでしょう。
個々のメンバーに大きな負担がかからないよう、協調できるチーム体制づくりが求められます。
方向性を見失うリスクがある
ウォーターフォール開発は一貫した開発計画に沿って進めていく一方、アジャイル開発はサイクルごとに柔軟な計画の調整が可能です。
その反面、顧客の要求が変わるたびに開発タスクを継ぎ足していくことで、方向性を見失うリスクもあります。仕様があまりに変化した結果、当初のコンセプトさえも損なってしまうケースも考えられます。
その場しのぎの対応で技術的負債が残るリスクがある
アジャイル開発は変化に柔軟な対応が行える分、その場しのぎの対応が行われがちです。「次で修正するから大丈夫」といったその場しのぎの変更が積み重なると、後から手がつけられなくなる場合があります。
こうした技術的負債を残すと、将来の開発に支障をきたす可能性があります。
3.アジャイル開発と他の開発手法との違い
アジャイル開発以外にも、さまざまなソフトウェア開発手法が存在します。アジャイル開発と、他の開発手法との違いを押さえておきましょう。
3-1 ウォーターフォール開発
ウォーターフォール開発は前述のとおり、流れ落ちる水のように工程を進めていく開発手法です。アジャイル開発のように細かく区切ることなく、大きな開発計画に沿って1つのソフトウェアを作り上げていきます。
前工程へ戻らずに済むように、1つひとつの工程をきっちり完了させてから次の工程に進みます。開発の方向性がぶれにくい反面、前工程の問題が判明した際の手戻りが大きくなるのが難点です。アジャイル開発とウォーターフォール開発の違いについては次の記事でも解説しているため、あわせてご一読ください。
3-2 プロトタイプ開発
プロトタイプ開発は、試作品(プロトタイプ)の作成・評価を反復してソフトウェアを作り上げていく開発手法です。試作品を顧客に使ってもらい、そのフィードバックをもとにソフトウェアを繰り返し改善していきます。
他の開発手法ではリリースまでフィードバックを受けられませんが、プロトタイプ開発では開発初期からフィードバックを受けられるのが大きな違いです。具体的なイメージを早い段階で顧客に共有できるため、完成後に認識違いが発覚する事態を防げるメリットがあります。その反面、開発規模が大きいと試作品の作成までに工数・コストがかかりやすいのが難点です。
3-3 スパイラル開発
スパイラル開発は、機能単位で段階的に開発を進めながらソフトウェアを完成させていく開発手法です。反復的に機能の試作品を顧客に提供し、要求を取り込みながら各機能の品質を高めていきます。
アジャイル開発では各サイクルで「動くソフトウェア」をリリースしますが、スパイラル開発では「試作品」を段階的に提供していくのが違いです。また、プロトタイプ開発ではソフトウェア全体の試作品を初期段階で作りますが、スパイラル開発では機能単位の試作品を作ります。
プロトタイプ開発と比べて、試作品の開発コストを抑えやすいでしょう。一方で、初期段階では全体像がはっきりしないため、最終的なコストが想像以上に膨らむケースも少なくありません。
3-4 RAD
RAD(Rapid Application Development)は、アプリケーションの迅速な開発に重きを置いた開発手法です。最初にソフトウェアの要求・計画を固め、それに沿って試作品の作成・テスト・改良といったサイクルを反復し、完成に近づけていきます。
アジャイル開発では柔軟に開発サイクルを軌道修正しますが、RADでは開発初期に比較的厳密な計画を立てるのが違いです。また、プロトタイプ開発は「試作品の効果的な活用」に重きを置きますが、RADは「サイクルを迅速に回すこと」に重きを置きます。RADはスピード感のある開発ができる一方で、アジャイル開発と比べると柔軟性に欠けます。
4.アジャイル開発における5種類の主な手法・フレームワーク
アジャイル開発の導入にあたって、さまざまな手法・フレームワークが採用されます。ここで紹介する主な5種類の手法・フレームワークを押さえておきましょう。なお、アジャイル開発における主な手法についてより詳しくは、次の記事を参考にしてください。
4-1 スクラム
スクラムは、ラグビーのスクラムのように少人数のチームがコミュニケーションを取りながら開発していく手法です。下記のように、明確な役割分担のもと各メンバーが効率的に開発を進めていきます。
- 目指すべきゴールを示す「プロダクトオーナー」
- チームの進捗管理を行う「スクラムマスター」
- 個々の開発項目をこなす「開発者」
スクラムの流れは後述しますが、アジャイル開発のなかでも特にポピュラーな手法です。
4-2 XP(エクストリームプログラミング)
XP(エクストリームプログラミング)は、要求の変化を柔軟に取り込みながら、動くソフトウェアを開発・リリースしていく手法です。XPでは開発初期に厳密な計画を立てず、顧客のフィードバックによって徐々に方向性を固めていきます。
後述する「ペアプログラミング」など、さまざまなプラクティスによって効率的な開発が可能です。柔軟性の高い手法のため、顧客の要求が変わりやすいケースなどに適した手法といえます。
4-3 FDD(ユーザー機能駆動開発)
FDD(ユーザー機能駆動開発)は、顧客やユーザーから見て価値のある機能(フィーチャー)に焦点を当てる手法です。開発対象となる機能を「フィーチャーリスト」にリストアップし、機能ごとに開発サイクルを進めていきます。
顧客やユーザーにとって価値があれば、「ファイルをインポートする」のように小さな機能でも1つの開発タスクとして扱います。機能単位でリリースできるため、顧客やユーザーのニーズに素早く応えられるのが強みです。
4-4 LSD(リーンソフトウェア開発)
LSD(リーンソフトウェア開発)は、トヨタ自動車から広まった「リーン生産方式」をIT分野に応用した開発手法です。ただし、プロセスが厳密に決まっているわけではありません。「メンバーを尊重する」「重要な意思決定を急がない」など、7つの原則に従っていればLSDといえます。
なかでもLSDの中核となるのは、無駄をなくすことです。アジャイル開発をより無駄なく進めていきたいチームに特に適しているでしょう。
4-5 カンバン
カンバンは、開発プロジェクト・タスクの管理を可視化するためのフレームワークです。To Do・進行中・完了の3領域を設けた「カンバンボード」を用意し、進捗状況に合わせて各タスクを配置します。タスクのある場所によって進捗状況がすぐに判断できるのが強みです。
ホワイトボードでもカンバンを活用できますが、近年ではITツールのカンバンボードもあります。状況が変わりやすいアジャイル開発で、リアルタイムにプロジェクト・タスクを管理したいチームに適しているでしょう。
5.アジャイル開発における主なプラクティス
アジャイル開発が普及するなかで、さまざまなプラクティスも広まっていきました。
アジャイル開発におけるプラクティスも数多く存在しますが、ここでは主な3つを紹介します。
5-1 ペアプログラミング
ペアプログラミングは、前述したXPにおけるプラクティスの1つです。プログラマー2人がペアを組み、1つのパソコンで協力しながらプログラミングを進めていきます。
1人が記述したコードをもう1人がリアルタイムにレビューする形であり、役割分担が明確といえます。異なる視点で1つのコードと向き合える、後輩の育成がしやすい、などのメリットがあります。
5-2 テスト駆動開発(TDD)
テスト駆動開発(TDD)もXPから派生したプラクティスです。まず機能要件をもとにテストコードを作成し、それをパスするためのプログラムを実装していきます。
実装とテストの順序が逆となるのが、一般的な開発工程との大きな違いです。先にテストコードを作成することで、実装途中でも簡易的な確認ができ、バグを早期に解消できるメリットがあります。テスト駆動開発について詳しくは、次の記事をご覧ください。
5-3 ユーザーストーリー
ユーザーストーリーは、理想のユーザー体験を言語化するためのプラクティスです。
たとえば「経理担当者として勤怠実績を出力したい。それは、給与を計算したいからだ」のように表現します。「誰が・何を・なぜ求めているのか」を端的に表現することで、必要な機能や提供すべき価値が明確になります。
ユーザーストーリーは要件定義の代替・補足として使われることがあり、アジャイル開発のさまざまな手法との併用が可能です。ユーザーストーリーについて詳しくは、次の記事をご一読ください。
6.アジャイル開発の大まかな流れ
アジャイル開発の進め方は、開発手法やチームの方針によっても変わってきます。ここでは、アジャイル開発のなかでもポピュラーなスクラムを例にして説明します。
スクラムの1開発サイクルを構成する主な要素は、次のとおりです。
1.スプリント
スクラムでは、アジャイル開発における個々のサイクルを「スプリント」と呼びます。スプリントは、1カ月以内の短い期間を設定することが一般的です。
2.スプリントプランニング
まずは、今回のスプリントに求める価値や開発すべき項目を明確にし、大まかな計画を立てます。開発工程は、1日以内の小さなタスクに細分化しておくことが理想です。
3.デイリースクラム
デイリースクラムは、スクラムチーム内で毎日開催する1回15分程度のミーティングです。開発項目を担当する各メンバーの進捗や課題を、日々のデイリースクラムで共有します。
4.スプリントレビュー
スプリントの終盤に、ステークホルダーを交えて成果をレビューするプロセスです。成果物の改善点を洗い出し、次のスプリントに向けた対応方針も協議します。
5.スプリントレトロスペクティブ
スプリントの最後に、そのスプリントの進め方や対応内容について振り返るプロセスです。成果物ではなく主にプロセス面の改善点を洗い出し、次回以降のスプリントに活かしていきます。
なお、スクラム開発とは何かをより詳しく知りたい方は、次の記事を参考にしてください。
7.アジャイル開発の導入で失敗しないためのポイント
アジャイル開発は従来の開発手法と大きく異なるため、導入には慎重さが求められます。アジャイル開発の導入で失敗しないためのポイントとして、次の3つを押さえておきましょう。
7-1 導入の目的を明確にする
なぜアジャイル開発を導入するのか、まずは目的を明確にすることが大切です。特に、ウォーターフォール開発を採用している現場がアジャイル開発に移行することは、多大な影響をもたらします。アジャイル開発の導入自体が目的になると、後悔することになりかねません。
7-2 チームに合った手法を選ぶ
変化に対応しやすいXP、無駄をなくせるLSDなど、アジャイル開発の手法によって強みや性質は異なります。何を重視したいのかを考え、チームに合った手法を選びましょう。同じアジャイル開発でも、どの手法を選ぶかで費用対効果は大きく変わります。
7-3 継続的なフィードバックを行う
短い開発サイクルを繰り返していくうえで、さまざまな改善点が見えてくるでしょう。アジャイル開発の成果を高めるうえでは、サイクルごとの改善点を次回以降にフィードバックしていくことも大切です。スクラムのスプリントレトロスペクティブのように、サイクルごとに振り返りを行うのもよいでしょう。
8.アジャイル開発に関連する用語
アジャイル開発を学んでいくうえで、さまざまな専門用語に出くわすことになるでしょう。ここでは、アジャイル開発に関連する主な用語を3つピックアップして紹介します。
8-1 イテレーション
アジャイル開発において、個々のサイクルを「イテレーション(iteration)」と呼びます。イテレーションは「繰り返し」「反復」を意味する英語です。アジャイル開発では、短期間のイテレーションを繰り返していくことで、1つのソフトウェアを作り上げていきます。
なお、前述のスクラムでイテレーションに相当するものはスプリントですが、意味は大きく変わりません。イテレーションについて詳しくは、次の記事を参考にしてください。
8-2 DevOps
DevOpsは、開発(Development)と運用(Operations)を組み合わせた言葉です。アジャイル開発においては、開発チームと運用チームの統合に向けたアプローチを指して使われます。開発・運用の連携を強化することで、ソフトウェア開発全体の生産性向上につながります。
ツールの導入だけでなく、文化や組織体制の変革など、DevOpsの具体的な手段はさまざまです。DevOpsとは何かをより詳しく知りたい方は、次の記事を参考にしてください。
8-3 CI/CD
CI/CDは、継続的インテグレーション(Continuous Integration)、継続的デリバリー(Continuous Delivery)を組み合わせた言葉です。ソフトウェア開発における実装・ビルド・テスト・デプロイといった工程を統合・自動化し、継続的な開発・リリースを実現する手法を指します。
CIとCDの違いは、統合する範囲です。CIは、バージョン管理システムへのコミットを受けて自動的にビルド・テストを行い、問題がなければ正式なブランチへマージします。一方のCDは、ビルド・テストに加えてデプロイまで行い、リリース可能な状態を作り出します。CI/CDの実現には、「Jenkins」などの専用ツールを用いることが一般的です。
9.アジャイル開発を学習する方法
これまでの内容からもわかるように、アジャイル開発に関して覚えるべき知識は多岐にわたります。自己啓発を図る場合はもちろん、仕事でアジャイル開発に携わる場合でも、学習により理解を深めるべきでしょう。ここでは、アジャイル開発を学習する主な3つの方法を紹介します。
9-1 書籍
アジャイル開発に関して学べる書籍は数多く存在します。書籍には有用な知識が体系的に書かれているため、パソコンを使わずとも1冊で幅広く学べるのがメリットです。ただし、古い書籍だと情報が更新されておらず、最新の情報が書かれていない場合があるため注意しましょう。
9-2 Webサイト
Webサイトでもアジャイル開発に関する情報を得ることが可能です。コラム、動画形式の講座、eラーニングなど、Webサイトによって学習方法は変わります。パソコンやスマートフォンで気軽に学べるものの、サイトや講座により品質にばらつきがある点に注意が必要です。
9-3 セミナー・研修・勉強会
セミナーや研修、勉強会を開催している企業も存在します。参加費用はかかる場合が多いものの、アジャイル開発に精通した講師に教えてもらえるため、独学よりも確実です。
たとえば、弊社が開催しているソフトウェア品質セミナー「バルカレ」でも、アジャイル開発について学習できます。アジャイル開発について体系的・実践的に学べるカリキュラムとなっており、講師の派遣も可能です。この機会に利用してみてはいかがでしょうか。
10.アジャイル開発に関する資格
アジャイル開発に関する資格の取得を目指すのもおすすめです。アジャイル開発への理解度を確かめる意味だけでなく、資格を取得することで客観的に知識を証明できます。これからアジャイル開発現場への就職・転職を目指す場合、1つのアピールポイントにもなるでしょう。
ここでは、アジャイル開発に関する主な2つの資格を簡単に紹介します。
10-1 アジャイルソフトウェア開発技術者検定試験
アジャイル開発に携わる技術者に求められる、幅広い知識を証明できる資格です。2つの区分があり、レベル1はアジャイル開発の基礎知識、レベル2はより実践的な知識を問われます。アジャイル開発に特化した資格としては国内唯一であり、特に有力な選択肢でしょう
10-2 認定スクラムマスター(CSM)
アジャイル開発のスクラムにおける「スクラムマスター」に関する知識を証明できる資格です。スクラムマスターは、スクラムチームの成功を左右する重要な存在といえます。CSMを取得すれば、スクラム開発の現場へアピールしやすくなるでしょう。
なお、スクラムマスターに求められるスキルやその習得方法については、次の記事を参考にしてください。
まとめ
アジャイル開発は、短期間のサイクルを積み重ねながら、1つのソフトウェアを作り上げていく開発手法です。要求の変化に対応しやすく、顧客やユーザーのニーズが多様化する昨今のソフトウェア開発において主流となっています。
これからアジャイル開発に携わる場合、原則や価値観はもちろん、さまざまな手法やプラクティスへの理解も求められます。ソフトウェア開発の品質向上を目指すのであれば、アジャイル開発についてより深く学習していきましょう。