この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
味噌カツは進化する
前回までのあらすじ
以下のゲームで、
牧場経営ソーシャルゲーム:
ユーザーは牧場を経営する。また、牧場などで育てたものを調理し、食べる事が出来る。
ユーザーにはステータスが存在し、様々な行動によってステータスが変動する。ある一定のステータスを伸ばすと出来る事が増える。
ステータスは割合で決定されており、どれかのステータスを上げると他のステータスが落ちる。
一度得た能力は消えない。
以下の仕様にて味噌カツを作る事が決定し、
仕様概要
・既存の調理機能にて味噌カツページを作成し、ユーザーの所持する特定のアイテム群を消費する事によって、味噌カツを作れるように機能拡張
味噌カツについて
・味噌カツを消費するとユーザーのステータスのナゴヤ成分が上昇する。
・上昇度合いは味噌カツの出来の良さによって決定される。
・味噌カツの出来の良さは、既存の調理機能では、ユーザーのステータスだけで決定されていたが、味噌カツはそれに加え、消費するアイテムによっても変動する
・どのような味噌カツが出来るかはMisokatsuMasterで定義する
ナゴヤ成分
・ナゴヤ成分とはユーザーのステータスの新しい種類である
・ナゴヤ成分の上昇に伴う作用
・ナゴヤ成分の割合により新たなレシピを作れるようになる(例: 小倉トースト、抹茶スパ、名古屋コーチン)
・新たなアチーブメントの追加
※ナゴヤ成分の追加による事柄は全て既存マスタへのデータ追加で対応可能
ユーザーインターフェース要件(以下ユーザーインターフェースはUIと略す)
・調理トップ画面に味噌カツトップ画面への遷移ボタンを追加
・味噌カツトップ画面で表示するものは以下
・ユーザーの所持する味噌、豚肉、その他味噌カツを作成する為のアイテム一覧を表示、選択出来る
・ユーザーがこれまで作成した味噌カツを表示、消費出来る
・味噌カツ作成ボタン
仕様書を読み込んだらサーバーエンジニアが行うべき事は以下に纏められました。
・味噌カツを消費する事でユーザーのステータスのナゴヤ成分が上昇する、は既存のコードで対応可能か確認する
・味噌カツ作りは既存機能では対応出来ないので、既存機能の拡張、または専用機能の追加を行う
・味噌カツトップ画面で返すべき情報があるのならば、返すAPIを作成する
実装に入る前に考えよう
さて、ここまで分かったなら実装に入りたいところですが、その前に一旦立ち止まりましょう。
これをこのまま文言通りに実装して運用していったら、将来どういう事柄が起きるのかなどを想定してみると、色々と困る事が浮かんできます。
例えば、今回の拡張が好調だったから、今度は博多ラーメンでハカタ成分の上昇とかやりたい! と言われたらどうなるでしょう。
さーばーえんじにあ「えっ、そうなるとMisokatsuMasterに博多ラーメンを入れる必要があるんだけど、MisokatsuにHakataを入れるの? そのテーブルに作る大元のものが味噌カツか博多ラーメンか区分するカラムも追加しなきゃいけないし、変数名もmisokatsuとか使ってるし、え、えぇ……」
他にも、
・パン粉も追加で素材として選べるようにしたい!
・今まで作った味噌カツ履歴を更に詳細に表示出来るようにしたい!
・味噌カツよりソースカツの方が美味しい!
・抹茶スパの必要性
などが浮かんでくるでしょう。
要するに汎用性に欠けた作りにしてしまったりすると、後から改修を入れるとなった時に、手を加えるべき範囲が広くなってしまうという事になります。
そうなると実装コストの増大、確認するべき場所が多岐に渡る、テストコードの大幅改修などなど、対応に掛かる時間及びに改修へのリスクの増加というとても面倒臭い事になってしまいます。
そんな事を避ける為に、この味噌カツ作成に対してはこれから先、どこまでの拡張が想定されるのか、などをしっかり考えた上で実装に対して臨まなくてはいけません。
じゃあ、それを誰に聞くのか。
勿論、仕様を考えた人、プランナーに聞きましょう。
さーばーえんじにあ「仕様に関して質問があるんですけど」
ぷらんな「何でしょう」
さーばーえんじにあ「今回は味噌カツに対してそういう機能を追加するっていう実装ですけど、今後味噌カツ以外で何か博多ラーメンでハカタ成分を向上させたりとか、レモン牛乳でトチギ成分を向上させたり、海藻でチョウシ成分を向上させたりとか、そんな事は有り得ますか?」
ぷらんな「海藻……? まあ、無いとは言い切れないかな」
さーばーえんじにあ「じゃあ、味噌カツに特化した作りじゃちょっと困りますね。特にマスタ名とか、MisokatsuMasterに博多ラーメンとかサーターアンダギーとか野沢菜漬けとかそんなもの入れる事になっちゃうので、別名でお願いします」
ぷらんな「えー、あー、うー、……はい」
さーばーえんじにあ「後、ソースカツの方が美味しいと思います」
ぷらんな「は?」
曖昧な仕様や今後拡張されたらこのままの仕様だとマズいとか、そういうものはプランナーやエンジニア、デザイナーとも話し合ったりして、実装する前にしっかりと固めていきましょう。
話し合ったとしても、実装する途中、後でやっと発覚する事などもあったり、またどんな形での拡張も柔軟に対応出来る作りにするというのは流石に出来ませんが、早め早めの対応で将来的なコストは出来るだけ少なくなるように心掛けた方が吉となる事は確かです。
その結果、以下のようになりました。
・味噌カツに特化した作りにはしない
=>えんじにあ「芋煮作る時困るよ」
・味噌カツなどの素材を選べるレシピに対し、素材の数は最大6とする
=>でざいなー「素材の種類の最大数が決まってないとUIのデザインが決めづらいよ」
・作成履歴を保持。作れる味噌カツの種類単位で最良の出来となったものを1個ずつ。
=>えんじにあ「味噌カツ履歴とか将来的に表示する可能性あるなら、保持しといた方が良いよね」
ぷらんな「可能性は無きにしも非ず」
・抹茶スパは必要
=>ぷらんな「ナゴヤ成分が100%の時のみ強力なバフアイテムとして作用するのさ」
仕様書も更新され、マスタの形などもしっかりと固まりました。
サーバーエンジニアがすべき事も、これからの拡張を鑑みた柔軟な作りをベースに実装できるようになりました。
そしてすべき事も、更に明確になりました。
・味噌カツを消費する事でユーザーのステータスのナゴヤ成分が上昇する、は既存のコードで対応可能か確認する
=>変わらず
・味噌カツを作るAPIは既存の調理APIとは別として新規に作成する
=>既存の調理APIとはかけ離れた部分が多くなった為
・味噌カツトップ画面の為のAPIを作成する
=>クライアント側で持っていない情報を表示する必要が確定した為
返すものは
・味噌カツを作成する為に必要な素材種別群
さーばーえんじにあ「まあ、やる事はそんなに複雑じゃないし、大体新規実装になったから既存コードの調査とかあんまり要らないし、実装の為の新規マスタの形も整ったし、テストコード含めなければそんなに長い時間は必要じゃないかな」
さーばーえんじにあ「マスタが間に合うなら、仮実装で2日くらいで開発環境に反映、確認できるようになると思います」
くらいあんとえんじにあ「りょーかい」