この記事の要点

  • Claude API でモンスターの名前・説明・ステータスを JSON 生成し、人間レビューを挟んで品質を整えている。
  • Python スクリプトでリサイズ、透過 PNG 化、ファイル整理まで自動化し、アセット準備を大幅に短縮した。
  • 背景除去は BFS で外側から探索する方式を採用し、キャラクター内部の白を残したまま背景だけ透過できる。
  • 40体以上のモンスター準備を、数週間かかる手作業から数時間のパイプライン処理へ置き換えられた。

40体以上のモンスターを1人で用意する——まともにやれば数週間かかる作業を、Claude APIとPythonスクリプトの組み合わせで数時間に短縮した。KUKU BATTLE MASTERで構築したAIモンスター生成パイプラインの全体像を解説する。

40体以上のモンスターをどう用意するか

RPGバトルゲームの面白さは、多彩な敵キャラクターとの出会いにあります。同じモンスターばかり出てくるゲームでは、すぐに飽きてしまう。KUKU BATTLE MASTERでは通常モンスター、ボス、隠しボスを合わせて40体以上のモンスターが必要でした。

しかし、1体ずつ手作業でデータを考え、画像を加工するのは膨大な時間がかかります。そこで、Claude APIとPython画像処理を組み合わせて、モンスターの「データ」と「ビジュアル」の両方を効率的に生成するパイプラインを構築しました。

Claude APIによるモンスターデータ生成

モンスターのデータ生成には、Anthropic SDK(@anthropic-ai/sdk)を使ったTypeScriptスクリプトを作成しました。Claude APIに対して、モンスターの名前、説明文、ステータス(HP、攻撃力)、属性などを一括で生成させます。

ここで鍵になるのがプロンプト設計です。KUKU BATTLE MASTERは子ども向けの教育ゲームなので、「怖すぎないけど個性的で、バトルしたくなるような魅力あるモンスター」を出力させる必要がありました。

プロンプトには以下のような指示を含めています。

  • 子ども向けであること:グロテスクな要素やホラー要素は排除。かわいさやユーモアを持たせる。
  • 個性的であること:名前や特徴が被らないように、食べ物系、動物系、ファンタジー系など多様なカテゴリを指定。
  • ステータスのバランス:難易度に応じたHP帯と攻撃力の範囲を指定し、ゲームバランスが崩れないようにする。
  • JSON形式での出力:そのままコードに取り込めるよう、構造化されたJSONで出力させる。

AIが生成したデータをレビューし、必要に応じて微調整を加えたうえでゲームに組み込む。完全自動化ではなく、「AIが下書き→人間が仕上げ」というワークフローが、品質とスピードのバランスとして最適でした。

Python画像処理パイプライン

モンスターのビジュアル面では、2つのPythonスクリプトを使った画像処理パイプラインを構築しました。

add_monster.py:画像の前処理

AIで生成した画像やイラストを、ゲームで使えるフォーマットに変換するスクリプトです。画像のリサイズ、フォーマット変換(PNG統一)、ファイル名の自動採番を行います。元画像のアスペクト比を保ちつつ、ゲーム内で統一的に表示できるサイズに調整します。

make_transparent.py:BFSベースの背景除去

こちらがパイプラインの核心です。モンスターのイラストから背景を除去し、キャラクター部分だけを透過PNGにする処理を、BFS(幅優先探索)アルゴリズムで実装しました。PillowとNumPyを使って画像をピクセル単位で処理します。

BFS背景除去の仕組み

  1. 画像の四辺から探索開始:画像の上下左右の端にあるピクセルをキューに追加し、BFSの起点とする。
  2. 「白に近い」ピクセルの判定:各ピクセルのRGB値を調べ、背景色(白)に十分近いかを判定。閾値を設定して柔軟に対応。
  3. 黒い輪郭線で探索停止:ピクセルの明度が閾値以下(=黒い輪郭線)に達したら、そこで探索を止める。これがキャラクターの境界になる。
  4. 探索済み領域を透過に設定:BFSで到達できた領域(=背景)のアルファ値を0にして透過化。
  5. 結果:キャラクター内部の白い部分(目のハイライトなど)は保持されたまま、外側の背景だけが透明になる。

一般的な背景除去ツールでは、キャラクター内部の白まで消えてしまうことがあります。BFSアプローチなら「外側から探索して輪郭線で止まる」ため、内部の白は確実に保持されます。シンプルなアルゴリズムですが、イラスト調のモンスター画像には非常に相性が良い手法でした。

5階層のモンスター体系

生成したモンスターは、ゲーム内で5つの階層に分類されています。

  • 通常モンスター:約30体。各難易度のバトルでランダムに出現。
  • ボス:8体。5連勝で解放される特別な敵。強力だが、倒せば大きな達成感がある。
  • 隠しボス:5体。特定条件を満たすと出現する最強の敵。

難易度ごとに出現するモンスターを分けることで、段階的な挑戦感を演出しています。初級では手作りのシンプルなモンスターが登場し、中級・上級になるとAI生成のより個性的なモンスターが追加される構成です。プレイヤーが上の難易度に進んだとき、「見たことないモンスターがいる!」というワクワク感を生むための工夫です。

SVGからPNGへの移行

実は開発当初、モンスターの画像はSVGで作成していました。SVGならコードで生成・編集が容易で、解像度に依存しないメリットがあります。しかし、実際に運用してみると2つの問題が浮上しました。

  • 表現力の限界:グラデーションや複雑な色表現がSVGでは難しく、モンスターのビジュアルが単調になりがちだった。
  • ファイルサイズ:複雑なSVGは意外とファイルサイズが大きくなる場合があり、最適化されたPNGの方がコンパクトなケースもあった。

最終的にPNGに統一し、前述の画像処理パイプラインで一括変換する方式に落ち着きました。BGMやSEも含めたアセット全体の最適化を行い、PWAとしてのパフォーマンス(特に初回読み込み速度やオフライン対応)を確保しています。

「AI生成→Python画像処理→ゲームに組み込み」という一連のパイプラインにより、モンスターの追加が非常にスムーズになりました。新しいモンスターを思いついたら、数分でゲームに反映できる体制が整っています。

あわせて読みたい

→ KUKU BATTLE MASTER のモンスターたちに会いに行く

よくある質問

Q. Claude API には何を生成させている?

A. モンスターの名前、説明文、HP や攻撃力などのステータス、属性のような構造化データを JSON で生成させています。そのままゲームデータに取り込みやすい形にしているのがポイントです。

Q. モンスター生成は完全自動化している?

A. 完全自動化ではありません。AI が下書きを作り、人間がゲームバランスや子ども向け表現を確認してから採用しています。速度は AI、品質管理は人間という分担にしています。

Q. 画像処理を Python で組んだ理由は?

A. Pillow や NumPy を使ったリサイズ、透過処理、ファイル変換の流れをまとめやすかったからです。小さなスクリプトをつなげて再利用しやすく、個人開発のアセット整備に向いていました。

バトルシステムの設計次の記事:多彩なゲームモードの実装一覧