AI Agents

Quads というモバイルボードゲームを、Claude と作った方法 ── 2時間のハッカソンから App Store まで

Alejandro Rioja
Alejandro Rioja
1 分で読める
TL;DR

Quads はモバイルボードゲームで ── 古典的な抽象ゲーム Quarto をすっきりと作り直したものです ── コロンビアで友人と行った2時間のハッカソンから始まり、アプリストアに出荷されました。これは、私が Claude とどう作るかを完全にオープンにした版です。並列のエージェント worktree、本物の(LLMではない)ゲームAI、オフラインファーストの設計、そして私に時間を費やさせた具体的な落とし穴について。

無料ニュースレター

毎週水曜。28,400人以上の読者。無駄なし。

目次

2026年7月更新。

要点: Quads はモバイルボードゲームで ── 古典的な抽象ゲーム Quarto をすっきりと作り直したものです ── コロンビアで友人と行った2時間のハッカソンから始まり、アプリストアに出荷されました。これは、私が Claude とどう作るかを完全にオープンにした版です。並列のエージェント worktree、本物の(LLMではない)ゲームAI、オフラインファーストの設計、そして私に時間を費やさせた具体的な落とし穴について。

[オペレーターの視点] 私はコンサルティングブランドと、オースティン都市圏のピックルボール施設 Pickleland にまたがって、30以上の本番稼働エージェントを走らせています。私が作るものの大半は本格的なビジネスソフトウェアで、そこではプレイブックを非公開にしています。Quads はその逆です ── 頭からお尻まで見せられる、楽しいサイドプロジェクトです。私が Claude とどう働いているのかを、何一つ削らずにそのまま見たいなら、これがその記事です。ゲームは playquads.com にあります。

それはコロンビアでの2時間のハッカソンから始まった

その始まりは、ほとんど気恥ずかしいほど気軽なものでした。私はコロンビアへの旅の途中で、友人と二人で自分たちに2時間のハッカソンを課しました。小さな何かを選び、AIで作り、どこまで行けるか見てみよう、と。私たちは Quarto に落ち着きました ── 覚えやすく、しかし驚くほど奥深い、美しく小さな抽象戦略ゲームです。2時間後には遊べるプロトタイプが手元にあり、そのアイデアはノートパソコンに置き去りにするには惜しすぎました。

時間を区切った挑戦として始まったものが、iOS と Android で実際に出荷されたモバイルアプリになったのです。その軌跡 ── 冗談のプロトタイプからストアの掲載へ ── こそが、このプロジェクトを書き記す価値があると私が考える、まさにその理由です。「楽しいアイデア」と「見知らぬ人がダウンロードできるもの」の間の距離は縮まりました。そして Quads は、その縮まり方の見事なケーススタディなのです。

まず、名前について少し寄り道を。このゲームは Quarto の再実装ですが、Quarto は Gigamic が所有する商標登録済みのゲームです。だから、コードに関わらない最初の決定は、顧客の目に触れるところではどこでも Quarto と呼ばないことでした。Quarto(メカニズム)から、いくつかの暫定的な名前を経て、Quads ── 私が自由に使える名前 ── へと落ち着きました。古典を再実装するなら、名前に惚れ込む前に商標の問題を片付けておきなさい。

Quads とは実際に何なのか

知らない人のために。Quads は4×4のボードと16個のユニークな駒で遊びます。すべての駒は4つの二値属性を持ちます ── 高いか低いか、濃いか薄いか、四角いか丸いか、中実か中空か ── そして16個の駒が、あらゆる組み合わせをちょうど一度ずつ網羅します。いずれか一つの属性を共有する駒4つの列を完成させると勝ちです。

これを見事にする仕掛けはこうです。あなたは自分が置く駒を選べません。相手があなたに手渡すのです。 そして今度はあなたが相手の駒を手渡します。だから毎ターンが二重の板挟みです ── 手渡された駒を、勝ちの布石にならないように置こうとしながら、相手に勝ちを差し出さない駒を選んで渡そうとするのです。エレガントで、本当に難しい。

このアプリは、すべて完全にオフラインで動く4つの遊び方を備えています。5段階の難易度でコンピューターと対戦、一台の端末でパス&プレイ、デイリーパズル、そして非同期の「友達に挑戦」モード。アカウントなし、サーバーなし、ログインなし。そのオフラインファーストの決定が、エンジニアリングの多くを方向づけました。そして、それがソロビルドを扱いやすくした大きな理由でもあります。

ゲームロジック:ビット演算からこぼれ落ちるルールセット全体

ここが私のお気に入りです。なぜなら、AIが書いたかどうかに関わらず満足できる類のものだからです。

16個の駒はそれぞれ、0から15までの単なる整数です。4つのビットのそれぞれが一つの属性です。それだけです ── 駒のセット全体が 0〜15 の数字なのは、4ビットがちょうど16通りの組み合わせを与えるからです。

すると勝ち判定は、ほとんど自明になります。任意の4つの駒の列について、二つの累算器を回し続けます。すべての駒で 1 であるビットと、すべての駒で 0 であるビットです。4つすべての後にどちらかの累算器がゼロでなければ、それらの駒は少なくとも一つの属性で一致しています ── それが勝ちです。ルールセット全体が、ほんの数個のビット単位のANDに収束するのです。

このロジックは整数上の純粋関数だからこそ ── フレームワークなし、UIなし、状態なし ── 直接ユニットテストが可能で、拡張も容易です。Quads には、9個の2×2の正方形も勝ちの形として数えるハウスルールのバリアントさえ搭載されていますが、それは同じビットの仕掛けの上に2行を足すだけの追加です。あなたとAIパートナーがコアロジックをこれほどきれいに保つと、機能を追加することはリスクではなく喜びになります。

AIの対戦相手は LLM ではない(そしてそれが正しい判断だ)

ここに、私が大切にしている学びの瞬間があります。すべての「AI」が大規模言語モデルであるべきではありません。

Quads の対戦相手は純粋な古典的ゲームAIで、そうあるべきなのです。毎ターン、それは二つの決定を下します ── 手渡された駒をどこに置くか、そしてどの駒を返すか ── そして難易度が、どれだけ深く考えるかを調整します。

  • ルーキーは本質的にランダムに打ち、あなたに勝ちを手渡します。
  • 中間の難易度はヒューリスティックを加えます。即座の勝ちがあれば取り、相手が勝てる駒を贈るのを避け、未来の脅威を最も少なくする駒を優先して渡します。
  • マスターとグランドマスターは、範囲を制限した negamax 探索 ── 本物のゲーム木探索 ── を走らせますが、一手が決して端末のメインスレッドをハングさせないように、厳しいノード予算を設けています。完全な探索が手に負えないゲーム序盤では、高速なヒューリスティックにフォールバックし、木が十分に小さくなる終盤では、本当に探索します。

ここから盗む価値のあることが二つあります。第一に、ここでは言語モデルはより劣るでしょう ── 50行の negamax よりも、遅く、高価で、非決定的で、しかも打ち負かせる。ツールを問題に合わせなさい。第二に、ノード予算こそが本当のエンジニアリングです。モバイル端末では、「正しいが時々4秒間ハングする」は失敗した機能です。一手が常に高速であるように ── たとえ時々最適でなくとも ── 探索を制限することこそが、おもちゃとプロダクトの違いなのです。いつ LLM に手を伸ばすべきかを知ることは、私がすべての自動化に適用する判断と同じものです ── それが あるAIビルドに価値があるかをどう判断するか の核心です。

私が実際にどう Claude を回すか:worktree の中の並列エージェント

さて、より大きなプロダクトでは非公開にしているが、ここでは完全にお見せできる部分です。

私は一度に一つの Claude セッションで作ることはしません。複数を並列で走らせます。それぞれが自分の git worktree の、自分のブランチの中にいます。あるエージェントは国際化を追加し、別のエージェントはデイリーパズルのシステムを作り、また別のエージェントは色覚多様性モードをやり、さらに別のエージェントはサウンドを配線する ── それぞれが自分の作業コピーの中で隔離されているので、互いに上書きし合うことがなく、それぞれが緑になったらマージして戻します。Quads の git 履歴は Merge branch 'worktree-agent-…' というコミットの壁で、それはまさに、そのワークフローを外から見たときの姿です。

worktree が重要な理由は単純です。同じ作業ディレクトリを編集する並列エージェントは、即座に互いを踏みつけます。それぞれに隔離されたチェックアウトを与えれば、本当に4つの機能を同時に建設中にでき、それから他のブランチと同じようにマージできます。それは私の働き方に対する、単一で最もてこの効く変更でした ── 私は「一つの会話、一つの機能」から、小さな艦隊へと移行したのです。

それらのエージェントが走るプロンプトの背後にある規律が欲しければ、本番で失敗しないAIエージェントのシステムプロンプトの書き方 で述べているのと同じものです。てこの力は、明確で最新の仕様にあるのであって、巧妙な言い回しにあるのではありません。

私に1時間を費やさせた落とし穴(だからあなたには費やさせない)

どのプロジェクトも、一つの、ばかげていて、高くつく教訓を教えてくれます。Quads では、それはこうでした。プレビューツールは、あなたが表示していると思っているブランチを、必ずしも表示していない。

複数の worktree で複数のエージェントを走らせ、その作業をプレビューすると、プレビューは現在のセッションがいるディレクトリとは別のディレクトリから起動することがあります ── だからアプリのスクリーンショットを撮っても、変更が何一つ見えず、そもそも欠けてなどいなかった「欠けた」UIをデバッグし始めてしまうのです。機能は問題なく、プレビューが間違ったチェックアウトを指していただけでした。何が起きているのか気づくまでに、私は本当に時間を失いました。そして、未来の自分(と、私がリポジトリを手渡すあらゆるエージェント)が、幻のバグをデバッグするにプレビューの対象を確認できるよう、プロジェクト自身のノートに書き留めました。

関連する罠。それらのプレビューを定義する設定ファイルは、並列セッション間で共有されているので、二つのエージェントが同時にそれを編集すると、静かに互いのエントリを上書きし合うことがあります。艦隊を走らせるつもりなら、共有設定は競合するリソースとして扱いなさい ── それはちょうど一度だけあなたに噛みつき、教訓を書き留めれば二度と噛みつきません。

その習慣 ── 苦労して得たすべての落とし穴を、次のセッションが読む永続的なファイルに捉えること ── は、あらゆる規模でAIと共に作ることの、静かな背骨です。文脈はセッション間で蒸発しますが、書き留められた教訓は蒸発しません。

私が誇りに思うオフラインファーストの工夫

Quads にはバックエンドがないので、いくつかの問題には巧妙でサーバーレスな答えが必要でした。

  • デイリーパズルは、ローカルの「年の何日目か」から決定論的に選ばれるので、世界中のすべてのプレイヤーが、サーバーの調整をまったく必要とせずに同じパズルを得ます。(おまけの教訓。私はその日付の計算にサマータイムの off-by-one を出荷し、すぐに直しました。日付は、いつも見た目より難しいのです。)
  • **「友達に挑戦」**は、パズルを短いテキストコード ── QC1-01-03-3 のようなもの ── にエンコードし、チェックサムで守ることで、打ち間違いが「有効だが間違った」挑戦を生み出せないようにしています。あなたの友達は自分のアプリのコピーにそれを打ち込み、まったく同じ局面を、完全にオフラインでプレイします。アカウントなし、マッチメイキングなし、サーバーなし。
  • リッチなリンクプレビューは、私がほんの少しだけサーバーコードを使った唯一の場所です。挑戦のリンクを共有すると、単一の Cloudflare Pages Function がコードごとの Open Graph タグをレンダリングし、リンクが iMessage や WhatsApp できれいに展開されるようにします。ソーシャルのクローラーは JavaScript を実行しないので、クライアントでレンダリングしたプレビューはどのリンクでも同じに見えてしまいます ── 一つの小さな関数が、本物のバックエンドを必要とせずにそれを直します。

これらはどれも、一度見てしまえば難しくありません。しかしそれぞれが、怠けた答えが「サーバーとデータベースを立ち上げる」であり、より良い答えが「巧妙なオフラインのやり方をする」である場所なのです。バックエンドを完全に避けたことこそが、一人でこれを出荷し保守できた理由です。

ハッカソンからストアの掲載へ

最後の道のり ── 「2時間プロジェクト」について誰も教えてくれない部分 ── は、「自分のスマホでは動く」と「見知らぬ人がダウンロードできる」の間のすべてです。8言語にわたる国際化を一気に。商標名を決して使わないストアの説明文。アプリストアのビルドツール、バージョン管理、そしてストア審査に跳ね返されないためのプラットフォーム固有の権限の整理。これは華やかさに欠け、そして多くのサイドプロジェクトが静かに死んでいく場所です。

それを Claude と共にやっても、チェックリストが短くなったわけではありません。しかし、各項目を、私が実際にやり遂げられるほど安くしてくれました。それが Quads の本当の物語です。AIがボードゲームを書いたということではなく ── プロトタイプなら多くの人が作れます ── AIがラストマイルのコストを、ハッカソンの冗談が出荷済みのプロダクトになるほどに下げた、ということなのです。

温めてきた小さなアイデアがあるなら、それが私の売り込みのすべてです。まずは2時間版を始めなさい。ゴールラインがどれほど近づいたか、驚くはずです。そして、この同じ働き方がスケールのどこまで上まで通用するのかを見たければ、私はそれをフルのマルチテナントSaaSまで押し進めました ── Courtlines というクラブ運営プラットフォームを、Claude とどう作ったか です。

Quads は playquads.com でプレイできます。

FAQ

Quads とは何ですか?

Quads は iOS と Android 向けのモバイルボードゲームで ── 古典的な抽象戦略ゲーム Quarto をすっきりと再実装したものです。4×4のボードと16個のユニークな駒で遊び、その仕掛けは、あなたが置かなければならない駒を相手が選ぶ、という点にあります。無料で遊べ、ソロ、パス&プレイ、デイリーパズル、そして非同期の挑戦モードを備えています。playquads.com で見つけられます。

Claude がゲーム全体を書いたのですか?

Claude はコードの大半を、私が所有する設計と決定に基づいて書きました。私は複数の Claude セッションを並列で走らせ、それぞれを自分の git worktree の中に置き、異なる機能を作らせては、それらをマージしてまとめました。ゲームロジック、AIの対戦相手、国際化、サウンド、そしてパズルのシステムは、大部分がこの方法で作られ、私がレビューしました。

ゲーム内のAIの対戦相手は LLM で動いているのですか?

いいえ ── そして、それは意図的です。対戦相手は古典的なゲームAIを使っています。低い難易度ではヒューリスティックを、最上位の難易度では範囲を制限した negamax 探索を、そして一手が決して端末をハングさせないよう厳しいノード予算を伴って。言語モデルは、この仕事には遅く、高価で、しかも弱いでしょう。問題に対して正しい種類のAIを選ぶことは、いつも最大のモデルに手を伸ばすことよりも重要なのです。

Quads を作るのにどれくらいかかりましたか?

最初の遊べるプロトタイプは、コロンビアへの旅で友人と行った2時間のハッカソンから生まれました。そのプロトタイプを、両方のアプリストアで磨き上げられた出荷可能なアプリにすること ── 国際化、本物のAIの対戦相手、オフラインの挑戦、そしてストアのコンプライアンスを備えて ── には、かなり長くかかりました。しかし個々のステップは、AIと共にやれば、プロジェクトが実際にゴールラインに到達するほど安く済んだのです。

Quads を Claude と作って得た最大の教訓は何ですか?

二つあります。第一に、エージェントを隔離された git worktree の中で走らせること。そうすれば、互いに上書きし合うことなく、複数の機能を並列で作れます。第二に、すべての落とし穴を、次のセッションが読む永続的なファイルに書き留めること ── 文脈はセッション間で蒸発しますが、書き留められた教訓は積み重なります。この働き方のより大きな全体像については、Courtlines を Claude とどう作ったか をご覧ください。

続きを読む

関連記事

続きを読む

AIプレイブックをメールでお届け

毎週水曜。28,400人以上の読者。無駄なし。

↵ すべての結果を見る esc esc で閉じる