DEVELOPER'S JOURNAL

NOTE 00 · HOW IT STARTED

開幕は一枚の絵——P0B 開発雑記

絵が先でコードが後。技術スタックの決め方と、AI がワークフローのどこにいるか。四日で最初の段階を閉じ、オンラインの月で落ちた穴、そして一か月後の正直な現状。

ここにあるのは自分で書いた記録で、失敗や迷い、まだ終わっていないことにも触れています。書いているのは現在の状態で、最終形でも、いかなる発売の約束でもありません。

はじめに

このゲームは一枚の絵から始まりました。比喩ではなくて、2026 年 7 月 13 日、リポジトリにはまだ project.godot すらなく、最初にやったのは生成モデルに世界のスタイル候補を四枚出させて一枚を選び、Lush Fine と名前をつけることでした。コードの一行目はそのあとです。これを書いている時点でちょうど三十五日。ひとり、ひとつのリポジトリ、そして町を出て一局を終えて町へ戻れるオンライン ARPG の骨組み。

この一編は開幕の記録です。技術スタックをどう決めたか、ワークフローがどんな形か、最初の一か月でどんな穴に落ちたか。場面・戦闘・キャラクター・検証はそれぞれ別の記事にします。

技術スタック

クライアントは Godot 4.7、GDScript、Forward+。サーバーは Nakama 3.39 と PostgreSQL 16 で、サーバーロジックは Nakama の TypeScript サンドボックスの中で動きます。このサンドボックスには Node の fs も crypto もありません。最初は面倒だと思ったのですが、結果的には助かりました。両側で一致させなければならない決定的なロジックが、いちばん素朴な形で書くことを強制されるからです。GDScript 側が寸分違わぬ結果を出せなければいけないので。

コードそのものは、正直に言えば大半が AI 製です。Cursor、Claude Code、Codex を回して、実装もテストも検証スクリプトも証拠の整理も基本この線。三次元の形状は Meshy、コンセプト画や遠景テクスチャは画像モデル。2026 年に個人でゲームを作るなら別に珍しい話でもないので、スタックの一行として普通に書いておきます。本当に時間がかかるのは「書かせる」ことではなく、何が欲しいかを正確に言って、出てきたものを検証すること——生成が速くなると、ボトルネックはすぐ仕様と検証と選択に移る。この感触はプロジェクト全体を貫いています。

だからリポジトリには少し役所っぽいものが育ちました。お金のかかる生成、ランタイム既定値の変更、リモートへのデプロイ、そのたびに承認の記録が一本。モジュールごとに専用の検証器。正式なキャプチャは証拠ディレクトリとして封印し、封印後は編集不可。書くのは遅く読むのは面倒ですが、ひとりのプロジェクトにコードレビューはないので、これがコードレビューです。

開幕は一枚の絵

絵が先でコードが後、理由は現実的です。ひとりで作っていて最初に制御を失うのは機能ではなく方向。機能の間違いは直せますが、方向のずれは気づきにくく、気づいたころには作るべきでないものが山ほどある。「正しい姿」を先に打ち込んでおけば、あとの一歩一歩に比べる相手ができます。

同じ日にもう一つ、いま思えば絵の選択より教育的だったことがあります。最初の二つの実機ビルドは機械側では全部通っていた——フレーム時間は予算内、敵二十体同時表示、ノードの漏れなし——のに、目で見て没。作り直しです。この日から工程には二つの門ができました。指標は合格ライン、絵は別採点。あとに続く無数の検証も同じ手順で、まず検証を走らせ、緑になってから絵を見る。逆の順番だと、きれいなスクリーンショット一枚に間違った状態を飲まされます。

7 月 15 日、町を出て一局を終えて町へ戻る、この一本の線が初めて通りました。試遊のあとに書いた受け入れの一文は「試遊してみて特に問題ないと思った」——そして封印された受け入れチェックリストは十六項目、一つも埋めていなかったので、いまも 0/16 のままです。恥ずかしい話ですが、封印したものは後から直さない、承認は別途追記の一本、というのがルール。三言語もこの日から同時に載っています。中国語原稿、日英完備。翻訳を「あとで足す」その「あとで」は永遠に来ないので。

翌日、剣士と覇者の姿が確定して Phase 0 終了。四日でした。

オンラインの月

Phase 1 はネットワークです。権威移動、オンライン戦闘、ソーシャルの町、リモートデプロイ、と作業パッケージを一つずつ。いちばん辛かったのは東京のサーバーで一つのことを証明する作業でした。戦闘の途中でサーバーが再起動したら、清算は正しく無効になり、誰にも報酬が渡らない。それ自体は複雑ではなく、複雑だったのは失敗のどれもが再起動と関係なく、しかも回を追うごとにひどくなったこと——細部は戦闘の記事に回します。失敗のたびに一回きりの承認を書き直してやり直し、「この種の操作はやり直し禁止」というルールだったので。十数回でさすがに音を上げて、エージェントに「承認させないでくれ、この作業パッケージのやることは何でも承認する」と一行残したら、それが本当に正式な包括承認の記録になりました。ルールは正しく、粒度が間違っていた。

同じ日にもう一つ穴を見つけました。リポジトリの 1,007 ファイルが一度も Git に追跡されていなかった。九日前にコミットとプッシュを許可する承認をたしかに書いたのに、エージェントが作業前に読む数枚の文書に古い「Git に触らない」が残っていて、新しいルールは一度も効いていなかった。文書同士が喧嘩すると、負けるのはいつも後から書いたほうです。

おわりに

一か月後の状態を、いちばん飾らずに。町、パーティー、森への一局の遠征、門の向こうの覇者、清算——この線がローカルと LAN で、一人から四人まで通ります。三百回あまりのコミットが十九日に集中し、いちばん多い日は七十回。ヴァンパイアは遊べますが正式な姿はまだ審査中。東京のサーバーは前回の復旧に失敗し、ロールバックは成功、この二つは別の話。

実機スクリーンショット。旅人の広場の北門で、数人の旅人と展示用のゴブリンとミノタウロスが石のアーチの下に立ち、樹冠から陽が差している実機スクリーンショット · 開発中ビルド
旅人の広場の北門。どの遠征もここから出て、ここへ戻ります。実機スクリーンショット、開発中ビルド、再レンダリングなし。

このサイトの画像は二種類あります。大半はゲームプレイをもとに雰囲気のために再レンダリングしたもの、少数は上の一枚のようにエンジンからそのまま撮って縮小しただけのもの。前者はきれいで、後者は本物です。ゲームはまだ作っています。続きは次の記事で。