ウォーターフォールってなに?
アジャイルってなに?
を考えるときに身近なカレーライスを題材に考えてみました。
まあ戯言なので細かいことは気にせずお願いします。
各工程を考える
アプリ開発だと
要件定義→設計→実装→テスト→リリース
ですね。
カレーライスに置き換えると
要件定義:買い出し
設計:下ごしらえ、前半の調理
実装:火を使ったりする後半の調理
テスト:味見
リリース:実際に食べてもらう
とします。
まあ料理もアプリ開発も色々あるからそうじゃねえってのもありますけどね。。。
ではウォーターフォールのポイント
- 工程は順番通りにやる
- 工程が変わるときは工程が終わる条件を満たす
- ダメなときは所定の位置まで戻る
アジャイルのポイントは・・・
- 小さく動くものを作る
- 要件定義~リリースまでやってみる
- くりかえしやる
- 必要なものは必要なときにやる
まあ、作るものはカレーだし、ちゃんとやらなくてもカレーにはなるかなと思います。
どういうカレーを作るの?
この記事の要件定義は買い出しなので
あらかじめカレーライスはどんなのを作るか定義しておく必要があります。
- ポークカレー
- 野菜は玉ねぎ、にんじん、じゃがいも
- カレーライスなのでご飯
- 飲み物は最近流行ってるラッシー
ではウォーターフォールだとどうやってカレーを作るの?
要件定義は買い出しなのですべての材料を用意しましょう
- ポークカレーの豚肉、カレールウ
- 野菜の玉ねぎ、にんじん、じゃがいも
- ライスを作るためにお米と水
- ラッシーはなんだろう、牛乳とヨーグルトで良いのかな
- あ、そういえば油とか塩とかコショウとかいるかもですね。
設計の下ごしらえはいろいろな準備します
- 豚肉はちょうどいい大きさに切りましょう
- カレールウは分量を確認するだけでいいかな
- 玉ねぎは皮をむく
- 玉ねぎはみじん切り
- 人参は切ります
- じゃがいもは皮をむきます
- せっかくだから玉ねぎは、あめ色に炒めましょうか
- お米は分量を計ってといだらいいかな
‐ ラッシーはよくわからんけど分量を計ればいいかな
実装の本格調理は色々やります
- 豚肉は油で炒めます
- 野菜も一緒に炒めます(玉ねぎは下ごしらえで炒めてある)
- お米は炊飯器にいれて水を入れて炊飯器のスイッチを入れる
テストは味見
- 美味しかったらOK
- ダメだったら、調理がダメだったのか、下ごしらえがダメだったのか、買い出しがダメだったのか分析
- ダメだったところまで戻ってやり直し
・・・アプリは工数かかるけど、最初まで戻らずに、スーパーに買い出しいかなくても調理パートからやり直せるから良いですね。
カレー焦がしたら、結局スーパーに買いに行かなくてはいけません。
リリースはお客さんに実際に食べてもらいましょう
美味しい、美味しくないの感想を聞いたり
自分でも食べてみたり
ここから改善点を見つけたりして良くしていくのが運用保守かな?
アジャイルだったらどうやってカレーを作るの?
アジャイル開発は小さいものを作って回していくやり方です。
スプリントで繰り返すやり方で完成品近づけていく
要件定義、設計、実装、テスト、リリースを1個のスプリントでやってみる
スプリント1 とりあえずカレー作ってみるか
- スーパーで豚肉とカレールウを買う:要件定義
- 豚肉を切る カレールウの分量を決める:設計
- 豚肉を炒めてカレールウで煮る:実装
- 味見をする:テスト
- お客さんに食べてもらう:リリース
食べちゃったら、豚肉もカレールウもスーパーに買いに行かなくちゃいけないですが
アプリ開発は同じものなら使い回せるから、同じ豚肉を買うなら買わなくてもいいのです。
味見してダメだったら別の豚肉を買うからスプリント1もやり直しですね。
スプリント2 カレー+野菜を作ってみよう
- スーパーでにんじん、じゃがいも、玉ねぎを買ってくる:要件定義
- にんじんを切る、じゃがいもの皮をむく、玉ねぎの皮を向いてみじん切り、あめ色に炒める:設計
- 具材を炒めてカレーを煮込む:実装
- 味見をする:テスト
- お客さんに食べてもらう:リリース
次はご飯を作りましょうか
スプリント3 カレーライスを作ろう
- スーパーでお米と水を買ってくる(水道でもいいけど水にもこだわりたいよね)」:要件定義
- お米をとぐ、水の分量を計る:設計
- 炊飯器のスイッチを入れる:実装
- 味見をする:テスト
- 豚肉+野菜のカレーをご飯にかける:リリース準備(または実装の後半でも良い)
- お客さんに食べてもらう:リリース
ラッシー作って完成。スプリント4で最終スプリント、最終リリース
スプリント4 これが最終スプリント ラッシーってどうやって作るんだ?
- どうやらヨーグルト、牛乳、砂糖、レモンが必要らしいからスーパーで買ってくるか:要件定義
- 分量は大事だよね。計ってみよう。レモンは洗って軽く刻んてみよう:設計
- ミキサーにかけてみよう(どのくらいでいいんだろう?):実装
- 味見してみよう:テスト
- お客さんに飲んでもらおう:リリース
- これまで作ったものもためてもらおう:リリース2
さて、結論です。
ウォーターフォールとアジャイルどっちが良いの?
- 美味しければどっちでも良い
- 短い時間で出来ればなお良い
- お金は無駄にかからなければ良い
- 安く済めばさらに良いね
ってな感じで、どっちでも良いんですが
現実世界ではカレーライスづくりを失敗したら、途中のものは使えないのでスーパーに買い出しからやり直しですが
アプリケーションはダメなところからやり直せるから、失敗しても大丈夫(?)です。