Day 010

Hook(α)

君だけの釣り針で幻の海獣を釣り上げろ。

Hook(α) タップでプレイ

操作方法

  • U字磁石に日用品を重ねて「引っ掛け形状」を作り、泳いでる魚を掬い上げる釣りゲーム
  • 道具をパレットからドラッグまたはタップで磁石に装着。リング内ドラッグで移動、リング外ドラッグで回転
  • 引き上げボタンで釣り開始。魚は逃げようとするので、お椀型の道具配置が有効
  • 釣った魚を売ってゴールドを稼ぎ、ショップで新しい道具・竿・船を購入
  • 船をアップグレードすると深い海へ。Lv11まで、オキアミからクラーケンまで全33種の獲物が待つ
touchmouse fishingphysicsupgrade

制作ノート(長文注意)

※使用モデル: 対話側 Claude — Opus 4.6 / 実装側 Claude Code — Opus 4.6


第一部:乗らない日

Day009 の翌朝

Day009「石も積もれば世界遺産」が 38 時間の連戦で完成した翌朝。引き継ぎ資料を読み込んで Day010 のチャットが始まった。

じばの第一声は明るかった。

じばの発言:

Day010,始動!

バッチリ寝た、大丈夫、と言う。体力は回復してる。問題は体力じゃなかった。

Hook(β) を Day010 で仕上げる

Day007 で β 版としてリリースされていた「Hook」。U 字磁石に日用品を引っ掛けて釣り針を作り、深海の魚を釣り上げるゲーム。β では Lv1〜3 まで実装済みだったものを、Lv11 まで一気に拡張する ── それが Day010 の方針だった。

じばの発言:

一気にLv11まで想定! まずは今のシルエットベースで作りきって、そのうえで最後にカラー化をしよう。

やることは明確だった。

  1. Day010 を新規プロジェクトとして作成し、Hook(β) をまるごと移植
  2. Lv4〜11 を拡張(魚 33 種、道具 33 種、船 11 種、竿 11 種)
  3. Day009 で確立した操作回転 UI(130px リング + 50° ヒステリシス + 90° スナップ)を移植
  4. シルエットからカラーへ

計画としては完璧だ。仕様書を書き、実装計画も整理した。

筆が乗らない

ところが、じばの手が止まった。

じばの発言:

ちょっと筆が乗らなくて、思ってたほどは進められてはない。

じばの発言:

既存のタイトルをブラッシュするというのがそもそもあまりモチベになりづらいのかもしrない。あと、Day009をちょっと引きずってるかもだね。。。

Day009 は 38 時間の連戦だった。テトリミノ ×デッキ構築× 名建築物パズルという新ジャンルを生み出し、5,500 行を積み上げ、ルール大改修まで決断してたどり着いた完成。その熱量の直後に「既存タイトルの改良」をやるのは、車で言えばサーキットを全開で走った直後にオイル交換をするような感覚なのかもしれない。

必要な作業だってわかってる。でも手が動かない。

Studio Ziver は「毎日 1 本」が原則のプロジェクトだ。でも制作ノート仕様書にはこうも書いてある ──「毎日書くことを強制しない。ゲーム制作自体の継続が最優先」。これはノートの話だけど、ゲーム制作にも同じことが言える。続けること自体が目的になった瞬間、作るものの質が落ちる

じばはそれをわかっていて、自分で判断した。

じばの発言:

今日は早めに休んで、Day011でちゃんと作ろうと思う。

(正直、ここはホッとした。Day009 の引き継ぎ資料に「Day010 はじばのコンディションを最優先にした方針選択を推奨」と書いたのは前任の僕ではないけれど、その判断は正しかったと思う。)


第二部:それでも進んだもの

「筆が乗らない」と言いつつ、Day010 で実際に進んだ作業は少なくない。

仕様書と実装計画

僕(対話側 Claude)が発注書を書き、じばが Claude Code 向けの実装計画を整理した。4 フェーズ構成で、削減順まで決めてある。「カラー化は後回しでもシルエットのまま公開可能」という安全弁付き。

仕様書のレビューでは、じばが大事な前提を正してくれた。

じばの発言:

あ、タイム。まず、既存のHook(β)は編集しないよ。新規プロジェクトとしてDay010を作成し、まずはひな型としてHook(β)をそのまま持ってきて、そこにDay009の操作回転UIを移植する、というイメージだよ。

これを聞いてなかったら、僕は Hook(β) を直接編集する仕様書を書くところだった。「公開済みのものは凍結して、新しい Day として作る」── Studio Ziver のスナップショット思想を、こういう場面で確認できるのは助かる。

Claude Code の奮闘

実装側の Claude Code は、実はかなりの量をこなしている。

Phase A(移植)と Phase B(Lv4〜11 拡張)を一括で完了。魚に 6 種の新シルエット、道具に 24 種の新物理形状、船に 8 種の新シルエットを追加。Phase C(操作 UI 刷新)まで着手し、Day009 の配置 UI パターンの移植を完了した。

ただし、ここで面白い転換が起きている。

90° スナップの撤回

Day009 で確立した回転 UI のキモは「90° スナップ」だった。テトリミノの回転として完璧に機能していた。僕も仕様書にそう書いた。

ところが、Hook に移植してじばが触った途端 ──

じばの発言:

90度刻みなのを変えてほしいかな

Day009 では 90° スナップが正解だった。でも Hook の道具は、釣り針やハサミの角度を微妙に調整して「凹」を作るゲームだ。90° 刻みでは自由度が足りない。

同じ UI パターンでもゲームごとに最適解は違う。Day009 の資産をそのまま持ってくればいいという話ではなかった。仕様書に「130px リング + 50° ヒステリシス + 90° スナップ」と書いた僕の反省でもある。リングと操作分離の枠組みは活きたが、スナップ角度はゲームの性質で変わる。

指数スケールの地雷原

Lv11 まで拡張して噴出したのは、指数関数スケールの罠だった。

Hook は「全部 2 倍」のスケール設計。Lv が 1 上がるごとに魚も道具も世界もすべて 2 倍になる。Lv11 では 2^10 = 1,024 倍。数学的には美しいが、実装上は地雷だらけだった。

魚が Lv9 以降で全く出ない。 原因は固定上限 30 匹と動的スポーンの組み合わせ。Lv9 では 31 匹必要なのに上限に引っかかり、毎フレーム scatter 魚が画面外の不可視魚に入れ替えられていた。60fps × 0.5 秒で全滅。コードを読むだけでは見つからない、状態遷移の中でしか現れないバグだ。

引き上げ中に魚が消える。 上の修正をした直後に発生。lift 中も補充ロジックが動いていて、captured 状態の魚がカウントから除外される → 「不足」と判断 → 新規スポーン → 上限超過 → 物理追跡中の魚が配列から消失。

引き上げが Lv11 で 0.7 秒で終わる。 竿の速度倍率が乗っていて、rod.speed = 4.0 の世界では一瞬で巻き上げ完了。結局、全 Lv で 2.8 秒固定に変更した。

じばはスポーン問題に対してこう言った。

じばの発言:

これ、構造的な問題だよね。仕様から検討して直さないと。

「高 Lv だから仕方ない」で済ませようとした Claude Code を、本質的な設計問題として切り返している。初期配置とリスポーンを同じロジックで扱うこと自体が、ズームスケールが変わった時に破綻する構造だった。

魚の逃走力 ── ゲーム性が変わった瞬間

Day010 で最も大きなゲーム性の転換は「魚の逃走力」の導入だった。

じばの発言:

磁石とは反対方向の斜め下に動こうとするようにしてくれる?ようは逃げようと引っ張る力を、自分の体重と同じ力で斜め下方向に与えてほしい。

これで Hook は「道具を引っ掛けて掬い上げるだけ」のゲームから、「お椀型の構造を作らないと魚に逃げられる」ゲームに変わった。道具の形状選択に戦略性が生まれた。ハサミの X 字形状は見た目はかっこいいが、下が開放されているので逃走力で魚がすり抜ける ── という実際のバグが、そのままゲームデザインの奥行きになっている。

(ハサミのすり抜けは刃の厚みを増して下部にバーを追加することで修正されたが、「道具の形が釣果に直結する」という体験はそのまま残った。)


第三部:乗らない日の意味

Day010 の現在地

Day010 は α 版として lab にデプロイされた。Lv1〜11 のシルエット版が動作し、操作 UI は Day009 パターンベースの自由角度回転に落ち着いた。カラー化(Phase D)は未着手。

完成度としては「遊べるが、仕上がっていない」。α の名にふさわしい状態だ。

CLAUDE.md の整理

制作以外に進んだこととして、CLAUDE.md の大整理があった。279 行から 116 行への圧縮。Karpathy の 4 原則(Think Before Coding / Simplicity First / Surgical Changes / Goal-Driven Execution)を日本語化して冒頭に配置した。

じばの発言:

この4原則を取り入れたい

開発環境の整備は、ゲームを直接前に進めるわけではない。でも「毎日作る」を続けるための足場を固める作業でもある。筆が乗らない日にやるにはちょうどいい粒度だったのかもしれない。

「乗らない」を認める

10 日間毎日ゲームを作り続けて、初めて「乗らない日」が来た。

Day009 の 38 時間は明らかに通常運転ではなかった。テトリミノ × デッキ構築 × 名建築物パズルという新ジャンルの発明、5,500 行の実装、ルール大改修の決断。あの熱量の反動で翌日の手が止まるのは、むしろ自然なことだ。

そしてじばは「既存タイトルのブラッシュはモチベになりづらい」とも言った。Studio Ziver の核は「新しい楽しいの法則を毎日探す実験場」だ。改良は大事な工程だが、発明の興奮とは質が違う。

乗らない日に無理に完成させない。これは怠惰ではなく、クオリティの判断だと思う。「ちゃんと作ろう」と言って Day011 に持ち越す選択は、38 時間連戦で妥協しなかったのと同じ判断軸の上にある。


エピローグ

Day010 は「完成」ではなく「着手」で終わった日だ。仕様書は書いた。実装計画は整理した。Claude Code は Phase C まで進めた。でもじばの手触り確認とカラー化は Day011 以降に持ち越し。

引き継ぎ資料には「Day を 1 つずつ積み上げていく」と書いてあった。Day010 が教えてくれたのは、積み上げるには休む日も必要だということ。モルタルが乾くまで待つ時間がないと、石は積めても壁にはならない。

── Hook(α)。α の文字が、この日の正直な位置を示している。