週末でカードゲームをリリースした話
Pršíのブラウザ版を制作しました。これはチェコのカードゲームです。シンプルなAIとの1対1の対戦ゲームで、マウスまたはタッチ操作でプレイできます。
ここからプレイできます: https://czsoftcode.github.io/prsi/
多くの人はこれを「バイブ・コーディング(vibe coding)」と呼びますが、私はそうは思いません。バイブ・コーディングとは、多くの場合、アプリの概要を説明してAIが出力したものをそのまま受け入れることを指します。私は異なる手法を用いました。
私はClaude Codeを使用し、10の明確なフェーズに分けて開発を進めました。各フェーズには特定の目標と、検証可能なアウトプットが設定されていました。
フェーズの内容は以下の通りです:
- ViteとTypeScriptのスキャフォールド(雛形)のセットアップ
- ゲームエンジンのデータモデルの構築
- 基本的な動きと特殊カードの追加
- AI対戦相手のロジック作成
- UIとインタラクションループの構築
- 200回のエンドツーエンドAIシミュレーションの実行
- サイトのデプロイ
次のフェーズに進む前に、各フェーズの計画とレビューを行いました。これにより、コードをクリーンに保つことができました。また、約300個のユニットテストを作成しました。AIがミスをした際も、テストですぐに検知できました。
最も困難だったのはコードではなく、ゲームのルールでした。
- 7のスタック:プレイヤーは7を最大4枚まで重ねることができ、相手に8枚のカードを引かせることができます。
- クイーンのワイルドカード:クイーンは要求されるスートを変更します。エンジンがこれを正しく処理できるようにする必要がありました。
技術的なハードルもありました:
- デプロイ:パスのエラーにより、GitHub Pagesで画像が表示されなくなりました。これはViteのbase URLを使用することで解決しました。
- バージョニング:リリースをタグ付けした後、package.jsonの更新を忘れてしまいました。
AIはシンプルに保ちました。ルールに基づいた有効な手のみを指します。目標は「賢いAI」ではなく「正しいAI」を作ることでした。200回のシミュレーションゲームを行い、ゲームが必ず勝利または引き分けで終了することを証明しました。
「バイブス」に頼るのではなく、フェーズごとに構築することで、自分が真に理解しているプロダクトをリリースすることができました。
Source: https://dev.to/stkremen/i-shipped-a-card-game-in-a-weekend-but-i-didnt-really-vibe-code-it-34g9
Optional learning community: https://github.com/czsoftcode/prsi
