
5,866 文字

私はこの素晴らしい戦略ゲームを作り終えたところです。しかもバイブコーディングで作りました。一行もコードを書きませんでした。これからその方法を正確にお見せします。私が出した唯一の指示は、2Dグリッドベースのターン制SFストラテジーゲームが欲しいということだけでした。最初にGrokに行き、コンセプトとルールを考え出してもらい、一般的なガイダンスをもらいました。そこから数時間以内に、資源管理、戦略、異なる船、戦闘システム、建設システム、そして対戦相手となる人工知能を備えた、完全に動作するゲームができました。
かなり素晴らしいことです。最初のコンセプトを得た後、Claude 3.7 Thinking搭載のCursorに向かいました。まず非常にシンプルなコンセプトから始めました。10×10のグリッドゲームで、ターン制のSFゲームが欲しいと思いました。Grokは「Nebula Dominion」という名前を考え出しました。そのコンセプトをCursorに貼り付けて、フレームワークを構築するよう依頼しました。
Cursorはmain.pyに基本構造をセットアップし、PyGameやNumPyなどの基本的な依存関係を使い始めました。imagesとsoundsフォルダを作成し、さらにreadmeファイルも作成してそこにすべてのルールとゲームの基本メカニズムを記載しました。そして実行しましたが、もちろん問題がすぐに発生しました。「モジュールが利用できません」という非常によくある問題で、単にインストールする必要があるというだけのことでした。
もちろんCursor + Claude 3.7 Thinkingはすぐに問題を解決し、インストールして、あとはスムーズに進みました。gameディレクトリとgamestate.pyファイルを追加してゲームの状態を処理するようにしました。変更をすべて受け入れ、コードはまったく見ずに実行し、何が起こるかを見ていました。そして10×10の空白のグリッドが表示されました。準備完了です。
次は、この10×10グリッドに実際に命を吹き込む時でした。CursorとClaude 3.7 Thinkingにreadmeファイルをチェックさせ、ゲームのコンセプトとメカニズムを理解させて、必要なものの構築を始めました。最初のピースは4種類の船でした。コルベット、メック、ドレッドノート、ドローンです。コルベットは高速偵察機、メックは地上戦用、ドレッドノートは重火力艦、ドローンは惑星から資源を取得するためのものでした。
クリックして何が機能するかを確認すると、各ユニットのヒットポイントや移動可能距離など、すでに多くの機能が実装されていましたが、まだ多くの問題があり、完全なゲームではありませんでした。テストする必要がありましたが、手軽に対戦できる相手がいなかったので、「対戦できるAIを作ってください」と言いました。
また、各ユニットが何なのか判断できなかったので、Cursorに各ユニットにラベルを付けるよう指示し、はるかに分かりやすくなりました。これで移動して自分のターンを終えると、AIが動きを見せるようになりました。
本当に必要だったのはツールチップでした。ユニットの状態、つまりヒットポイントがいくつあるか、どれだけ移動できるか、どのタイプのユニットかなど、すべてを見られるようにする必要がありました。そこでホバー時にツールチップを追加し、大きな改善になりました。また、各ユニットが何をすべきかという情報も提供されました。例えば、ドローンは惑星に行ってネビュラを集めるということです。
しかし、各ユニットの動きはまだとても不自然でした。洗練されているとは感じられませんでした。例えば、あるユニットをクリックして、別のユニットをクリックしようとすると、最初に最初のユニットの選択を解除してから2番目のユニットをクリックする必要がありました。意味がありませんでした。
そこでこの点を大幅に改善しました。一つのユニットを選択してから別のユニットを選択すると、自動的に元のユニットの選択が解除されるようにしました。また、ユニットが移動できなくなった時にはっきりとわかるようにしたかったので、最大移動回数に達すると灰色表示するようにしました。
それをテストした後、もう一つの問題は、AIが何をしているのかわからないということでした。AIのターンは一瞬で終わってしまい、何が起きているのか段階的に理解したかったので、実際に動きを遅くして、各駒を一つずつ動かして何が起きているのかを見られるようにしました。
その時点ではかなり良い感じになりましたが、戦闘システムが必要でした。別のユニットを攻撃しても何も起こりませんでした。そこで戦闘システムを追加しました。敵の駒が隣接している場合、互いに攻撃できるようにしました。ロジックはまだ非常にシンプルで、ヒット数と体力値があり、ヒットするごとにその正確な量だけ減少するというものでした。あまり洗練されていませんでした。
また、戦闘のプレビューも見たかったので、ユニットをクリックすると、この戦いでうまくいくかどうかの感覚がつかめるようにしました。これは他のターン制戦略ゲームにも似た感覚があるはずです。自分のユニットで敵のドローンを攻撃すると、体力が100から70に減少しました。
このセグメントのスポンサーであるLang Traceに感謝します。彼らは素晴らしいパートナーであり、今日も彼らについてお話しできることを嬉しく思います。Lang Traceは、ビジネスを前進させるAI製品を構築する主要なAIソフトウェア開発コンサルティング企業です。その製品には、オープンソースおよびオープンテレメトリベースの可観測性と評価プラットフォームが含まれており、アプリケーションでのLLM使用を評価し改善するのに役立ちます。
アーリーステージの企業から500社まで、何千ものデベロッパーに信頼されています。L Traceは、トレースの収集と分析、データセットの収集、評価の実行を支援し、高い信頼性と安全性を持つAIシステムを実現します。Lang Traceはオープンソースでオープンテレメトリであり、OpenAI、MRAW、DeepSeek、Gemini、WEEVA、Pineconeなどと簡単に連携します。
Lang Traceはエンドツーエンドの可観測性を提供し、LLMからベクトルデータベース、Crew AI、Llama Index、DSPi、Lang Chainなどのフレームワークレベルのコールまですべてをトレースします。Crew AI(ご存知の通り私が大好きなもの)のネイティブサポートにより、Lang Traceはあなたのエージェントが行っていることをすべて追跡するためのカスタムビルトダッシュボードを提供します。
Lang Trceを使えば、輝くデモから信頼性の高いAI製品に簡単に移行できます。Lang Trceをチェックしてください。オープンソースであり、ホスト版を使用したい場合は、説明欄のリンクを使用すると今なら20%オフになります。詳細を知りたい場合は、彼らの今後のウェビナーに参加してください。すべてについて解説してくれます。ぜひチェックしてください。彼らは素晴らしいパートナーですので、GitHubをチェックしてください。改めてL Traceに感謝します。
さて、ビデオに戻りましょう。次に集中したいことが2つありました。1つはワープレーン、もう1つはUIの動作方法でした。ワープレーンについては、テストしていた時にマップ上の異なるワープレーンを期待していました。あるワープレーン上にいると、ワープレーンでもある他のどのマスにもワープできるはずでしたが、そのように機能していませんでした。そこで文字通り「こういう風にワープレーンが機能してほしい」と言ったら、修正されて非常によく機能するようになりました。
また「ワープレーンは少なくとも1タイル離れて生成されるようにしてください」とも言いました。さらに移動範囲の視覚化も追加したので、ユニットをクリックすると、どれだけ移動できるか、どこに移動できるかが見えるようになりました。
しかし、まだ基地を攻撃することができず、基地という概念もまだ存在していませんでした。基地とコマンドセンターという用語を互換的に使っていました。これが後で問題を引き起こし、修正する必要がありました。実際ここで少し一時停止して、これを行う際に強くお勧めしたいことがあります。バイブコーディングについて多くを学び、他のプロジェクトもいくつか構築していますが、明確な仕様を持つことが重要です。
仕様作成にAIを使用することもできますが、基地とコマンドセンターのように異なる用語を使用すると、それがコードに反映され、問題が発生します。実際のコードでは、基地とコマンドセンターは2つの全く異なるものだからです。
次に、基地をゲームの重要な部分にしたいと考えました。まず基地を作り、攻撃可能にしました。これで最初の勝利条件ができました。敵の基地を破壊すれば勝利です。つまり、探索に行くけれども、あまり遠くに行きすぎると基地が脆弱になって攻撃されて負けるので、気をつけるという概念ができました。
次に建設メニューの構築を始めました。異なるユニットを建設できるようにしたかったのです。最初は何かを建設すると、そのユニットがすぐに現れましたが、1ターンの待機期間があった方が面白いと思いました。建設したいユニットを選択すると、次のターンになってそのユニットが実際に登場して使用可能になるという具合です。もちろん、各船のタイプによってネビュラのコストが異なるので、ゲーム経済をダイナミックにしようとしていました。ドローンはコストが低く、ドレッドノートは高いなどです。
この時点で、単なる四角形や三角形などの形だけの非常に基本的な視覚表現では不十分だと気づき、スプライトを使った視覚表現の追加を始めました。カメラの外で行ったので、説明だけします。無料のスプライトダウンロードサイトに行き、ダウンロードできる無料の視覚素材がたくさんありました。スプライトはゲームで使用できる2Dアニメーションや2Dグラフィックスのことです。
これが一番クールな部分です。すべてのアセットのフォルダをダウンロードし、そのフォルダをゲームフォルダに入れて、Cursorに「そのフォルダを見て、各ファイルの名前に基づいて、どれが各ユニット、惑星、マスなどに適切かを判断して割り当ててください」と指示しました。そして実行され、非常に印象的でした。意味が通じないものもいくつかありましたが、代わりに何が欲しいかを説明するだけで修正できました。
ゲームはまとまり始め、とても良い感じになっていました。船にはグラフィックスが、惑星にもグラフィックスが、背景タイルにもグラフィックスがあり、素晴らしかったです。そしてテストを始めると、多くの問題が見つかり、修正を始めました。例えば、最初のターンの直後に勝利条件がトリガーされることがありました。これらの問題を文字通り説明し、Cursorに修正させると、スムーズに進みました。
ネビュラの支払い論理を調整し、範囲やヒットポイントなどを調整しました。実際にバランスの取れた素晴らしいゲームのように感じ始めました。また、毎回ゲーム全体をプレイすることなく勝利条件をテストする方法も欲しかったので、各プレイヤーの基地を破壊したり、各プレイヤーのすべてのユニットを破壊したりするデバッグ機能を少し追加しました。最初はキーコマンドでしたが、最終的には隠しメニューにしました。
勝利条件をテストしたところ、うまく機能しました。その後、多くのリファクタリングを行いました。カメラの外で行いましたが、文字通り「リファクタリングしてください」とCursorに言い、実行されました。移動、戦闘、建設、勝利条件、そして背後にある物語全体を持ちました。実際にかなりクールなゲームでした。
多くのことを学びました。合計で4時間ほどこの構築に費やしたと思いますが、その大部分はただCursorが終了するのを待っているだけでした。実際には他のことをしながらバックグラウンドでそれを行うことができました。コマンドを書いて実行させると、数分から場合によっては10分ほど処理が行われ、戻ってきて見て続けるという感じでした。ほとんど非同期コーディングのようでした。
この後、他のプロジェクトも構築し、多くを学びました。いくつかのヒントを残します。まず、途中でコミットすることです。一つのことを変更すると、他の3つのことが予期せぬ方法で壊れたり変更されたりすることに気づきました。Gitを使用していることを確認し、頻繁にコミットし、ゲームの動作状態になるたびにコミットして、そのセーブポイントを持つようにしてください。ちなみにCursorがそれをあなたのために行うことができます。「コードをコミットしてGitHubにプッシュしてください」と言うだけです。
もう一つは、途中でテストを書くことです。ゲームが良い状態になったら、Cursorにテストを書かせましょう。統合テスト、ユニットテスト、何でも好きなものを。統合テストが最も適切だと思います。テストを実行して、テストがパスすることを確認してください。
これが私のワークフローです。変更を加え、手動でテストし、動作することを確認し、Cursorにテストを書かせ、すべてのテストがパスするようにし、そうなったらコードをコミットしてプッシュし、次の機能に取り掛かります。これがこのゲームのワークフロー、そして他の素晴らしいものを構築するためのワークフローです。
バイブコーディングに完全に魅了されています。コーディングを本当に楽しんでいます。しばらくこれほど多くコーディングをしていませんでした。これをコーディングとは思っていません。ほとんど不正行為のように感じます。このビデオを楽しんでいただけたら嬉しいです。将来的にもっとバイブコーディングのビデオを作る予定です。もしこのビデオを楽しんでいただけたなら、ぜひライクとチャンネル登録を検討してください。次回のビデオでお会いしましょう。


コメント