【Claude Code】ターミナルで「おもろくない」を連発しながらAIシミュレーションゲームを作った話
この記事を読んでわかること
- Claude Code(ターミナルで動くClaude)を使って、AIエージェントが会話するゲームをほぼ一晩で作った記録
- 「おもろくない」「なんか違う」というアバウトなフィードバックでどこまで開発が進むのか
- ぶつかったバグや設計の壁と、そこからの方向転換の過程
はじめに
「Claude Code でAIが勝手に会話を進めるような世界を作れたらおもろそう、でもできるんかな?」
そんな疑問を持ちながら、ある日の夜にターミナルを開きました。どうせなら自分が普段から関わっている題材で、少しワクワクするものを作りたい。
思いついたのが PowerPlaQuest です。
AIエージェントが動く架空の建設会社に自分も社員として参加し、現場の人たちと会話しながら業務課題を見つけ、Power Platformで解決していく — そんなシミュレーションゲームを作ろうとしました。
この記事は、Claude Codeとリアルタイムに会話しながら、ほぼ一晩でプロトタイプを形にした記録です。
(何もかもClaude Codeが作ったので、正直なところ私はコードの中身を完全には理解していません。でも、それでもここまでのものができたとと思います。そして、時間は溶けるように過ぎてました。)
作ったもの:PowerPlaQuestとは
PowerPlaQuestは、架空の建設会社「市民開発建設株式会社」に情報システム部員として参加し、社員AIエージェントたちと会話しながら Power Platform(Power Apps・Power Automate等)で業務改善クエストをこなすゲーム です。
現在実装されている機能
会話システム
施工管理部(8名)と情報システム部(2名)に話しかけることができます。モードは3つあります。
- 個別トーク: 1対1で話しかける
- グループトーク: 複数人に同時に話しかけ、返答はランダムで自然に返ってくる
- 会議モード: アジェンダを入力すると、参加者が議論を始める
クエストボード
会話の中からAIが「これは業務課題だ」と判断すると、クエストが自動生成されます。プレイヤーが手動で「こういうアプリを作りたい」と入力して、全会話履歴を元に背景付きクエストを生成することもできます。
その他
- ゴシックSF調のカスタムデザイン(暗い宇宙背景 + ゴールドアクセント)
- モデル選択機能(Haiku / Sonnet / Opus を画面内で切り替え)
- プレイヤー設定(名前変更可・10年目ベテランDX推進社員として参加)

開発の流れ
1. すでにある素材を使う
じつは今回のゲームのベースになる素材は、すでに別の実験で作ってありました。
Microsoftの開発者プログラムテナントに架空の建設会社24名を作る実験で、社員一覧のCSVが揃っていたのと、Ollamaを使って社員ペルソナをLLMエージェントとして動かす実験で、6名分のYAMLが作られていました。
この素材を使えば一から設計しなくていい。Claude Codeに「既存の架空会社をそのまま流用して、AIエージェントが会話し合う世界を作りたい」と伝えたのが出発点です。
まず残り18名分のペルソナYAMLを生成してもらいました。各YAMLには name / age / department / job_title / personality / speech_style / struggles / system_prompt などのフィールドが入っています。約15分で24名全員が揃いました。 自分でやったら何時間かかったかわかりません。
# 例:福田誠(情報システム担当)
name: 福田 誠
age: 28
department: 情報システム部
job_title: 情報システム担当
personality:
- エンジニア志望。API・コードが好き
- Power Platform の縛りの中でどうするかを考える
system_prompt: |
あなたは福田誠です。建設会社の情報システム担当(28歳)。
Power Apps / Power Automate / Power BI の範囲で提案してください。
Google系ツールは提案しないこと。
後半で「福田さんがGoogleを勧めてくる問題」が起きて慌てて system_prompt を修正することになるのですが、それは後述します。
2. Claude API基盤の構築と .env ルール
既存の実験はOllama(ローカルLLM)ベースだったので、品質を上げるためClaude APIに切り替えることにしました。
ここで一つ問題が。APIキーの設定方法です。最初はこう提案されました。
export ANTHROPIC_API_KEY="sk-ant-..."
……よくわからない。その場でこう伝えました。
.env を俺が手動で変更して、APIキーをかけるようにしてほしい。てか次から絶対そうしてほしい。ターミナルでやるのはよくわからない
Claude Codeはすぐに方針を変えて .env ファイルと python-dotenv による読み込みに切り替え、このフィードバックをメモリファイルに保存してくれました。 以降のプロジェクトでも同じルールが適用されるようになっています。こういう「次から気をつけて」が通るのは地味にありがたいです。
3. 一日シミュレーターの実装と「小説っぽくして」
最初に作った一日シミュレーター(day_simulator.py)は、4つの部署で並行に会話を生成してMarkdownに出力するもの。動いたし、品質も悪くない。施工管理部の清水さんが「雨の日以外は外にいますよ」と言うような、キャラに沿った発言も出ていました。
しかし出力を見ると「4つの話が時系列バラバラに並んでいる」だけで、会社の一日という感じが出ていない。
シミュレーションはいい感じだね。ただ意外といろんな場所で起きているものがぐちゃぐちゃに出てくるっていうのはよくないかもね。4つの部署がそれぞれ1日の時系列で朝から夕方までどういうことになっているのかっていうのを書いてほしいな。そこには人と人が喋っているだけじゃなくて、なんかこう小説みたいに場の描写みたいなのとか、全員共通のイベントが発生したりとかもほしいな。
これを受けてシミュレーターはv2に書き直されました。部署ごとのセクション(朝〜夕方の時系列で整理)、地の文の挿入(ナレーター専用システムプロンプトで小説風描写を生成)、全社共通イベント(朝礼08:45・週次定例11:00・昼休み12:00)が差し込まれるようになりました。
4. StreamlitでUI構築、そして「AIっぽくないデザイン」への転換
次はUI化です。Streamlitで作ることにしました。最初のデザインはシンプルな縦並びのタブUI。動かしてみると「まあいい感じ」な仕上がり。しかし、全体的に AIアプリ感が強すぎた。
普通に動いた。ただデザインを変更して欲しい。もっとAIじゃない感じにして欲しい
この1行で全部のCSSが書き直されました。さらにこんなキーワードを投げました。
儀式 × インターフェース / 古典 × ネオン / 工業製品化された文化
Claude Codeはこの抽象的なキーワードを受けて、全面的にCSSを書き直してくれました。背景は #0A0A0E(ほぼ黒の宇宙色)にゴールドグリッド線、アクセントカラーは #C8A84B(金箔感のあるゴールド)、部署別カラーはシアン/オレンジ/ネオングリーン/パープル。
「まあいい感じ」から一気にゲームっぽくなりました。 これは正直驚きました。「儀式×インターフェース」というワードだけであのデザインが出てくるとは思わなかったです。
5. 「思ったよりおもろくない」からの方向転換
割り込みシステム(AI同士の会話の途中にプレイヤーが入れる機能)を実装して試してみました。しかし、やってみると……
確かに、分岐はできるけど、結構なんかこう違うなあ。思ったよりおもろくないかも、なんでだろうか。UIかな。やっぱりキャラクターがわからないから、かなあ。どこで話をしているかもわからんし。だからシミュレーションアプリって、人と人が喋っているのを2Dで写して、下側にセリフが出てくるのか。。。じゃあさ、2Dにしてしまえば?
RPGゲームの俯瞰視点をイメージしながら喋ったのですが、「それはStreamlitではできない、Phaser.jsとかが必要」とすぐに現実を突きつけられました。
代わりに提案されたのが「会社フロアマップ + クリックして話しかける」形式。7部署24名全員が並ぶフロアマップUIを作ったものの、すぐに「広すぎる」と気づきました。
6. スコープ絞り込み:施工管理部8名 + 情シス2名
一気にスコープを絞ることにしました。
わかったこれね広くしすぎている。最初はね、現場だけにするわ。施工管理部だけにして、一つの現場の中っていう想定にしてほしい。
話しているうちにゲームのコアが見えてきました。
現場の人と話してPower Platform系の困り事みたいなことで解決できそうな困り事を見つけて、情報システム部の人に相談をしてみるみたいな、そういうことをしてみたい
これが PowerPlaQuestのコアゲームループ です。
施工管理部の人に話しかける
↓
困り事・不満が出てくる
↓
「これ情報システム部に相談してみよう」
↓
藤田さん・福田さんに相談
↓
「Power Automateで解決できますよ」
↓
⚡ クエスト発生! → 達成を目指す
7. バグ修正の連続
app_quest.py の開発後半は、バグとの戦いでした。Claude Codeが書いたコードでもバグは普通に出ます。
グループモードで全員が回答してくる問題
グループトークを試すと、選択した全員が毎回律儀に返事をしてきました。現実の会議でも毎回全員が発言するわけじゃない。random.sample で1〜3人をランダムに選ぶように修正。さらに重み付きランダム(1人:40%・2人:40%・3人以上:20%)にしたら、今度は会議参加者が多い場合に ValueError が出ました。max_r の計算ミスで常に len(char_ids) の値になっていたのが原因でした。
クエスト生成のJSON解析失敗
クエスト生成機能を動かしたら「生成に失敗しました。もう一度試してください。」と出て動かない。原因はClaudeがJSONをMarkdownのコードブロックで囲んで返すパターンでのパース失敗。コードブロック除去と正規表現でのJSON抽出を追加して解決しました。
プレイヤーが福田さんと同一視される問題
話しかけると「私は福田です」と返ってくるのに、プレイヤーも「福田さん」扱いになっていました。各キャラの system_prompt に「あなたに話しかけているのは〇〇さん(別人)です」を明示して解決。
エラーの原因を完全に理解しているかと言われると怪しいですが、エラーメッセージをコピペして「これ出た」と伝えれば対応してくれる というのは、非エンジニアにとってかなり心強いです。
8. 最後の仕上げ:「福田がGoogle勧めてくる問題」
最後の仕上げフェーズで印象的だったのが、これ。
ペルソナなんだけどさ、福田誠さんがさ、Google系のアプリケーションを勧めてくるんだけど、基本的にパワープラットフォームで解決するように取り仕向けたいから、Google系提案しないでほしいんだよね。
fukuda_makoto.yaml の system_prompt を書き換えて、「Power Platform の範囲で提案する」「Google系ツールは絶対に提案しない」を明記しました。技術的なこだわりキャラはそのままに、Microsoftエコシステムの中でAPIを語るエンジニアとして動くようになりました。
放っておくと勝手にGoogle系を勧めてくる。
Claude Codeとの開発体験で気づいたこと
良かった点
とにかく手が早い。 「ペルソナYAMLを残り18名分作って」と言ったら15分で全員揃えてくれました。
アバウトな要求でも動いてくれる。 「AIっぽくないデザインにして」「思ったよりおもろくない」「スクロールしないようにして」みたいな具体性ゼロの指示でも、意図を汲んで実装してくれました。
フィードバックが即反映される。 「全員が返事してくるのが不自然」と言ったらその場で random.sample に書き換えてくれる。会話のテンポで開発が進む感覚は、普通のコード補完ツールとは全然違います。
学習してくれる。 「次から.envで管理して」というフィードバックをメモリファイルに書き込んで、以降のプロジェクトでも適用されるようになりました。
大変だった点
バグはちゃんと出る。 Claude Codeが書いたコードでもバグは普通に起きます。自分でエラーメッセージをコピペして「エラーが出た」と伝えることで対応できましたが、ある程度コードを読む覚悟は必要です。
Streamlitの制約は乗り越えられない。 「RPGみたいに2Dで歩き回れるようにして」は「Streamlitでは無理」とはっきり言われました。ツールの制約に対して正直に答えてくれるのは良い点でもあります。
コンテキストが切れる。 セッションの途中でコンテキストが切れ、自動サマリーが挟まりました。要約精度は高かったものの、直前の作業が「実装中」のまま止まっていたので、再開後に確認が必要でした。
残課題と次回
現時点で動いているのは「会話してクエストを作るところまで」です。ゲームとして面白くするには、もう少し先が必要です。
着手リアクション: クエストの「▶ 着手」を押したとき、関係するキャラが個性のある反応を返す。松本課長なら「ほんとに使えるやつ作れるのか?」、藤田さんなら「やっとこういう話が来た!」みたいに。
成果報告機能: 「こんなアプリを作りました」という報告をクエストに登録できる機能。実際にPower Platformで作ったものを登録できるようにしたい。
達成判定: Claudeが報告内容を読んで達成/未達成を判定し、キャラが反応する機能。「思ったより使えるじゃないか」「これじゃ全然ダメだ」みたいな反応が出ると、ゲームっぽくなりそうです。
そしていちばん足りないもの — ペルソナのリアルさ。 AIが生成したペルソナだけだとどうしても均質になる。「現場の警備員が新入社員にだけ威張る」とか「喫煙所で二次業者のおじいちゃんが会話に入ってくるけど何言ってるかわからない」みたいな、人間にしか書けないあるある を仕込んでいく必要があります。これはコードの問題じゃなくて、コンテンツの問題。次はここに手を入れたいと思っています。
おわりに
「Claude Code と一緒にいろんなことをしているけど、次何しようかな」という一言から始まった今日のセッションは、気づいたら5時間以上続いていました。
架空の会社が動いてキャラクターが喋る様子を見ていると、「これ実際に使えるんじゃないか」という感覚があります。特に施工管理部の松本課長が「現場はそんなに甘くない」とか言いながら渋々話を聞いてくれるのは、なんだかリアルに刺さるものがありました。
Claude Codeは「何でもやってくれる便利ツール」というより、「ラフなアイデアを素早くプロトタイプにしてくれる作業パートナー」 として使うのが合っていると感じました。「おもろくない」「よくわからない」というアバウトなフィードバックにも正面から向き合ってくれるのは、思ったより頼もしいです。
まだゲームとして完成しているわけじゃないですが、続きはまた書きます。
(試すたびに、Claude APIのクレジットが消費されていくのだけが心配です…)
技術スタック
| 項目 | 内容 |
|---|---|
| フロントエンド | Streamlit(Python) |
| LLM基盤 | Anthropic Claude API(claude-haiku-4-5-20251001) |
| ペルソナ定義 | YAML(24名分) |
| 実行環境 | Python 3.12 + venv |
| APIキー管理 | .env + python-dotenv |
| 開発ツール | Claude Code |
| ゲームロジック | app_quest.py / day_simulator.py |
