PyCon JP 2026

権利の壁を越えて遊ぶ ― 自作ファミコンゲームで実践するゲームAI開発

ファミコン時代の「初見殺し」な敵キャラ ― 魔界村のレッドアリーマー、ロックマン2のクイックマンなど、幾多のプレイヤーの心を負ってきた彼ら。本トークでは、AI/MLエンジニアの私が「あの頃倒せなかった敵キャラを、今の技術で返り討ちにしたい」という動機から始めた、Python強化学習による攻略プロジェクトの全工程を共有します。

ただし市販ROMの使用には著作権・上映権の壁があり、技術カンファレンスでの実演は事実上困難です。そこで取った戦略が「自作ファミコンゲームを作る」こと。cc65 + NESlibで6502アセンブリベースの「初見殺しボス」を実装し、Gymnasium環境化、stable-baselines3でPPOエージェントを学習させました。

今回のチャレンジで学んだ知見:

  • 自作ROMだからこそ可能なクリーンなメモリレイアウトと観察空間設計
  • プレイヤーの攻撃を回避し、人間反応時間(〜250ms)を下回る予告5フレームでカウンターしてくる「RLにしか勝てない」ボス設計
  • 報酬関数の試行錯誤と典型的な報酬ハッキング失敗例
  • 権利問題を回避しつつゲーム × RLを発表する実践的アプローチ

本トークは「強化学習に手を出してみたいPython中級者」「ゲーム × AIに興味があるエンジニア」「かつてのファミコンのトラウマを今晴らしたい人」のためのものです。

Tell us about your own experience with this topic

業務でAI/MLエンジニアとして画像認識関連の開発に従事しています。強化学習は業務外でGymnasium + stable-baselines3を触ってきました。

私のゲーム遍歴は「初見殺しの敵キャラに泣かされ続けた歴史」でもあります。魔界村のレッドアリーマーには唐突に迫り来る突進で骨にされ、ロックマン2のクイックマンにはブーメランと体当たりで粉々にされ、幼い頃の自分は何度も辛酸をなめされました。最近ようやくSekiroの葦名一心は倒せるようになりましたが、「あの頃のボスたちを現代の強化学習で殴り返したい」という気持ちは消えませんでした。

それが本企画の出発点です。市販ROMの権利問題に直面して6502アセンブリ + cc65で自作ボスを書くことになり、NESDEV Wikiと格闘し、自作したボスに自作したエージェントが倒され続けるという奇妙な体験を、皆さんに共有したいです。cc65 + Mesen の開発環境はHello World ROMの実機動作まで確認済みで、本番ROMの実装に着手しています。

What discussions can you have with attendees through this talk?

権利を意識した「ゲームAI × Python」発表スタイル: 本当はみんなが知っているゲームのコードを公の場で語りたい葛藤と、自作ROMという解決策のトレードオフ
報酬設計の哲学: 「理不尽さ」をどう報酬関数に落とし込むか、参加者ならどう設計するかを議論したいです
「人間にとって理不尽」と「RLにとって難しい」のギャップ: 当時の人類が勝てなかったボスを、エージェントは案外あっさり倒した(あるいは逆のこともあり得るのか)

休憩時間の合間で「あなたのトラウマボスは何ですか?」という会話をしたり、レッドアリーマーで意気投合するもよし、葦名一心で「迷えば、敗れる」というのを座右の銘にした、などのエピソードができたら最高だと思っています。

The speaker's profile picture
Yoshihiro Matsugi

AI/MLエンジニア。業務では画像認識系の開発に従事しています。業務外で Gymnasium + stable-baselines3を触っているうちに「子供の頃倒せなかったレッドアリーマーを、今の技術で殴り返したい」と思い立ち、気づいたら6502アセンブリで自作ボスを書いていました。PyCon JP は今回が初登壇です。直近の最大の功績はSekiroの葦名一心を倒したこと。次の目標は、自作したエージェントが自作したボスを倒すところを皆さんの前でお見せすることです。

  • GitHub: https://github.com/caffein1371