5.1さらうどん

@giginetの技術ブログ。ゲーム開発、iOS開発、その他いろいろ

ポケモン構築管理アプリ『PokeBox』を『Pokémon Champions』サポートした - AI時代のポケモン開発

PokeBoxのPokémon Championsサポート!

Pokémon Champions』ついに出ましたね!!!

僕は、剣盾末期の2022年に『PokeBox』というポケモンの構築管理をするiOSアプリをリリースして未だに細々とメンテしている。

この機会に大幅リニューアルした

PokeBox - 構築管理チャンピオンズ

PokeBox - 構築管理チャンピオンズ

  • gigi-net.net
  • ユーティリティ
  • 無料

新作が出る度にデータは更新しているし、最近では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以降の種族やわざ、とくせい、アイテム、日本語ローカライズなどは大体僕が追加していた

能力値の変更など、チマチマ人力でやっていた

SV DLCの『碧の仮面』『蒼の円盤』辺りまではこの開発体制だったが、次第にオーバーヘッドがデカくなってきて、OSSに貢献するのが大変になってきた。

  • 『PokeBox』に不要なデータの設定まで求められる。例えば対戦に使えないアイテムのデータや日本語、英語以外のローカライズなど
  • 一存で新規テーブルやデータ構造の追加ができない
  • メンテナの文化圏が異なり、レビュー体制やPRへのサポートがやりづらかった

このような不自由さがあり、この機会にオープンデータから袂を分かつことにした。

AI時代のデータベース構築

SVのDLC(2023年末)まではExcelを使い、データを半手動で手打ちしていた。当時もAIによる自動パースのようなことは検討したが、当時の技術水準では困難だった。

しかし時は流れ世はAI時代。データベース構築をほぼClaude Codeのみで行えるようになった。隔世の感!

というわけで、Claude CodeのRulesやSkillを作成して、Pokémon WikiBulbapedia, Serebii.netなどの英語圏の攻略サイトから情報収集ができるように構築した。

データベースとポケモンのドメイン知識を記したRuleの一例

不思議なことに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最高!!!

個人的にゲーム本編もアプリ開発もまだハマっているので、今後自分がゲームで遊びながら欲しいツールをどんどん追加していくつもり。

現状、ゲーム本編での個体作成が気楽すぎて、アプリにメモるよりも直接ゲーム内で作成してしまった方が早いという現象が起きているので、ゲーム画面の写真から自動入力するような機能も検討したいと考えている。特にスマフォ版が出たらスクリーンショットの入力は捗りそう。そのうち作りたいのでお待ちください。

PokeBox - 構築管理チャンピオンズ

PokeBox - 構築管理チャンピオンズ

  • gigi-net.net
  • ユーティリティ
  • 無料

WezTerm上のClaude Codeの稼働状態を監視するmacOSアプリ、CCMissionControlを作った

CCMissionControl

稼働中のClaude Codeセッションが一覧表示!

Claude Codeを複数起動しているとき、ほかのセッションの稼働状況を知りたい需要は高く、様々な方法が提案されてきた。Notification Hookを使ってサウンドを鳴らしたりTerminalのVisual Bellをフックしたり。最近はcmuxなんていうソリューションも出てきた。

どうにもユースケースに微妙に合わないので、WezTermで使える自分用のmacOSアプリ、CCMissionControlを作った。

Mission Controlとは、スペースシャトルの管制室のこと。往年のMacユーザーであれば、古のMission ControlというOS機能を思い出す(実際それは意識した)。

機能としてはこんな感じ。

  • 実行中、待機中のClaude Codeセッションを一覧表示
  • 未読管理。セッションが終わったときに未読表示。WezTerm上でタブを選択すると既読に
  • バックグラウンドのセッションが終わったらmacOSのネイティブ通知
  • メニューバーにも出せるし、フロートウィンドウにもできる
  • GUIからWezTermのタブやペインを切り替えられる
  • システム起動時の自動機能

個人的に嬉しいのは、終了時や認証確認時にmacOSのネイティブ通知も飛ばしてくれること。さらにこの通知はWezTerm上のセッションがバックグラウンド(別のタブで表示されているなど)のときしか飛んでこない。通知をタップしたらそのままWezTermのペインを移動してくれる。最高便利。

クリックすると即座に作業に戻れる

WezTerm専用GUIアプリ!

このアプリはWezTerm専用となっている。これはWeztermが強力なwezterm CLIを提供していて、これ経由でタブやペインの選択状態を取得・操作しているため。

これにより、WezTerm側で、どのClaude Codeセッションを持つttyがアクティブになっているかを外部から監視、操作することができている。

例えば wezterm cli list --format json などを実行すると、現在開かれているペインの情報が返ってくる。

{
    {
        "window_id": 0,
            "tab_id": 14,
            "pane_id": 28,
            "workspace": "default",
            "size": {
                "rows": 63,
                "cols": 79,
                "pixel_width": 1501,
                "pixel_height": 2394,
                "dpi": 144
            },
            "title": "zsh",
            "cwd": "file:///Users/giginet/.ghq/github.com/giginet/blog-articles",
            "cursor_x": 0,
            "cursor_y": 1,
            "cursor_shape": "Default",
            "cursor_visibility": "Visible",
            "left_col": 80,
            "top_row": 0,
            "tab_title": "",
            "window_title": "< (~/.ghq/github.com/giginet/blog-articles/entry/2026/04/10) - Nvim",
            "is_active": true,
            "is_zoomed": false,
            "tty_name": "/dev/ttys011"
    }
}

macOSアプリ側から、このCLIの実行結果を定期的にpollingして情報を更新している。またペインのアクティブ状況も見れたり、wezterm cli activate-paneでペインの選択状態も変更できるため、既読管理をしたり、GUI側からWezTermに反映したりと、双方向のインタラクションを実現している。

Claude Codeプロセスの取得

ttyから紐付いているClaude Codeのセッションと動作状況を取得

基本的なアイディアはこの記事に大変お世話になった。大変ありがとうございました。

この記事で解説されているとおり、psコマンドでclaude PIDを探し、それを実行しているtmuxのペインと紐付けている。

Claude Codeが動作中かどうかの判定

これも記事で解説されているが、Claude Codeは動作中のスリープを抑止するために、子プロセスとしてcaffeinateを発行するらしい。これを監視することで、動作中かどうかを検出している。

記事で紹介されているGoのコードをコンテキストとして与え、Swift移植を頼んだところすぐにできた。

どうぞご利用ください!

macOS + WezTermユーザー専用だけど、使っている人には便利だと思う。

リリースページに公証済みのバイナリも配布しているので、ぜひ使ってもらえると幸い。

Claude Code Plugin Marketplaceのカタログを公開できるcc-plugin-catalogを作った

cc-plugin-catalog作った!

業務でメンテしているClaude CodeのPlugin Marketplaceの数が増えてきて、GitHub上のファイルツリーだけでは一覧性が悪くなってきた。また、タグやキーワードを設定する機能もあるが、横断的に閲覧できずに表記が揺れたり、あまり意味を成していないという課題感もあった。

というわけで簡単にカタログを生成・GitHub Pagesに公開できるツールを思いついて作ってみた。

公式Marketplaceで生成するとにぎやか

プラグインごとの詳細ページも綺麗に読める

動作例としてはこんな感じになる。

使い方

自分のMarketplaceでプレビューする

Plugin Marketplaceのリポジトリでuvx cc-plugin-catalog preview .を実行するだけ。

GitHub Pagesへのデプロイ

手元で動かすだけだと意味が薄いので、GitHub Pagesへの公開に重点を置いて設計されている。デプロイには、事前にリポジトリのGitHub Pagesの設定をGitHub Actionsにしておく必要がある。

Settings > Pagesから変更できる

その後、以下のようなGitHub ActionsのWorkflowを作るだけ。

name: Deploy Plugin Catalog

on:
  push:
    branches: [main]

permissions:
  pages: write
  id-token: write

jobs:
  deploy:
    uses: giginet/cc-plugin-catalog/.github/workflows/build-pages.yml@v1
    # Optional: customize with inputs
    # with:
    #   base-url: "https://example.github.io/my-marketplace"  # Enables OGP meta tags
    #   logo: "assets/logo.png"                                # Header logo image

このDeployのしやすさという部分はこだわった。もちろんGitHub Enterpriseでも使えます。

なお、これでも面倒な人は、plugin marketplaceのリポジトリで「giginet/cc-plugin-catalogを使ってGitHub Actions作って」と言えばREADMEを読んで生成してくれる。

社内のMarketplaceにぜひ!

思いついてから完成まで1〜2時間でパッとできてしまった。PyPIへのリリースも10年ぶりぐらいだけど、AIに頼んだら特に追加調査なく実現できた。

個人であまり大きなMarketplaceを保守している例は少ないだろうから、使いどころが限られるけど、In-HouseのMarketplaceには最適だと思う。

どうぞご利用ください。