コードを書けない文系ニートが、1週間で世界2位のポケカAIを作った話
はじめに
はじめまして。
文系ニートがAIコンペで世界2位になりました。誰か雇ってください。
プログラミングはわかりません。書けるコードは「Hello, world!」だけです。
持っている資格は、宅建士、日商簿記2級、国内旅行業務取扱管理者です。
日本語と英語が話せます。
イギリスのワーホリビザ(YMS)を持っていますが諸事情で日本にいます。
ポケモンカードはここ5年くらいはまともにプレイしていません。
そんな私が、Kaggleで開催されたポケモンカードゲームのAIをつくるコンテストにおいて、1週間で世界2位になりました。
この記事では、コードを書けない人間が、どうやってAIを作ったのかを書きます。
また、この記事の中ではわかりやすくするため、作った対戦AIを「Bot」と、相談した生成AI(Claude Code、Codexなど)を「生成AI」と、ポケモンカードを「ポケカ」と呼びます。
1. 参加したコンペについて
私が参加したのは、The Pokémon CompanyとKaggleが開催している、ポケカのBotを作るコンテストです。
https://www.kaggle.com/competitions/pokemon-tcg-ai-battle/overview
やることはシンプルです。
与えられたカードプールから自分でデッキを組む。
そのデッキを使って戦うBotを作る。
作ったデッキとBotを提出し、他の参加者のBotと自動で対戦させる。
ちなみに、一度提出したBotとデッキはもういじれないので、あとは応援し見守ることしかできません。
囲碁や将棋のAIを作って競わせるのと違うのは、デッキ選択の比重がかなり大きいことでした。
そのため、非技術者である自分でも勝ち目があると考え、参加しました。
ちなみに、最終提出締切は日本時間で2026年8月17日の朝ですのでまだしばらく時間があります。興味のある方はぜひ参加してみてください。
なお、コンペの規約に配慮し、この記事では提出コードやコンペデータそのものは掲載せず、体験談と設計思想を中心に書いています。
2. 世界2位までの流れ
暇人なので、毎日18時間ほど作業し世界2位になるまで合計623回程度改良(git commit)を重ねました。
ざっくり振り返ると、こんな感じです。
Day 0(2026年6月17日):コンテストの存在を知る。カードゲームAIの先行研究(Hearthstoneなど)をざっくり読む。強い教師データや安定した仮想敵がない状況で機械学習は厳しいと判断し、ルールベースで行くことを決める。ローカル検証用のツールや開発パイプラインを整備。
Day 1(2026年6月18日):イイネイヌデッキを作り、初提出。134位。
Day 2(2026年6月19日):スターミーデッキに乗り換え。1日でv0からv3.14まで改良。
Day 3(2026年6月20日):スターミーデッキに対面別モジュールとForward Searchを導入。v4.1を提出。
Day 4(2026年6月21日):v4.1を応援しながら、探索で見つけた勝ち筋を実ゲームで再現できないバグ潰しに1日費やす。
Day 5(2026年6月22日):引き続き応援。詰めポケカ探索を研究。
Day 6(2026年6月23日):v4.1がレーティング1296達成。世界2位に到達。
この記事を書いているDay 10(2026年6月27日)時点でまだ世界2位を維持し、瞬間最高レートは1341になりました。
3. コードはどうしたの?
コードは基本的に、Claude CodeとCodexなどに書かせました。
ですが、もちろんただ「強いBotを作って!」とお願いしたわけではありません。
私がやったのは、課題の分析と、それを解決するための設計、そしてそれをAIに伝えることです。
まず、人間がポケカをプレイするときに何を考えているかを分解する。
その判断を、Botにもできるシンプルなルールに落とし込む。
それを生成AIに伝えて実装させる。
結果をテストして、精度を確認する。
うまくいかなければ、負けた試合のリプレイを見て、どこで何を間違えたのかを特定する。
課題の本質を捉えて、ルールを直す。
サイドレース、ターン内の最適行動、リーサルを見逃さないこと、サイド落ちの把握。
そういった判断を、一つずつAIと対話しながら形にしていきました。
「このターンこうしてたら勝てたかも?」
「こういう判断を実装できる? もっと効率的にできる?」
「バグったか、全部のステップをログで見てデバッグしよう」
「実装してくれてありがとう! じゃあ300戦テストして精度を確認しよう!」
といったやりとりを、数えていませんが1万回以上やりました。
課題を特定する。解決策を設計する。テストを繰り返しながら精度を高める。
簡単に言えば、仮説検証を高速で回し続けただけです。
かなり泥臭い繰り返しですが、このサイクルこそが成果を生みました。
そのうちエンジニアの方々がすごいBotを作って、機械学習などでさらに上に来るのだと思いますが、現時点では地道な努力が勝利をもたらしました。
将棋AIなどでも、かつては人間が探索や評価の枠組みを作り、人間の棋譜から学習させる時代がありました。その後、自己対局や強化学習の比重が増し、人間には思いつきにくい手も生まれるようになったといいます。もしかすると、ポケカAIはまだその前段階なのかもしれません。
4. デッキ選択について
このセクションでは、ポケカが少しわかる方向けにお話しします。
自分には複雑なデッキを扱える賢いBotは作れないと思い、初めからそこに労力を割くつもりはありませんでした。
代わりに、ポンコツなBotでも扱えるデッキを探すことにしました。
条件は二つ。
シンプルであること。 やることが一貫している。
メタゲーム内で立ち位置がいいこと。 環境上位に勝てる見込みがある。
コンペ開始直後に流行っていたのはイワパレスでした。
イワパレスはexポケモンからのダメージを無効化する特性を持っており、対策を知らないと詰みます。
最初に作ったのは、イイネイヌを軸にした非exデッキです。
初提出で134位まで行きましたが、火力不足で頭打ちになりました。
イワパレスに詰まないexポケモンを探す中で見つけたのが、メガスターミーexとメガユキメノコexのデッキです。
デッキリストは、Limitlessという大会データベースから、一番シンプルそうなものをそのまま使いました。
ashleysandlin様、勝手に使ってすみません。最強デッキをありがとうございます。
https://play.limitlesstcg.com/tournament/69e4f71948d465883f718047/player/ashleysandlin/decklist
このデッキはシンプルで、かなりBot向けだったと思います。
使うポケモンが2系統だけ。
攻撃の選択肢が少ない。
特性持ちポケモンなどがいないので簡単。
高いHPと回復で雑に行動しやすい。
終盤の勝ち筋が比較的わかりやすい。
高耐久を押し付けて回復で粘り、毎ターンの行動を最適化するだけで長期的なゲームプランが勝手に良くなる。
ミクロの改善(1ターン1ターンの最適化)がマクロの改善(試合全体の最適化)を自動的に兼ねるので、複雑なサイドレースをBotに考えさせずに済む。
この性質に、かなり助けられました。
ちなみに、2位を取った時点で1位にいたチームもスターミーデッキを使っていたので、デッキ選択はたぶん正解だったのだと思います。
5. どんな作戦で行動させたか
Botの思考を三つのモードに分けました。
一つ目は、通常モード。
毎ターンちゃんと攻撃するための基本行動です。
ポケカをよく知らないので、たぶん毎ターンきちんと攻撃することが最も大事で、他のカードはそれを補助するためのものだと考えています。浅いゲーム理解ですみません。
とにかく、攻撃に向けたカードの使用順と優先度をルールとして定義しました。
二つ目は、対面別モード。
相手がメガルカリオexならこう、イワパレスならこう、と対面ごとに最適な行動ルールを切り替えます。
一部、対策を知らないと詰むデッキへの対策などもここに仕込みました。
三つ目は、リーサルモード。
勝てるターンを取りこぼさないための仕組みです。
ポケカでは、終盤に「この順番でカードを使えば勝ち」という局面がよくあります。
詰め将棋になぞらえ、「詰めポケカ」と呼ばれています。
人間であれば3ターン詰め、5ターン詰めを考えられるかもしれません。
でも私の作ったBotはポンコツなので、とりあえず「勝てるターンに確実に勝ちを拾う」。
これだけをゴールにし、実際にそれが功を奏したと思います。
6. おわりに:AI時代の文系スキルと何かを作ることについて
今回一番面白かったのは、文系的な能力がそのまま開発に使えたことです。
目的を見失わないこと。
複雑なものを、扱える大きさまで分解すること。
何が本質で、何が枝葉なのかを見極めること。
曖昧な直感を、他者に渡せる言葉に変えること。
仮説を立て、検証し、修正し続けること。
コードを自分が書けなくても、これらを人間がやり、それをもとにAIに指示を出せば実装してくれる時代です。
すごいですね!
私は、AIの助けがなければ今回のBotコンテストに参加してみようとは思わなかったでしょう。
ですので皆様も、AIによって人間の活動の幅が狭まると考えるだけでなく、AIをパートナーにして、今までなら手が届かなかったものを作ってみるのも面白いのではないかと思います。


コメント