Built Hometown
故郷が無くなっていたので、ローカルに建てた。
戻ろうとしたMMOの話を、前に書いた。その続きだ。世界は跡形もなかった。だから自分で建てた。
オープンソースのサーバー実装が公開されていた。月額制、永遠のグラインド、一晩の進捗を一瞬で消すPK。当時のバランスのまま動くものだ。Javaで書かれていた。日本語は無かった。
ソースは綺麗で、メジャーアップデートごとに整理されていた。開発に莫大な時間がかかっていることが伺えた。
クライアントは正規DVDをオークションで入手した。もう動くはずもないのに、ひどいプレミア価格だった。
Rooからclaude codeに乗り換えた頃だった。サブスクのプランが出て、膨大な量の翻訳作業がAPI料金を払うことなく回せると分かって、すぐ着手した。ローカライズのパッチを書き始めた。
LLMには手を焼いた。テキストを投げると壊れたXMLが返ってくる。タグが閉じない。句点が全角になる。固有名詞の表記がチャンクごとに揺れる。同じNPCの口調が、ファイルが変わると別人になる。プロンプトを書き直す。少し直る。違う場所が壊れる。
いま思えばMCPを使えばよかった。当時はノウハウが無く、ガードレールは自前で組むしかなかった。
数万のファイルがあった。前段に対訳辞書を置いた。日本語版クライアントのライブラリからゲーム内の固有名詞を引き抜き、正規の表記に固定した。
全ファイルを一度DBに放り込んだ。CLIで next を叩くと未処理の塊が一つ返り、終わったらCLIで戻す。並列に走らせる。返ってきたものはHTMLコメントを placeholder で退避してから補正をかけ、最後に戻す。指示書を分けて入出力の形を契約として固定する。
support/ の中に試行錯誤の塊が四つ、誰にも見せられない泥の山として残った。
数週間の格闘の末、作業は終わった。
ようやく、思い出の世界を歩けた。世界は静かで、景色はあのときのままだった。あのときの賑やかさも喧噪もない。
今になって思い返してみると、いまの自分の開発手法と、あの泥の山が同じ形をしている。
LLMの出力を信用せず後段で確定する。スキーマを契約として固定する。エージェントの返答にバリデータを噛ませる。長いコンテキストをチャンクに切って段階的に処理する。DBを多重処理のキューに使う。Excelとビット単位で揃えるオラクル検証も、認証ライブラリの境界設計も、タスクシステムのMCP統合も、根はぜんぶ、故郷の言葉を整えるために手探りで作ったものだった。
Javaから初めてなにかを学んだ。いや、Javaではないか。