生成AIで自分だけのポケモン対戦ツールを作ろう
生成AIでポケモン対戦ツールを作る際のTIpsをまとめてます。

こんな感じのゆる〜いポケモン対戦ツールをAntigravity を使ってAI主導で開発しています。
自分個人での利用を目的としてMac上でのみ動作させているため、公開は特にしていません。
自分の環境で使える対戦ツールを作る
ここでいう「自分の環境」とは、外部のネットワークとは繋がっていない自分のパソコン、スマートフォンなど個人の端末のみで利用できる環境のことを指します。
昨今の生成AIブームで、ChatGPTや、Claude、Geminiなどを使って簡単にプログラミング、アプリ開発ができるようになりました。
これを書いている2025年4月7日時点で、明日はポケモンチャンピオンズ(以下ポチャンプ)のリリース日です。
ポチャンプでは 個体値廃止 、 努力値の最大量の変更(65→66) 、 メガシンカの復刻 など、前身のSVから対戦要素について仕様変更があり、これまで使っていた対戦ツールも新しい機能追加や情報更新がされないと思い通りに使えないことがあります。
そういった課題を、生成AIを使って自分向けに作ってしまえばリアルタイムに新しい仕様に対応できますし、ある程度対戦に慣れてきたら自分好みに仕様を追加して機能拡張することもできます。
また、これらを自分のみの環境に構築することで以下のようなメリットがあります。
①自分向けにのみ作れば良い
通常、いわゆるWebアプリやスマホのアプリとして構築する場合は、誰でもアクセスできようにサーバーを用意したりランニングコストが発生します。
また、万人に使ってもらえるためにWebアプリの場合はChoromeやEdge、スマホアプリの場合はiPhone、Androidのそれぞれの機種で動作を確認したりと調整が必要になってきます。
自分の環境向けの場合は、こういったブラウザや機種に依存した設計を考慮することが不要で、自分が普段使っている端末だけ動けばよい、 なんなら多少のバグが残っていても自分が許容できれば良い ので心理的な障壁をグッと下げることができます。
②著作権の心配事が減る
某対戦シュミレーターサイトや、各ポケモン対戦に関するツールでポケモンの画像などに対する著作権が問題視されることがあります。
こういったケースについて、ポケモンの知的財産権に関するページ の1.著作権についてを確認すると
データは、個人的に楽しむ場合に限って利用を許諾されるものであり、著作権が譲渡されるものではありません
という記載があります。
また、著作権法第30条でも私的使用でのダウンロードは問題ないという記載があるため、 よほどのこと(データぶっこ抜きなど) をしない限りは個人で楽しむ分には著作権については心配しなくてよくなります。
例えば、私が公開している テンキーでできるダメージ計算ツール では、コンセプトとして 簡単にダメージ計算ができる ように極力情報を省いているようにしていますが、実はポケモンごとのダメージ計算に対応すると 各種族値の正確性やポケモン画像の著作権 がクリアできるかどうかがわからなかったので省いているような裏事情があったりします。
生成AIでポケモン対戦ツールを開発するときのTips集
今時の生成AIはある程度プロンプトを書けばそれなりのものができあがってくるのですが、多少はプログラミングやシステム開発に関する知識があったほうがより機能追加に強かったり、思い通りのものができやすくなりますので、自分がツールを開発していく上で工夫した点をTipsとして以下にまとめていきます。
データの領域とアプリの領域を分ける

ポケモン対戦系のツールを開発する上で、まずは各種ポケモンや技の情報などデータを取得する必要があります。
それらの情報を蓄積する データ基盤 の領域と、対戦ツールの アプリ の領域はしっかり分けようね、という話です。
上に悪い例と良い例を書いたのですが、悪い例では取得したデータとアプリケーションを管理するためのデータベースを1つで賄っています。場合によってはデータ取得ツールもアプリケーションとして統合されていることが初期ではあるかと思います。
これの何がまずいかといいますと、取得したデータの構成がアプリケーションのデータ構成と 密に結合している状態(密結合) になってしまい、アプリケーションではこのような密結合が起きている状態だと、 機能追加といった変更に弱い ようになってしまいます。裏を返せば、デモ程度で寿命の短いアプリであれば速度重視でどんどん密な状態でも良いと考えてます。
良い例だと、データ基盤の領域とアプリのデータベースを分けて用意し、さらにデータ基盤からアプリデータベースへは参照しかし内容にすることで、 お互いが疎な状態(疎結合) にすることができ、途中でアプリのデータベースの構造を変えてもデータ基盤に影響が及ぶことがなく、変更に強いアプリ開発をすることができるようになります。
データ基盤は3層(raw/proceed/curated)を意識する
これもデータエンジニアの方にはお馴染みのアーキテクチャだったりします。

ポケモン名などのデータを取得し、データ基盤に保存するのですが、その際に上のような Raw層、 Proceed層、 Curated層という3ステップを意識してデータパイプラインを準備してあげると、今後の変更にも強いデータを作ることができます。
それぞれの層のイメージは以下です。
- Raw層
- データ取得元から取得したJSONファイルやCSVファイルを 無加工 でとにかく貯め込みます
- 後工程のProceed層、Curated層で変更した際に、毎回データ取得元からデータを取得しなくて済むので、相手にも迷惑をかけなくてよいようになります
- 特に 取得元に短期間で集中的にデータを取得しない ようにしましょう。目安ですが、1秒で1リクエスト程度の頻度でアクセスできるようにデータ取得ツールを組みます。
- Proceed層
- 取得データから欠測があったり、一部情報を結合しないといけない場合、この層で事前処理を行います
- Curated層
- データ分析をやった人ならピンとくる、いわゆる DWHやMart を作る層です
- 例えば、これまでの層でポケモン名のデータと、特性のデータの2種類を取得していた場合、それらを組み合わせて「ポケモンに特製の情報を追加した一覧データ」のような目的に沿ったデータ同士の結合を行います。
- DWHでは汎用的に使えるように大福帳を作るイメージで、次のMartではより目的に沿って事前に集計なども済ませておくイメージです。
Gitでブランチしよう
例えばエクスプローラーにあるエクセルファイルを変更し、上書き保存した時に閉じてしまうと前の変更に戻せなかったりします。
こういうことを防ぐために、コードの変更に対してバージョンニング機能を持たせることができるのが Git です。
Git難しい、怖いというような印象持つ人もいますが、 自分向けの環境で被害を受けるのは自分だけ なので、練習がてら入れてみたり、Gitの管理自体も生成AIに任せるのも手だと思います。
特に、ブランチ戦略として最低限 main ブランチと、feature ブランチに分け、mainブランチでは原則作業をせずに、常にfeatureブランチからの変更内容をマージするだけにしておくのが良いと思います。
特に、生成AIで開発をしていると 利用が多いと定期的に制限がかかります 。 アプリ改修中に制限がかかったりすると、バグが入っていて起動しなくなった時に制限が解除されるまで5時間〜1週間待つ必要があり、その間アプリが利用できなくなってしまいます。
こういった事態のときにあらかじめ開発するのをfeatureブランチだけにしておけば、制限中はmainブランチに切り替えることで修正前の状態で利用できるので、問題なく利用できたりfeatureブランチでの開発がうまく行かなくなったらそのブランチを捨てるだけで良いので、管理しやすくなります。
Git怖くないのでガンガン使いましょう!ちなみに個人利用のみの場合は Github には無理にあげなくても良いと考えています。
Githubでは、ローカル環境で管理しているGitの情報を統合的に管理してくれるのですが、パブリックリポジトリで公開するとそちらのライセンス問題とか出てくる可能性もあるので、まずはGitだけで良いかなと思います。
自分のポケモン対戦ツールの構成紹介
最後にですが、私が個人利用の目的で開発している対戦ツールを簡単に紹介します。
私はGoogle AI Proに加入し、Antigravityを使ってVibe Codingで主にAIに開発してもらっています。

簡単にアーキテクチャ図を起こしました。
データ取得と、Webアプリの2レイヤーで構成されています。
DWH層としてDuckDBを採用しています。
SQLite3のようにローカルファイルとしてDBの情報を格納できるので、ライトに利用できて良いです。このDuckDBに対してJupyter Notebookから分析をすることもできます。
データ取得元として、 PokeAPI を利用しています。
利用方法について、 About の内容を理解してから活用するようにしてください。
構築一覧

構築を管理するページです。
SV, Championsなどゲーム別、レギュレーション別にフィルターできるようにしています。
また、似たような構築もするため複製機能も用意しました。


ポケモン別の情報入力では、SVの場合は252振り、Championsでは32振りできるようにしています。
個人的に耐久指数や火力指数の値が欲しかったので計算してもらうようにし、メガシンカにも対応できるようにトグルを追加して努力値を引き継いだまま値を確認できるようにしています。
ポケモンに対して調整意図のメモも書けるようにしています。
バトルログ機能

対戦内容を記録することができます。
SVの時はYoutubeに保存した動画を解析して自動で起こすように開発していましたが、精度が良くないのとChampionsには対応していないので基本的にマニュアルで追加していきます。

Detailページで自分と相手の選出、振り返りメモ、対戦の時に計算したダメージ計算を記録できるようにしています。
選出、ダメージ計算については他の機能と連動するようにしています。振り返りメモも将来的にはAIに読ませて傾向分析とかに活用したいです。


バトルログには構築ページで作成した構築と紐づけることができるため、構築のAnalyzeページから選出別の戦績やタイプ補完を確認できるようにしています。
ポケモン、技検索機能

主に対戦中にパッと種族値や技の威力を調べるために文字入力するだけで都度検索結果が表示されるような仕組みを入れています。

また、各ポケモン名から個別ページに飛ぶようにし、バトルログで記載したダメージ計算をここでも確認できるようにしています。
レギュレーション管理機能


各機能でゲーム別、レギュレーション別にフィルターするための情報を管理する目的で作成しました。



そこから派生させて、各環境の分析ができるように機能を追加しています。
最近画像で見れるようにしたのですが、取得元で一部追いついていないものがあり非表示になっています。ただ自分はそこまで気にしない派なのでこのまま使っています。
最後に
いかがだったでしょうか?
近年の生成AIの進化は凄まじく、月を追う毎にどんどん便利な機能がアップデートされているため、情報を追うのは大変ですが、使いこなせると便利なツールを手軽に、自分の要望に沿って作ることができます。
ポケモン×生成AIで活動されている方やDiscordのサーバーもありますので、そのようなコミュニティで聞いてみるもよし、もちろん私宛にも連絡いただければなんでも答えられる範囲で答えます!
