Claude CodeとCodexで社会シミュレーターを開発中|統治者X 開発ノート

AI・Webツール

政策や教育が社会にどこまで影響するのかを試すための社会シミュレーター『統治者X』を開発しています。まだ調整中の段階ですが、ここまでの主な仕様と、開発の途中で見つかった問題や判断を「開発ノート」として残しておきます。

開発には、AIコーディングツールのClaude CodeとCodexの2つを使っています。仕様を書いて判断するのは人間(作者)で、実装・検証・修正をAIが交互に担当する、いわば「キャッチボール方式」です。この記事では、v0.1から最新のv0.7.3.1までの流れをまとめます。

  • 統治者Xがどんなシミュレーターか
  • Claude CodeとCodexをどう使い分けているか
  • バージョンごとに追加した主な仕様
  • 監査で見つかった問題と、その直し方

を順に紹介します。

統治者Xとは:1000人の社会を制度と予算で動かすシミュレーター

統治者Xは、約1000人の住民が1か月ごとに暮らす「小さな国」を再現する社会シミュレーターです。住民は一人ひとり能力・価値観・健康・資産などを持ち、働き、結婚し、子どもを育て、ときには罪を犯し、老いて亡くなります。プレイヤーは住民を直接操作せず、税・福祉・教育・治安・予算などの制度だけで国を動かし、その結果を統計・新聞・年表から読み取ります。

目的は、現実の予測ではなく「この仮定を置くと社会はこう動く」を試す思考実験の場を作ることです。同じ乱数の種(seed)から条件を一つだけ変えて、100年後・300年後を比べられるようにしています。

国家概要の画面(v0.8)。統計端末のような見た目にしています

開発体制:Claude CodeとCodexの「キャッチボール方式」

統治者Xは、ChatGPT側のCodexとAnthropicのClaude Codeを交互に使って開発しています。おおまかには、作者が仕様書(依頼文)を書き、どちらかのAIが実装し、もう一方が検証や修正を受け持つ流れです。担当はバージョンによって入れ替わります。

交互に作業するためのルール

  • 引き継ぎファイル:作業の最後に、何を変えたか・何が未解決かを専用のファイル(CLAUDE_HANDOFF.md)に追記する。次のAIはそれを読んでから始める
  • 作業前のバックアップ:毎回、変更前のコードと設定をバージョン名付きのフォルダに退避する
  • 作業前後のテスト:開始前に既存の自動テストがすべて通ることを確認し、終了時に新しいテストを足して全件を通す
  • 監査は別の依頼として出す:機能を作る依頼と、「製品コードを変えずに問題を探す」依頼を分ける
  • 数値を前の版に合わせない:結果が変わったら、合わせ込むのではなく原因を説明させる

2つのAIで同じコードを触ると「片方が作った仕様を、もう片方が知らずに壊す」ことが起きやすくなります。引き継ぎファイルと自動テストは、それを防ぐための最低限の仕組みです。

開発ノート:バージョンごとの主な仕様

ここからは、バージョンの順に主な追加・変更をまとめます(細かい係数は省略します)。

v0.1〜v0.4:月次で暮らす住民と国家の土台

  • 住民が1か月ごとに年を取り、学び、働き、結婚・出産し、亡くなる基本の仕組み
  • 税・福祉・医療・教育・警察と、国庫の収支
  • 犯罪と逮捕、生活水準(貧困層〜トップ層)、人生の記録
  • 子どもを多く持とうとする「多産志向」の住民タイプ(作中では「ビッグダディ型」)
  • 富裕層の贅沢消費や、税収を使う公共事業
  • 同じseedなら同じ結果になること(再現性)と、途中保存・再開

v0.5〜v0.6.2:公務員・貴族・教育・結婚・子育て

  • 国家公務員(警察・裁判官・検察官・税務・行政)の定員と採用方針(実力・縁故・思想・バランス)、公務員の汚職
  • 貴族の家と家督の継承
  • 7種類の教育方針と、教育への反応のばらつき(普通に受け入れる・強く影響される・影響されない・反発する)
  • 結婚市場:お互いが相手を自分の基準以上と評価したときだけ結婚が成立する
  • 出産後の就業制約と、子育ての費用・児童手当
  • 教育費の家計負担。払えない家庭では進学が打ち切られる(奨学金は今後の課題)

v0.6.3:stress・ブラック企業・警察と司法・政府信頼

「生活そのものの苦しさ」を表すstressを導入しました。職場のstressが大きい「ブラック企業」、警察の実効力(予算と人員の両方が必要)、検察・裁判の処理待ちと誤判、政府への信頼などをつなげています。結婚相手の評価も、偏りが出ないよう正規化しました。

v0.7〜v0.7.2:潜在能力・民間主体・技術・革命

  • 生まれつきの能力と、教育で伸ばせる上限(潜在能力)の区別
  • 社会的な影響力(権威)。国家・民間・貴族それぞれに権威の源がある
  • 需要から生まれる民間主体18種類:商店、保育会社、婚活会社、私設警備、民間仲裁、宗教団体、詐欺会社、ブラック企業、公共事業の中抜き業者など
  • 組織の技術水準(0〜2)。1を超えると維持費・開発費が急増する
  • 国営雇用と国営サービス、価値観の親子継承
  • 抵抗組織と政権交代、旧体制の関係者に対する審査

v0.7.2の時点で「製品コードを一切変えずに問題を探す」ストレス耐久監査を行いました。約235回、合計約5万年分の実行で、計算の決定性と保存・再開は問題ありませんでした。一方で、次の問題が見つかりました。

  • 標準設定でも200〜300年で人口が爆発し、上限の2万人に達する
  • 公務員と抵抗組織の構成員を同時に兼ねる人がいる
  • 死亡した人が審査待ちの列に残る
  • 断絶した貴族家の組織が残り続ける

v0.7.2.1:人口モデルの確定

人口爆発の原因は、多産志向タイプの性質が強く遺伝し、数百年かけて人口の半分近くを占めてしまうことでした。人口を1000人に戻すような直接の補正は使わず、出生を次の要因の掛け算として作り直しました。

  • 年齢
  • 子ども数ごとの希望(普通の家庭は3人目以降の希望が大きく下がる)
  • 家計、働き続ける必要性、保育を使えるかどうか
  • 教育費、stress

13の条件を5通りのseedで500年ずつ実行して確認しました。その結果、標準設定は500年まで爆発も絶滅もしなくなりました。ただし「多産志向タイプがいないと約230年で絶滅に近づく」など、設定への感度が高い点は課題として残っています。

v0.8:初期設定・政策・新聞・年表

  • 初期設定画面と10種類のプリセット(小さな政府、高福祉国家、腐敗国家など)
  • 予算付きの政策21種。「国営・民間補助・混合」を選べ、行政費・汚職・中抜きで予算が目減りする
  • 国営・民間・抵抗の3つの新聞が、同じ事実を違う見出しで報じる
  • 年表、社会課題の自動検出と理由の表示、動画制作用の年次要約の出力
同じ事実から3紙が違う見出しを付ける新聞画面(v0.8)

v0.7.3:生活するだけでお金がかかる社会

「お金が貯まるだけの社会」から「生活するためにお金を使う社会」へ変えました。

  • 有限の住宅:劣化・修繕・建設に時間がかかる。家賃は家主か国に入る
  • 地域ごとの生活レベル(0〜1.5)と、お金で上乗せできる上限
  • 高い生活水準への慣れ:生活が落ちたときのstressは、同じ幅の上昇の喜びより大きい
  • stressを14の原因に分解。最も大きいのは「本人が重視する価値観が満たされているか」
  • stress解消のための消費(娯楽・スポーツ・買い物・宗教・家族との時間など)。手段ごとに効く原因と副作用があり、価値観によって選び方が変わる
  • 犯罪被害によるstressは家族にも広がる

v0.7.3.1(最新):お金と食料の収支を合わせる

最新版では、新機能より整合性を優先しました。

  • 取引台帳:社会のすべてのお金の動きを「原因・金額・支払側・受取側」で記録し、毎月すべての家計・組織・国庫で収支が合うか確かめる
  • 食料生産者:民間の生産者が人を雇い、生産・在庫・販売・給与・配当を持つ。不足時は国家が国庫の範囲で輸入する
  • stressの一本化:stressを変えられる処理を1か所に集め、同じ出来事が二重に効かないようにした
  • 個人の評価の分離:「主観的な幸福」「stress」「生活上の困難」「被害の履歴」を別々に記録する

あわせて、技術投資による食料生産の効率化も試しました。生産者が売上の一部を技術に投資すると、1人あたりの生産量が約1.7倍になり、食料に必要な人手は約13%から約8%に減りました。ただし投資を増やしても技術水準はほとんど伸びず、投資額だけが増える「収穫逓減」もはっきり出ました。

監査で見つかった問題と直し方

AIに機能を作らせると、それらしく動いていても内部の辻褄が合っていないことがあります。統治者Xでは、監査で次のような問題が見つかりました。すべて、修正前の版で再現してから直し、修正後に再現しないことを確認しています。

見つかった問題修正前に起きていたこと修正後
食料の架空配給供給が0でも、必要量の一部が配られていた配給は在庫を超えない
当月売上の消失生活費として入った売上40が、組織の処理のあと1.6になっていた売上を保持し、給与計算にも反映
規制の抜け道禁止したはずのサービスが、別の経路から40回買えた合法な提供主体がいなければ買えない
近親婚兄弟姉妹の結婚が成立することがあった親子・兄弟姉妹の結婚と出生を除外
住宅の相続世帯が統合されただけで、相続人がいるのに住宅が売却された所有を人物単位にし、死亡時に相続
台帳外の国庫変化月の初めの売却などが、国の帳簿に載っていなかった月初から月末まで全額を記録
労働者0人での建設建設労働者がいなくても1件着工していた労働者がいなければ建設しない

取引台帳を入れたことで、ほかにも「閉鎖した組織の現金が代表者に渡ったあとも組織側に残っていた(お金の二重計上)」といった既存の問題が見つかりました。現在は、500年×3通りのseedのすべての月で、家計・組織・国庫の収支の差がほぼ0(国庫約2億に対して約10-7)になっています。

数字で見る開発の進み方

バージョン中心テーマ自動テスト数
v0.7潜在能力・民間主体・技術109
v0.7.2内部モデルの確定・革命136
v0.7.2.1人口モデル147
v0.8UI・政策・新聞160
v0.7.3生活・経済・stress174
v0.7.3.1収支の整合性・食料生産者191

v0.8(画面)とv0.7.3(内部モデル)は、別の系列として並行して進めているため、番号が前後しています。テスト数は増やすこと自体が目的ではありません。「同じseedなら同じ結果になる」「保存して再開しても結果が変わらない」「表示するだけで社会が変わらない」といった、壊れると困る性質を確かめるために足しています。

Claude CodeとCodexで開発して感じたこと

1. 「作る依頼」と「疑う依頼」を分ける

同じ依頼の中で作らせて確認もさせると、確認が甘くなりがちです。「製品コードを変えずに問題だけを探す」監査を別の依頼にしたことで、人口爆発や二重計上が見つかりました。

2. 修正の前に再現させる

「この不具合を直して」ではなく、「直す前の版で再現し、直した後に再現しないことを示して」と頼むと、思い込みの修正を防げます。指摘が現状と違う場合も、その根拠を残してもらうようにしています。

3. 数値を前の版に合わせさせない

修正のたびに、人口などの結果は変わります。それを前の版の数値に合わせて係数を調整すると、原因が見えなくなります。「変化を説明すること」を条件にしています。

4. やらないことを明記する

依頼文には毎回「今回は外交・戦争・銀行・UI追加などを行わない」と書いています。AIは良かれと思って範囲を広げることがあるため、範囲の外を明示するのが効果的でした。

まだ調整中のこと

  • 国庫と国内のお金が長期的に増え続ける。取引台帳で原因(外部からの収入が支出を上回る)は特定済みで、是正はこれから
  • 結婚の基準や多産志向タイプの割合など、人口が設定に敏感すぎる
  • 地域の格差(スラム化・富裕地区)が弱く、一時的にしか起きない
  • 新しく追加した生活・stressの値を、まだ画面に十分出せていない
  • 計算量が増え、1000人で100年分の実行に十数秒〜数十秒かかる

よくある質問

Claude CodeとCodexはどう使い分けていますか?

固定の分担はありません。片方が実装したら、もう片方が検証や修正を受け持つ「キャッチボール方式」で、引き継ぎファイルと自動テストで作業をつないでいます。

AIだけで作っているのですか?

コードの大部分はAIが書いていますが、何を作るか、何を作らないか、結果をどう解釈するかは作者が決めています。監査の観点や優先順位も作者が依頼文で指定しています。

シミュレーションの結果は現実に当てはまりますか?

当てはまりません。統治者Xは現実の統計に合わせて調整した予測モデルではなく、仮定を置いて社会の動きを試すための思考実験の道具です。

まとめ

統治者Xは、Claude CodeとCodexを交互に使いながら、政策や教育が社会にどこまで影響するのかを試すサンドボックスとして開発を続けています。機能を足すたびに監査を行い、人口爆発、お金の二重計上、規制の抜け道など、AIが作ったコードの「それらしいけれど辻褄が合わない部分」を一つずつ直してきました。

まだ調整中ですが、今後も開発ノートとして進み具合を記録していく予定です。ゲームの仕様の詳細は、別の記事でまとめています。

コメント

タイトルとURLをコピーしました