アジャイル開発、スクラムの基本を説明します@ANGEL Dojo

#目次
[1.概要](#1-概要)
[2.はじめに](#2-はじめに)
[3.ウォーターフォール開発とアジャイル開発](#3-ウォーターフォール開発とアジャイル開発)
[4.スクラムとは](#4-スクラムとは)
[5.まとめ](#5-まとめ)

#1-概要
現在弊社で参加しているAWS主催の内製化支援に向けたトレーニング「ANGEL Dojo」内で
アジャイル、スクラム開発の概要を説明頂くワークショップを行っていただいたので、
そちらの内容を共有致します。

#2-はじめに
###ANGEL Dojoとは？
>ANGEL Dojoでは次世代を担うAPNの若手のエンジニアの方々に、擬似プロジェクトを通じてアジャイル、DevOps、モダンなアプリケーション開発などのクラウドネイティブな手法と、様々なInnovationを作ってきたAmazonの文化と考え方を体験いただくことで、お客様にクラウドの価値を100%届けるための基礎的なスキルを実践を通して身につけていただきます。参加者の皆様はここで培ったスキルと、各パートナーの皆様がお持ちのそれぞれの強みを活かすことでお客様のビジネスを成功に導き、日本のITや経済をさらに成長させる主役、すなわち「APN Next Generation Engineer Leader」になっていただきます。
（「日本を元気にする」APN Next Generation Engineer Leaders(ANGEL) Dojo のご紹介
https://aws.amazon.com/jp/blogs/psa/apn-next-generation-engineer-leadersangel-dojo ）より　

ANGEL Dojoの説明と1日目の様子は一緒に参加している弊社のメンバーが記事を投稿しておりますので是非ご覧ください！
（エンド企業とSlerの関わり方：システム開発の内製化のポイント@ANGEL Dojo
https://qiita.com/yu_to_15/items/d6055b8382c789f140ec )

#3-ウォーターフォール開発とアジャイル開発

###ウォーターフォール開発とは
開発手法でアジャイル開発と比較されるのは**ウォーターフォール開発**です。
ウォータフォール開発は開発手順を定め、一つの工程を終えたら次の工程へ進むフレームワークです。

要件定義を行い、その後設計、開発、テストと進んでいくことが
水の流れのようなのでウォーターフォールと呼ばれます。
![Qiita_210706.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1595785/5b3c4bbb-c792-6c43-fb2e-8cd2e545b2f8.jpeg)

####メリット
ウォーターフォール開発のメリットは大きく2つあります。
#####スケジュールを立てやすい
これがウォーターフォール開発の一番のメリットといえます。
早い段階でやるべきことを明確にすることで俯瞰的に工程を見ることができ、見通しが立てやすくなります。

#####予算や人員が手配しやすい
あらかじめ進めるべき工程が分かっているので、その時点で必要な予算や人員が把握しやすいため、
計画通りにプロジェクトを完了させていくには、ウォーターフォール型開発は適した手法だと言えます。

####デメリット
#####問題発生時の手戻りが大きくなる
先ほどの図を見ると分かりやすいですが、開発を進めているのに要件定義が不十分だった、、なんてことになると、
また要件定義、基本設計、詳細設計を行って、開発に戻ることになります。
そのフェーズだけを直すことが出来ないのが一番のデメリットといえます。

#####予定を立てるのに時間がかかる
最初から全て予定を立ててタスクを切り分ける必要があるため、
WBSなどの作成にもそれだけ時間がかかります。
また仕様変更が起きると予定の立て直しにも時間がかかります。

#####成果物を作成するのに時間がかかる
一つのサービスを作成する際に各工程を踏んで最終的にリリースとなるわけですが、
そのサービスが顧客、社会にとって必要とされているのか判断するのはリリースを行ってからということになります。
なので、反応を見て仕様を変更するといったことが出来ないのもデメリットです。

###アジャイル開発とは
2001年にソフトウェア開発者と、業務上の責任者の間での密接かつ自由なコラボレーションの重要性をうたった文書「アジャイルソフトウェア開発宣言」が発表されました。
https://agilemanifesto.org/iso/ja/manifesto.html

**アジャイル開発**とはこの作成するサービスを最小現に抑え、
リリース、修正、機能の追加を短期間で繰り返すことフレームワークのことです。

![Qiita2_210706.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1595785/8de292aa-61b3-5bba-f55a-7f1c689033aa.jpeg)

####メリット
アジャイル開発はウォーターフォール開発のデメリットを克服した形になります。

#####問題発生時の手戻りが少ない
ウォーターフォール開発とは逆に短期間で設計、開発、テストと進んでいくため、
不具合が場合でも少しの手戻りで済むといったメリットがあります。

#####柔軟な対応が可能
少しずつリリースをしながらサービスを作っていくため、
リリースしたもののレスポンスを確認しながらより顧客に寄り添った提供をすることが出来ます。

####デメリット
#####スケジュールのコントロールが難しい
ウォーターフォール開発では初めにスケジュールを設定し、進捗を管理することが比較的容易ですが、
アジャイル開発では機能、仕様ごとにスケジュールを設定するため、
全体のスケジュールを把握しにくく、コントロールが難しいといわれています。

###どちらがいいという話ではない
ウォーターフォール開発にもアジャイル開発開発にもどちらにもメリットデメリットがあり、
適宜どちらがいいかを選択する必要があります。
ただし、どんどん変化していく社会に対応するため仕様などが変更されることが想像できるものに関しては
アジャイル開発が向いているといえますね。

#4-スクラムとは
アジャイル開発の手法の一つとしてスクラムがあります。
スクラムとは簡単に言うと
動くソフトウェアを一定期間ごとに提供するために、
その期間内での優先順位を決め、評価をしながら進めていく
**チームで仕事を進めるための手法**のことです。

####プロダクトバックログ
まずは、提供するサービスにどんな機能が必要なのかを定義します。
そのためには実現したいことを洗い出す必要があります。

今回のワークショップでは、私たちのチームがAngelDojoで内で作成しようとしているサービスに必要な機能ついて考えました。
作成するサービスを簡単に説明すると、**散歩をしているときだけ同時に散歩している人と通話ができる**サービスです。

サービスの詳細については以下の記事をご覧ください。
(WorkingBackWordsの考えをもとに作成したプレスリリース例@ANGEL Dojo
https://qiita.com/yu_to_15/items/9b90f6a94d440348ec79 )

ではこちらのサービスに必要な機能を洗い出していくのですが、
その方法として今回は**ユーザーストーリー形式**を使用しました。

####ユーザーストーリー形式とは
顧客や管理者などそのサービスを使う人（役割）がこういった機能があるとやりたいことを実現できるかを
「<役割>が<機能>をできること、なぜなら<理由> だからだ」という形式で書き出し必要な機能を洗い出す手法です。
これを本当に必要かどうか、実現可能かなどを精査し、優先順位を付けていきます。
この方式を**ユーザーストーリー形式**といいます。

例えば今回作成するサービスで言えば

ユーザーが散歩をしながら通話できること、
なぜなら散歩することで運動不足の解消、通話をすることでコミュニケーション不足の解消につながるからだ。

というように書くことで、その機能は本当に使う人にとって必要かどうかが分かりやすくなります。
機能を洗い出し、必要でないと判断したものを消して優先順位を付けたものが以下になります（見づらくて申し訳ございません）
![Qiita.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1595785/b44f39bb-99a1-95b4-4ce0-fe8a8c86cd76.jpeg)

並び変えることで上位にくる機能が優先して作るべき機能として洗い出すことが出来ました。
その一つを**プロダクトバックログアイテム**といい、この一覧を**プロダクトバックログ**といいます。

###スプリントバックログ
プロダクトバックログが完成したら、
一つを取り出し、そのアイテムの完了条件を定義します。
その完了条件を実現するために必要なタスクに分割したものを**スプリントバックログ**といいます。
個々のタスクは1日で終わる程度に分割することがポイントです。

例えば先ほどのプロダクトバックログを必要なタスクに分割すると（開発環境構築などの準備は入れません）

**プロダクトバックログ**
「ユーザーが散歩をしながら通話できること」

**タスク**
「1.通話時の画面を作成する」
「2.通話に必要なデータベースの設計をする」
「3.通話開始の処理を作成する」
「4.通話中の処理を作成する」
「5.通話終了の処理を作成する」
「6.散歩中のユーザーの位置情報を定義する」
「7.ユーザーの位置情報を計算する」
「8.テストを行う」
「9.リリースを行う」

といった内容になりました。
スプリントで開発するバックログ項目の内容は明確でなければいけません。
また、そのスプリントで何ができていれば完了とするのか、という完了条件を明確にしてから開発を進める必要があります。
今回の内容が実際にプロダクトバックログを実現できるかはさらに検討が必要ですが、
この一つのまとまりをスプリントとして、まとめたものが**スプリントバックログ**と呼びます。

スプリントを繰り返し、必要最小限でサービスを少しずつ作っていくことでアジャイル開発を進めます。

このように進めていくスクラムにもメリットデメリットはあります。
####メリット
#####常にやることを把握しやすい
短い期間で作成する機能を共有するため常に進捗を把握でき、開発等をスケジュール通りに進めやすくなります。

####スケジュールの正確さが上がっていく
開発チームの技術力をスプリントごとに確認できるため、スプリントを回すごとにスケジュールの見積もりが正確になり、
また生産性の改善にもつながります。

####デメリット
#####メンバーの選定が難しい
スプリントは短い期間で回す必要があるため、メンバーに初心者がいる場合はスケジュール通りに開発を進めることが難しくなります。
また、開発中に離脱者が出ると、スケジュールに大きなずれが生じてしまいます。

####品質を保つ仕組みが必要
スプリントを終えるたびに回帰テストを実施する仕組みなどが無いと常に高品質を保つことが難しくなります。
常にメンバー間でコミュニケーションは欠かせませんね。

#5-まとめ
今回のワークショップでは、
アジャイル開発とはなんなのか
ウォーターフォール開発との違いやメリット、デメリット
アジャイル開発の一つの手法スクラムとは
などの概要を体系的に学ぶことのできる内容でした。

これからAngelDojoでは実際にアジャイル開発、スクラムを使って
サービスの提供を目指すので、具体的なお話はまた後日投稿したいと思います。