スクラムでのプロジェクトの進め方をロックマンで解説

# はじめに
* この記事は[All About Group（株式会社オールアバウト） Advent Calendar 2018](https://qiita.com/advent-calendar/2018/allabout "All About Group（株式会社オールアバウト） Advent Calendar 2018")  ~~15日目~~ 24日目の記事になりました。クリスマスイブにこんな記事で良いんだろうか
* スクラムで開発を進めている弊社のとあるCMS開発で実際にやっていることをロックマンになぞらえ、わかりやすく（？）説明します。
* 記事がつまらなくなりそうなのでロックマンに頼りましたが、つまらなくてもロックマンのせいではありません

# 前提
## ロックマンとは
カプコンが1987年に発売した横スクロールの2Dアクションゲームです。現在までに11までナンバリングタイトルが発売され、他にもXやダッシュなど派生シリーズも生まれている日本のゲーム史に残る名作です。
6体（ロックマン2以降は8体）の個性溢れるボスを倒し、ラスボスを倒すというのがロックマンシリーズの特徴となっており、ボスを倒すとそのボスが使っていた武器が使えるようになるので、進めるほど強くなるシステムになっています。

## スクラム開発とは
アジャイルソフトウェア開発の1つで、短い期間で最大の成果を出すことを目的とし、チームのコミュニケーションを重視した手法。タスクを細分化しバックログに溜め、短い期間（1～4週間）をスプリントとして、計画、実装、レビューを繰り返し開発を進める。弊プロジェクトで行っている内容を後述。

# 世界征服されそう
いきなりですみません。
街でライト博士が作ったロボットが暴走しています。ライト博士によると、世界征服を企むワイリー博士の仕業とのこと。家庭用ロボットのロックは、開発者のライト博士にお願いし、戦闘用ロボット **ロックマン** に生まれ変わりました。さあ、ワイリー博士の野望を阻止しましょう。

## タスクを細分化する
プロダクトオーナーであるライト博士からのタスクは「世界征服を阻止せよ」です。これだと大きすぎるので分解します。

+ 暴れているロボットを倒せ
    + カットマンを倒せ
        + カマドーマーを倒す
        + くっつきスージーを倒す
        + スーパーカッターを避ける
        + etc.
    + ガッツマンを倒せ
        + （略）
    + （略、全部で6体います）
+ ワイリー博士を懲らしめよ

最初だとこんな感じですかね。なお、ワイリー博士は暴れているロボットを倒さないと会えない仕様のようです。

ライト博士（プロダクトオーナー）とも相談して優先順位を決めます。ご自身が作ったロボットなので弱点武器もバッチリ把握しているはず。細分化したタスクはバックログに優先順に入れておきます。

> 書いてて思いました。ロックマン1人で解決しているので、スクラム開発感が一切ないですね…。
> 実際のプロジェクトでの実装はモブプログラミングで進めているので、みんなで操作していると思う事にします。して下さい。

## スプリントの計画をする
スプリントプランニングです。実際のプロジェクトではスプリントは1週間としています。また、見積もりもポイントではなく時間でしています。

まずは各タスクの見積もりを行います。実際のプロジェクトではプランニングポーカーを使ってチームメンバーの認識を合わせています。

次にミーティングの時間などを抜いた実際に作業出来る時間を算出し、その時間と合計時間が同じになるようにタスクを積んでいき、そのスプリントで実施するタスクを決めていきます。

最初のスプリントでは下記を実施します。

+ カットマンを倒す
    + カマドーマーを倒す
    + くっつきスージーを倒す
    + スーパーカッターを避ける
    + etc.
+ エレキマンを倒す
    + ガビョールを倒す
    + ウォッチャーを倒す
    + 電撃を避ける
    + etc.

## スプリントを実行する
粛々と進めます。スプリントの間も毎日デイリースプリントとして夕会を実施し、タスクがどれだけ進んでいるか、お悩みを共有しています。Slackで30分悩んだら聞くという文化も作っているので、なるべく手が止らないように進められています。なお、このプロジェクトではテスト駆動開発で進めています。テストについては弊社アドベントカレンダー4日目の記事 [テストコードを書く文化を続けていくための習慣](https://qiita.com/wantonbe/items/6abb60b0bd673be9b7b2) を是非ご参照下さい。

さてロックマンの方でも順調に攻略が進み、計画していたカットマン、エレキマンを倒すことが出来ました。しかしエレキマンステージで壁に囲まれて取れないアイテムがありました。これは世界征服を阻止するために必要なアイテムかもしれないので、 **エレキマンステージのアイテムを取る** をバックログに追加し、次回以降のプランニングで実施しましょう。

## スプリントレビューをする
ロックマンのボスロボットを倒すとそのロボットが使っていた特殊武器が使えるようになります。ライト博士（プロダクトオーナー）とレビューを行いましょう。

スプリントレビュー、ロックマンで言い換えるのが難しく適当になってしまいましたが、実際のプロジェクトではプロダクトオーナーと成果物を確認して、受入条件を満たしているかを確認することとなります。もちろんこの場で指摘や追加仕様が発生する場合もありますが、それもバックログにいれて次回以降に実施するタスクとしています。

追加開発の機能など、そのスプリントで実装が完了したものについては、レビューで問題がなければリリースをします。

## 振り返りをする
KPTで今回のスプリントを振り返り、次のスプリントに活かします。

+ Keep
    + 計画通りにカットマン、エレキマンが倒せた
    + ボスを倒して特殊武器が使えるようになった
    + エレキマンでは弱点武器をうまく使えた
+ Problem
    + 穴に落ちて残機が減った
    + ガビョールにロックバスターが効かなかった
    + カットマンのところにある岩がうまく使えなかった
    + エレキマンステージのアイテムが取れなかった
+ Try
    + 穴がある場合は慎重に行動する
    + ガビョールには特殊武器を使う
    + 岩を活用する術を見つける
    + 岩を壊すことが出来るか確認する

TryはProblemの中で、実際にどのように解決していくかを定めます。また、次回の振り返りでTryであげた内容が実際に行えたかも振り返るようにし、スループットを増やせるようにしていきます。

## スプリントを繰り返す
（必要があれば）タスクの細分化→計画→実施→レビュー→振り返り
これを繰り返しバックログにあるタスクを消化していきます。

これにより、エレキマンステージで逃したアイテムも取得出来ますし、次々とボスを撃破し、ワイリーステージへたどり着くことが出来ます。
ワイリー博士にすぐ会えると思っていましたが、その前にこなさなくてはならないタスク（4つのワイリーステージ）が判明します。それでも慌てずバックログにタスクをいれ、対応して行きましょう。
振り返りも行っているので、ボスとの再戦も弱点武器を使って余裕で倒せるでしょう。

実際の開発でも割り込みのタスクがあったり、仕様の問題で予定していた実装方法だと難しい場合があったり、対応しなきゃいけないタスクが増えたりします。しかし、それらもバックログにいれ優先順位をつけ消化していくことでプロダクトとして完成して行きます。もちろんやらなくても良いタスクも発生してくると思いますので、プロダクトオーナーとのコミュニケーションも行う必要があります。

# 世界に平和が訪れた
機能開発を行って行くと開発チームとして強くなっていきます。ロックマンでもスライディングが出来るようになったり、チャージショットが打てるようになったり性能が向上します。さらに、ラッシュやエディなど、いかしたメンバーも増えていきます。

ワイリー博士も諦めずに世界征服を何度もトライしてきますが、どんどんチームをつよくして立ち向かっていきましょう。

# まとめ
弊プロジェクトでもモブプログラミングやプランニングポーカーの導入など、途中からやり方を変えたことが多々あります。ベロシティを向上させられるようにチームが一丸となって取り組み、成果を出せるようにだんだんなってきました。
このメンバーならロックマンの攻略も簡単だろうと思います。

# 最後に
ロックマンで置き換えた意味が自分でも最後までわかりませんでしたが、弊社のとあるプロジェクトの進め方の紹介となりました。
私自身、前職ではウォーターフォール型の開発しか行っていなかったので、タスクがポイポイ追加されていくことに当初は戸惑いがありましたが、スプリント毎に結果にコミットして行くことができ、スピード感を持って対応出来ていると実感したとき、とてもやりがいを感じました。

まだまだ至らない点はありますが、今後もチームとして成果を出すということは変わらないので、改善していきたいです。