PokeBoxのPokémon Championsサポート!
『Pokémon Champions』ついに出ましたね!!!
僕は、剣盾末期の2022年に『PokeBox』というポケモンの構築管理をするiOSアプリをリリースして未だに細々とメンテしている。

新作が出る度にデータは更新しているし、最近ではSwift Dataに移行したり、Liquid Glassに対応したりと、最新のOS機能を試すためのPlaygroundとしてうまく機能している。
直近では『LEGENDS Z-A』と『M次元ラッシュ』の新規追加メガシンカ対応をした。
今回、『Champions』のリリースに当たって、SVのDLC以来の大きな改修となったので、開発手法について共有してみる。
PokeAPIからの脱却!データベースを独自実装にした
『LEGENDS Z-A』と『M次元ラッシュ』対応のデータ更新辺りから、今までデータソースに使っていたPokeAPIを直接使うのをやめ、フォークした独自のデータベース構造に移行した。
PokeAPIにはポケモンにまつわる様々なデータがCSV形式で格納されているので、それをSQLiteに焼いて、アプリから叩く仕組みだ。
ポケモンの様々なツールが世の中に出て欲しく、皆が使えるように当初は貢献のつもりでオープンソースのPokeAPIデータソースに必要なデータを追加するPRを送りまくっていた(30件以上も!)。


SV DLCの『碧の仮面』『蒼の円盤』辺りまではこの開発体制だったが、次第にオーバーヘッドがデカくなってきて、OSSに貢献するのが大変になってきた。
- 『PokeBox』に不要なデータの設定まで求められる。例えば対戦に使えないアイテムのデータや日本語、英語以外のローカライズなど
- 一存で新規テーブルやデータ構造の追加ができない
- メンテナの文化圏が異なり、レビュー体制やPRへのサポートがやりづらかった
このような不自由さがあり、この機会にオープンデータから袂を分かつことにした。
AI時代のデータベース構築
SVのDLC(2023年末)まではExcelを使い、データを半手動で手打ちしていた。当時もAIによる自動パースのようなことは検討したが、当時の技術水準では困難だった。
しかし時は流れ世はAI時代。データベース構築をほぼClaude Codeのみで行えるようになった。隔世の感!
というわけで、Claude CodeのRulesやSkillを作成して、Pokémon WikiやBulbapedia, Serebii.netなどの英語圏の攻略サイトから情報収集ができるように構築した。

不思議なことにAIはポケモンの基本的な情報をコンテキストとして与えなくても、モデルの時点で3値の仕様ぐらいは完璧に把握していた。
そのため、これぐらいの簡易的な仕組みで自律的にRDBのようなデータ構造を理解し、データ収集と更新をほぼ完璧に行ってくれた。特に覚えるわざのテーブルの作成などは人力では困難だったが、AIにより待つだけで完了して革命的だった。

ランクマッチのデータを持たせて「環境」を表現
PokeAPIのデータを使っていたことで一番困っていたのは、いわゆる「ランクマッチ環境」についてのデータを持てなかったこと。現在開催中のレギュレーションのプールを表現したりするデータ構造がなかったので、今回から『Champions』以降のレギュレーションの概念をデータ構造として持たせることにした。
種族とレギュレーションの中間テーブルで、それぞれのレギュレーションにどのポケモンが参加可能か持てるようになったので「環境」を表現することができるようになった。
このデータ作成は、公式が提供している「参加できるポケモン」のページをClaude Codeに渡しただけで生成できた。

環境のデータができたことで、ポケモンの選択画面を現在ランクマッチに参加できるもののみに絞れるようになったし、環境内のすばやさ比較ツールのようなものも実現できた。

パラメーターの仕様も『Champions』に完全移行
事前の情報にもあったとおり、『Champions』以降、三値やPP、わざの習得などの仕様が大きく変わった。
『PokeBox』は剣盾時代から運用しているアプリなので、その辺の仕様はメインシリーズに準拠しているのだけど、今回『Champions』専用の仕様に完全に移行した。
「『ポケモンチャンピオンズ』は“シリーズが続く限りほぼ永久に続く予定"」とのことで、第10世代以降も末永くガチ対戦はこの仕様が続くと考えられる。というわけで過去作の仕様は思い切って捨てることにした。
今まで保存されていたデータと互換性を保つために、内部的には0-255の値を持つ努力値(EVs)を維持し、UI上のみ0-32までの表示とすることにした。

また、SV以前に作ったポケモンは世代の概念を取り入れそのままアーカイブできるようにした。個体値(IVs)なども内部的には保存されているが、UIから消し、31で固定されるようにした。
アプリ自体の開発ももちろんAI
ここまでデータと仕様ができればあとは開発するだけだ。
アプリ開発自体もほぼAIで自動化した。個人開発だとガッとAIで実装して、動作確認もそこそこにすぐにリリースできて体験が良い。最初に「大規模アップデート」と触れたが、賞味半日ぐらいで全てが完成した。
以前からロードマップに入っていた構築メモの出力機能や、フォルムチェンジプレビュー機能、すばやさ調整ツールのような新機能も数十分程度で完成している。生産性が数百倍になっている・・・・・・。

Pokémon Champions最高!!!
個人的にゲーム本編もアプリ開発もまだハマっているので、今後自分がゲームで遊びながら欲しいツールをどんどん追加していくつもり。
現状、ゲーム本編での個体作成が気楽すぎて、アプリにメモるよりも直接ゲーム内で作成してしまった方が早いという現象が起きているので、ゲーム画面の写真から自動入力するような機能も検討したいと考えている。特にスマフォ版が出たらスクリーンショットの入力は捗りそう。そのうち作りたいのでお待ちください。
