はじめに
背景
現在、バイブコーディングでゲーム開発をしています。
WW2風で、アドバンスド大戦略とスタンダード大戦略、ボードゲームを足して3で割ったようなものをイメージして作っています。
課題
マップ作成がとにかくしんどい。
これも生成AIのプロンプトで雰囲気で指示したらできそうと思ったあなた。
試しました。
ですが、あまりにもマップを作成するtilesの規則性、ヘックスマップ独特の規則性と独自ロジックが絡み、生成AIの単発プロンプトではうまくいかず・・・
仕方なしに手メンテ→実行→確認→手メンテ・・・を繰り返しやっていました。
n * nが少ないマップだったらまだしも、これが50 * 50や100 * 100になると、それはもう地獄の作業です。タイルを一つずつ定義して、座標を計算して...という苦行。
半ば諦めてました。
妙光
最近、気合いでマップを作成するtilesの規則性を半分解読(長方形マップの一番左右端を作成する上での規則性)。
それをメモに汚くまとめ、Gemini CLIに投げたら、なんと平地のマップを作成してくれたではありませんか!!
これだったら、Gemini CLIの「Agent Skills」を導入して、入力→マップのデザインと登録をやってもらおうではないか!!と思い立ちました。
モチベーション
今まで手メンテで作成していたマップ作成を70%くらいAIで作らせたい。
→ claude codeでやるとそれはそれで検証にお金がかかる・・・
→ そこで、Gemini CLIという無料がある!!!
→ じゃこれを使って、マップを作成するskillsを作成しよう!!!
→ claude codeで機能の実装をしつつ、Gemini CLIでマップの量産!!!ができるじゃん!!!😊
イメージしているゴール
以下の一連の動作をAIに丸投げすることを目指します。
- n * nのマップを作成するために、「nのマップを作成」と指示。
- 自動で以下の要素を満たしたjsonファイルを作成。
- jsonに必要な要素群(軍資金、勝利条件、初期配置ユニットなど)。
- n * nのマップを作成(初期状態は広大な平原)。
- 戦術的なマップのデザイン(戦史的知識に基づいた川、山、都市の配置)。
- 上記のjsonファイルを、
map.tsへ自動登録。
※ n * nで正方形になるのではないか?と思った方もいるかもしれませんが、ヘックスマップ(六角形)なので、n * nでも見た目は横幅が長い長方形になります。
Agent skillsって?
専門知識、手順型ワークフロー、タスク固有のリソースを使用してGemini CLIを拡張できる代物です。
特定のタスクをしっかり、そして先鋭的に細かく行わせたい時に非常に便利です。
(公式ドキュメントを参考)
ファイル構成
意識したこと
参考文献【Gemini CLI】Agent Skills入門の「ディレクトリ構造と各フォルダの役割」の章を元に、以下のように作成しました。
- skills.md
- 中央政権。司令塔。ここを出発点にassetsやreferencesを見にいくように心がけました
- 統一的なルールを記載しました
- descriptionの充実させました
- assets/
- 定型的なものを出させる、登録させたいという思いで記載しました
- references/
- ここを非常に大切にしました
- skills.mdの指示に紐づく各要素のポイントにおいて、重要な思想や考え方を記載しました
実際の構成
~.gemini/skills/make_map_skill/
├── skills.md # スキルのメイン手順・メタデータ
├── assets/ # 設定値やテンプレート
│ └── output_exp.md # アウトプットの期待値サンプル
├── references/ # マップ設計のロジック・思想
│ ├── make_board.md # ヘックス座標計算・JSONフォーマット定義
│ ├── touroku_maps.md # maps.tsへの登録手順
│ └── WWII Strategic Map Architect.md # 戦略的配置の基本思想
ファイルのプロンプト
意識したこと
-
skills.mdは「オーケストレーター」に徹する- 全てを一つのファイルに詰め込むのではなく、
skills.mdは「次に何をすべきか」という状態遷移(ワークフロー)のみを管理します。
- 全てを一つのファイルに詰め込むのではなく、
-
「道具(How)」と「思想(Why)」の分離
-
ツール(
make_board.md): 数学的な座標計算やJSONのフォーマット定義など、機械的で正確性が求められる「道具」としての役割。 -
思想(
WWII Strategic Map Architect.md): 「なぜそこに山が必要なのか?」「渡河地点が戦略的にどう機能すべきか?」という、AIにデザイナーとしての「魂」を吹き込むための戦略的フレームワーク。
-
ツール(
-
オンデマンドな知識参照
- 手順の中で「デザインフェーズ」に到達したとき初めて、思想ドキュメントを読みに行かせるように構成しました。
- 例
-
"戦略マップの基本思想"という書き方をして、これは一般的な言葉ではなく、定義があるものなんだと意識させた
-
- よく哲学の本を読んでいると、一般的な言葉の意味ではなく、特別な言葉の意味を持たせたいときに、<>や""などを使うと思いますが、その考え方です。
-
規則性の発見とシステム化
-
make_board.mdは、私が手作業で計算していた時の「メモ」をGeminiに解釈させたのが始まりです。AIにアルゴリズムとして抽出させ、それをjsonタイルマップ作成ツールとして定義しました。
-
実際のプロンプト
都合上見せられないものもあるため、ご了承ください・・・
skills
skills.md:
---
name: make_map_skill
description: ゲーム開発をする上で、マップの70%を作成するためのスキル。残りの30はユーザーが修正する。このskillの発動条件は、skillの使用・呼び出し + マップの縦横の数nが絶対に必須。このnを用いて、make_board.mdへ入力し、マップの更地の全体像を作成するためだ。そのほかの入力は、ユーザーが行ったら、よしなにマップ構成の各要素を埋めていく。もし、このnがない場合は、ユーザーに問い合わせる、質問すること。絶対に。
version: 1.0.0
---
# ステップ
- ① 箱の作成:マップ構成の各要素をjsonで作成する
- ② マップの要、tileの定義:board > tiles(array)を一番最初に作成する
- ③ マップをデザインする。これは"戦略マップの基本思想"を元に選別されたterrainをplainsから他の地形や都市(都市・首都・空港・港・橋)などへ変更することを指す。
- ④ 各要素を埋める
- ⑤ アウトプットを指定の場所に名前(name_hogehogeなど)を付け、json形式で提出する
- ⑥ ④のアウトプットをアクティベイトするために、マップを登録する
# 条件
- jsonの要素のうち、gameStatusとarmyFunds、deploymentLimits、 initialCameraPosition、availableUnits、producibleUnitsはassetを参考にする。ただし、availableUnits、producibleUnitsの登録では、登録されている兵器(陸海空)を全て表示します。
- 特に指示がない場合は、それ以外はbrank("")にする
# マップの構成
{省略。jsonの要素と定義が記載されている。これはreferencesかassetsに持っていてもいいかも・・・}
# ツール
- boardの作成: make_board.md
- マップの登録: touroku_maps.md
- 戦略マップの基本思想:WWII Strategic Map Architect.md
# アウトプットの提出先
- Commander/public/maps/scenario配下
# 参考
- board>tiles>terrainを定義:~/hogehoge.tsの61行目を参照。
- 登録されている兵器一覧:hogehoge.jsonのfactions > [Faction] > branches > [Branch] >
unitCategories > [Category] > units > idのstringを参照。
references
references/touroku_maps.md:
# touroku_maps.md
マップの名前を受け取ったら、以下のフォーマットに沿って、Commander/src/data/maps.tsへ登録する。なお、以下のフォーマットはjson形式でそれ以外の部分は、Commander/src/data/maps.tsは変更しない。以下フォーマットを追加するだけ。
以下、受け取ったマップの名前を{map_name}とする
## フォーマット
json形式で以下のような形で登録する
{
id: "map_name", // ここが登録された{}.jsonの{}と同じでなくてはいけない
name:: "", // 自由記述(日本語のカタカナで10文字以内。いかにも世界にありそうな地名を記載する)
description: "" // 自由記述(100〜250文字以内で日本語。ストーリーっぽく。攻める理由などを記載)
}
references/make_board.md:
{Geminiに書かせたものなので省略} // 自分の規則性メモを元に書かせた
references/WWII Strategic Map Architect.md:
{Geminiに書かせたものなので省略}
assets
assets/output_exp.md:
# アウトプット例
## フォーマット
json
## アウトプット例
{省略。実際に使っているjsonファイルで非常に長くなるため}
デモ
使ってみよう!!
~.gemini/skills/make_map_skill/に配置しました。
また参考記事【Gemini CLI】Agent Skills入門より、setting.jsonで有効にしているかを確認しました。このsetting.jsonは、この階層よりもさらに上の、具体的にはUser/.Geminiの配下にあるところで設定しました。
setting.jsonの設定
{
}
"experimental": {
"skills": true
}
}
あれ?登録されていない
/skillsを使って、登録されているか確認しました。
> /skills list
しかし・・・ない・・・
一回ウィンドウを閉じたりしましたが、治らず・・・
悩んでも仕方ないので、とりあえず動かしてみることに・・・
動きました笑笑。listはあんまり関係なさそうでした。
ちゃんとskills.mdやそこに紐づくフォルダを見に行っていることがわかります。
完成品!!!
50 * 50だと非常に大きいので、見切れています。ヘックスがGeminiが作成してくれたマップです。
今まで平地のタイルを設定するだけでもどれだけかかっていたことか・・・
正直丸一日jsonフォーマットと格闘しなければならない程でした。それが、たったの5分でできる・・・
非常に嬉しかったです!!!😭
まとめ
今回、今まで手作業で行っていたマップ作成を、Gemini CLIのAgents skillsを使用して、開発工数が大幅に削減することができました。
Gemini CLIのAgent Skillsは、無料でありながら「手順」「道具」「思想」を教え込むことで、自分専用の専門家エージェントに進化させられる強力な機能だなと感動しました。
これが無料なのがやっぱりすごい・・・
次回への抱負
- 今回のアウトプットは、ドイツ軍対ポーランド軍で実際に戦場であったヴィスワ川を題材にして作成してくれました。正直これだけでも、開発工数が大幅に削減され、とても助かっています。
- どこかのドキュメントに架空の世界観をGeminiに出させれば、もっと深みのあるマップデザインをしてくれそうです。
これからもバイブコーディング ゲーム開発を楽しみます!!


