株式会社CAENのロゴ

Discordにメッセージするだけで Love2D のゲームが動く仕組みを作った|AI駆動の個人ゲームスタジオ

この記事で分かること

スマホから Discord にメッセージを投げるだけで、AI が Love2D のゲームを作って公開まで完了させる、AI駆動の個人ゲームスタジオを構築しました。

  • Discord Bot → Claude Code セッション起動 → scaffold → 実装 → Web ビルド → 公開、を全自動化
  • 母艦の Mac mini に常駐させ、外出先のスマホ・ベッドの中からでもゲームが増えていく
  • 半年で 20本以上の Love2D プロトタイプが solo-studio.caen.co.jp/play/<slug>/ に並んだ

株式会社CAEN(代表:大森翔吾)の個人開発の現状を、技術構成と運用フロー込みで公開します。

なぜ「Discord でゲームを発注する」発想に至ったか

きっかけは スマホ1台でAI駆動開発する方法 の延長でした。Codex / Claude Code をスマホから叩けるなら、思いついた瞬間にゲームを作らせたい。電車の中、寝る前のベッド、散歩中の信号待ち。アイデアは流れていくので、その場で「投げ込み口」が欲しい。

ターミナルや Web UI を開くのは指の動きが多すぎる。Discord のメッセージ送信は最小ストロークで AI に命令できるインターフェースです。スマホの Discord アプリは常駐通知も取れるし、スレッドで会話を分離できる。ここに Bot を立てれば「ゲーム発注ポスト」になる、と踏みました。

ゲームエンジンは Godot × AI駆動開発 も触りましたが、量産プロトに振るなら Love2D 一択でした。理由は後述します。

システム構成図(言葉版)

スマホ Discord
   ↓ 「ねこが画面を走り回るゲーム作って」
Discord Bot(Mac mini 常駐)
   ↓ スレッド作成 + Claude Code セッション起動
Claude Code(SOLO_GAMES/Proto/Love2D で作業)
   ↓ create-game.sh で scaffold
   ↓ main.lua / conf.lua を実装
   ↓ love <dir> で動作確認
   ↓ build-web.sh で Web ビルド
   ↓ git push origin main(pre-push hook が Web ビルド再保証)
server.ts (Bun, port 8400)
   ↓ Cloudflare Named Tunnel
solo-studio.caen.co.jp/play/<slug>/
   ↓ スマホブラウザで即プレイ

すべて Mac mini 上で完結します。launchd サービス com.oomori.solo-games で server.ts を常駐、Cloudflare Tunnel が外向けの口を担当。自宅にゲームスタジオが1台、24時間営業している状態です。

なぜ Love2D を選んだのか

Godot × AI駆動開発 も AI と相性が良いと書きました。それでも量産プロトには Love2D が勝ちます。

  • 1ファイルで動くmain.lua に love.load / update / draw を書けば終わり。シーンファイルもプレハブもない
  • AI のループが短い:scaffold → 実装 → love <dir> で起動 → エラー読む → 修正、が数秒サイクル
  • Web ビルドが軽い:love.js(Emscripten 版)で index.html 一枚にまとまる。solo-studio.caen.co.jp/play/<slug>/ に置くだけで遊べる
  • 依存ゼロに近い:Lua + LÖVE 11.5 だけ。ライブラリ地獄に陥らない

Godot は「ちゃんとしたゲーム」を作るとき、Love2D は「思いつきを動くものにする」とき。僕の中では完全に役割分担しています。

Discord Bot とセッション起動の構造

ポイントは スレッド単位で Claude Code セッションが立ち上がる こと。

  • 親チャンネルに「ゲーム作って」と投げる → Bot が新スレッドを作って Claude Code を起動
  • スレッド内で返信する → 既存スレッドに紐付いた 新しい Claude Code セッション が起動

つまり同じスレッドでも、返信のたびに会話コンテキストはリセットされます。これを補うのが HANDOVER.md。各ゲームディレクトリ直下に状態を書き残しておき、新セッションは最初にこれを読んでから作業を始めます。Claude Code 完全ガイド でも触れたように、ステートレスなセッションを連結する仕組みは AI 駆動開発の生命線です。

ゲーム設計ルールは「コア体験だけ」

スマホから雑に発注する以上、AI 側の判断基準を絞らないと迷走します。プロジェクト直下の CLAUDE.md にこう書きました。

  • 1人プレイ専用
  • 演出・見た目・フィールは AI が自分で判断して実装する
  • 難易度カーブとかは一切考えず、コア体験だけを実装する
  • ゲームの核に複数解釈がありうる場合のみ、実装前に確認する

これだけで「『ねこが走り回るゲーム』って具体的に何?」という質問ループに陥らなくなりました。「迷ったら作って動かす」が量産の鉄則です。

半年で生まれた20本以上のプロトタイプ

実際に Proto/Love2D/ に並んでいるゲームから抜粋(順不同):

  • CAT_CLICKER — 猫を撫でて喜ばせるクリッカー
  • FLAPPY_BIRD — 言わずもがなの鳥ジャンプ
  • VAMPIRE_SURVIVORS — 全方位から迫る敵をオート攻撃で薙ぎ払うやつ
  • QWOP_DIVE — QWOP インスパイアの飛び込み競技
  • CRT_METEOR_SWEEP — CRTモニター越しに隕石を掃く
  • MIDNIGHT_SNACK — 深夜に冷蔵庫を開けるだけのゲーム

他にも DOODLE_JUMP / FROGGER / HOOKLINE_HOLLOW / MANDRAKE / NEON_PARCEL / RAMEN_ANOMALY / RESCUE_AT_HOLLOW_GATE / TODOFUKEN_TOWER など、合計で20本以上。全部スマホから投げて、僕は外出先で「動いた/動かない」だけ見ています。

main 直 push と pre-push hook の安全網

プロトの量産では PR レビューはオーバーヘッドです。なのでこのプロジェクトは main 直 push に倒しました(グローバル原則の例外)。各ゲームは Proto/Love2D/<GAME_NAME>/ に完全独立しているので、互いに壊し合うリスクがほぼない。

代わりに husky の pre-push hook を入れて、push 時に変更されたゲームディレクトリの web_build/index.html が無ければ build-web.sh を自動実行します。「Web ビルド忘れた」事故が物理的に起きないweb_build/ 自体は gitignore で除外し、server.ts がローカルディスクから直接配信する構成。git に Web ビルド成果物を入れない潔さも個人開発向きです。

このあたりの「launchd・Cloudflare Tunnel・hook を組み合わせて家を AI 工場にする」発想は MCP × 自動化レシピ集 の延長線にあります。

運用してみて分かったこと

  • 発注時の言葉が雑でも成立する:「アタリ判定が雑な格ゲー」みたいな投げ方で動くプロトが出てくる。叩き台があれば追加注文ができる
  • HANDOVER.md がないと詰む:スレッド返信で新セッションが立つ構造上、状態の引き継ぎは絶対。これだけは省略してはいけない
  • 遊ぶ時間 < 作る時間 になりがち:ゲームを増やすことが目的化する罠もある。ちゃんと遊ぶ習慣も並行して回したい
  • Love2D の制約が逆にスピードを生む:Web 版は Lua 5.1 ベースで goto 文や bit ライブラリが使えない、love.audiolove.physics は無効化、といった縛り。AI に最初から制約を渡しておけば踏み抜かない

「個人ゲームスタジオを24時間自宅で動かす」感覚は、一度味わうともう戻れません。

関連する記事

AI駆動開発のご相談・お仕事のご依頼

株式会社CAEN(代表:大森翔吾)では、Discord / Slack 起点の AI 駆動開発パイプライン設計、Mac mini 母艦+Cloudflare Tunnel での自宅サーバー公開構成、Love2D / Godot を使った AI 駆動ゲームプロトタイピングなどのご相談を承ります。

「チャットツールから AI に開発を発注する仕組みを作りたい」「自社のゲーム・ミニゲームを AI 駆動でプロト量産したい」「Mac mini を1台立てて常時稼働の AI スタジオを構築したい」など、お気軽にご相談ください。