初期デッキを「適性アンケート」で決める仕組みの設計
『フルスタック!』のランは、カードバトルではなく3問のアンケートから始まります。「動かないコードがある。最初の一手は?」——エラー文でググるか、printfを100個仕込むか、AIに丸投げするか、先輩の肩を叩くか。回答に応じて初期デッキが抽選される、いわば配属ガチャです。この仕組みの設計過程を書きます。
やりたかったこと: 最初の30秒で自分のプレイを宣言させる
デッキ構築ローグライトの初期デッキは、普通は全員同じです。それは公平で正しいのですが、毎回同じ10枚から始まる序盤は、どうしても作業になります。そこで「初期デッキに個性を与えたい。ただしプレイヤーに選ばせるのではなく、性格を答えたら結果として決まるようにしたい」と考えました。デッキを直接選ばせると攻略の最適化問題になりますが、アンケートなら自己表現になります。エンジニアという題材なら、質問自体をあるあるネタにできるおまけ付きです。
質問の設計: 12個の選択肢で6分野を2回ずつ
カードには検索・脳筋・守備・効率・AI・人脈の6分野があります。3問×4択=12個の選択肢で、各分野がちょうど2回ずつ現れるように質問を組みました。回答した分野は抽選の重みが上がり、たとえば「守備」寄りの回答なら「定時退社」や「単体テスト」を引きやすくなります。抽選には15%で強めのカードが出る「レア枠」も仕込みました。ガチャの高揚感は、こういう小さな上振れが作ります。
演出は npx create-career というコマンドを打つCLIウィザード風にしました。エンジニアなら見覚えのある、あの対話プロンプトです。
バランスは案の定崩壊した
抽選プールに通常のカードを素朴に入れたところ、勝率は無策16.5%/上手い70.2%まで跳ねました(目標は5〜10%/50〜60%)。通常カードは初期カードより強いので当然です。立て直しは2段階で行いました。①プールに初期カード級の弱いカードを混ぜて薄める。②初期デッキに「前任者が残した技術的負債」を2枚入れる。
この負債2枚が発明でした。バランスを締める錘でありながら、「配属先のリポジトリには前任者の『あとで直す』が残っていた」という、引き継ぎあるあるのネタとして成立します。調整の帳尻がそのまま世界観になった、個人的に気に入っている解決です。最終的に、どの分野へ寄せて回答しても勝率が目標帯に収まることを、回答パターン別のシミュレーションで確認して出荷しました。
質問文はデバッグより難しい
3問の質問文は、機能の実装よりも時間をかけて書き直しました。難しいのは「どの選択肢も正解に見えない」ようにすることです。たとえば「新規プロジェクト。最初にやるのは?」に対して「CIとlintを完璧に整えてから」と「とにかく動くものを今夜つくる」が並んだとき、どちらを選んだ人も「まあ自分はこっちだよな」と苦笑いできるのが理想です。片方が明らかに優等生の回答に見えると、アンケートが攻略対象になってしまい、性格が出なくなります。選択肢はすべて、現場で実際に見たことのある行動から採りました。「定時なので帰る。月曜の自分に託す」を選べるゲームは、そう多くないはずです。
ガチャは「見せ方」も仕事のうち
抽選結果の4枚は、一度に表示せず1枚ずつ時間差でめくれるようにしました。カードゲームのパック開封と同じで、結果が同じでも順番に現れるだけで期待の時間が生まれます。レア枠を引いたときはカードが金色の枠で明滅し、効果音も1枚ごとに鳴ります。ここで手を抜くと「ただの初期化処理」に見えてしまい、ガチャと呼ぶ資格がなくなります。
もう一つ気をつけたのが所要時間です。アンケートは3問で、タップ3回。ガチャ演出込みでも30秒かかりません。ローグライトは負けて何度もリトライするゲームなので、ラン開始の儀式が長いと確実に嫌われます。「毎回やっても苦にならない長さで、毎回少し違う結果が出る」が配属ガチャの成立条件でした。
回答は診断にも効かせる
ラン終了時のキャリア診断では、ガチャで得たカードを集計に含めています。アンケートでAIばかり選んだ人は「ChatGPT依存症」の称号に近づく、という筋の通し方です。最初の3タップの自己申告が、初期デッキを変え、プレイを変え、最後の診断に還ってくる。ランの最初と最後が一本の線でつながったことで、10分のランが「今日の自分の働き方の話」になってくれたと思っています。