【難易度】初級★☆☆/【対象環境】Windows 10(64bit)・Windows 11/BizHawk 2.9.1〜2.10系(2026年8月時点)/有線USBパッド・Bluetoothパッドの両方を想定
【PR】本記事はアフィリエイトリンク(Amazonアソシエイト)を含みます。Amazonのアソシエイトとして、当ブログは適格販売により収入を得ています。
【技術検証に関する法的注意事項・免責事項】
本記事に掲載されているメモリ解析、Luaスクリプト実行、およびAIコード生成に関する技術情報は、自らが所有するゲームソフトおよびオフライン環境における技術研究・教育目的の検証記録です。著作権法第47条の3に配慮し、複製ROMの配布、コピーガードの回避(DRM解除)、オンライン環境での不正操作(BOT化)等に関する情報は一切取り扱いません。掲載情報の実行によって生じた損害について、当ブログは一切の責任を負いかねます。
結論から書きます。BizHawkのコントローラー設定は Config → Controllers… で開きます。ただし「メニューを開いたのに設定項目が空っぽ」という詰まり方をする人が非常に多く、その原因はほぼ1つ、先に自分が所有しているソフトのデータを読み込んでいないからです。
BizHawkはマルチエミュレーターなので、「今どのハードとして動いているか」が決まるまで、割り当てるべきボタンの一覧を作れません。つまりソフトを読み込む → Config → Controllers… → 割り当てるという順番が固定されています。ここさえ押さえれば、あとは箱をクリックしてボタンを押すだけの単純作業です。
この記事では、1P分の割り当て → 巻き戻し・早送り・状態保存などのホットキー → パッドが反応しないときの切り分け5項目 → 2P以降の追加 → アナログの遊び幅(デッドゾーン)→ 設定ファイルの保存場所とバックアップ、までを順番にたどります。最後に、割り当て内容をAIに一覧化させたときの試行錯誤ログも載せます。

1. 設定画面はどこにあるか(開く前にやることが1つある)
手順はこの3つだけです。
- 先に、自分が所有しているソフトのデータを読み込む(
File → Open)。これをやらないと割り当て欄が作られません - メニューの
Configを開く Controllers…を選ぶ
開いたウィンドウには、読み込んだハードに応じたタブが並びます。代表的なのは次の4つです。
- Console / Gamepad 系のタブ:十字キー・A・B・Start・Selectなど、実機のボタンに対応する割り当て
- Autofire:連射として扱う入力の割り当て
- Analog:アナログスティックの範囲・感度・遊び幅(後述)
- Console:リセットなど本体側の操作
ここで重要なのは、この画面はエミュレーター全体の設定ではなく「今読み込んでいるハードの設定」だということです。別のハードのソフトを読み込むと、割り当ては別枠として管理されます。「昨日は動いたのに今日は効かない」の多くはこれが原因で、故障でも不具合でもありません。
まだ本体側の準備が終わっていない場合
日本語表示やLua Consoleの初期設定を含む、その手前の工程はこちらにまとめています。

2. キー割り当ての基本手順(1P分・所要3分)
割り当ての操作自体は驚くほど単純です。
- 割り当てたいボタンの入力欄をクリックする(欄が入力待ちになる)
- キーボードのキーを押す、またはパッドのボタンを押す
- 欄に入力名が入る。これを必要なボタン分くり返す
- ウィンドウ下部の
OKで確定する
ポイントが3つあります。
ポイント①:1つのボタンに複数の入力を割り当てられる
入力欄はカンマ区切りで複数保持できます。キーボードとパッドを同じボタンに同居させておくと、パッドを外したときにキーボードへ自動的にフォールバックできるので、検証作業では地味に効きます。
ポイント②:入力名の先頭記号でデバイス種別が読める
割り当て後、欄に入る文字列の先頭を見るとデバイスの種類が分かります。
| 先頭 | 意味 | 典型例 |
|---|---|---|
X1 /X2 … |
XInput として認識されたパッド(1台目/2台目) | X1 A, X1 DpadUp |
J1 /J2 … |
DirectInput(汎用ジョイスティック)として認識されたパッド | J1 B1, J1 POV1U |
| 記号なし | キーボード | Z, UpArrow |
同じパッドが X1 でも J1 でも見えることがあります。両方に割り当ててしまうと入力が二重に入り、「勝手に走る」「入力が飛ぶ」といった挙動になります。どちらか一方に統一してください。
ポイント③:消したいときは欄を選んでキーで消す
割り当てを外したいときは、その欄を選択した状態で削除キーを押します。うっかり余計な入力を拾ってしまったときは、消してから割り当て直すのが確実です。
3. 巻き戻し・早送り・状態保存のホットキー
実機と違ってPCで遊ぶ最大の利点が巻き戻しと状態保存です。これらは前章のコントローラー設定ではなく、Config → Hotkeys… という別のウィンドウで割り当てます。ここを知らずに「巻き戻しのボタンが見つからない」と探し続けるのが、たぶん最頻出のつまずきです。
最低限、押さえておくと体験が変わるのは次の4つです。
- Rewind(巻き戻し):押している間だけ時間が巻き戻る
- Fast Forward / Turbo(早送り):押している間だけ加速する。イベントシーン飛ばしに使う
- Save State / Load State:任意の瞬間の状態を保存・復元する
- Frame Advance(コマ送り):1フレームずつ進める。解析用途では必須
重要な前提が1つあります。巻き戻しは、割り当てただけでは動きません。巻き戻し用のバッファ(さかのぼれる分の記録)を有効にする設定が別にあり、これがオフだとホットキーを押しても無反応です。BizHawkでは巻き戻しと状態保存の設定が同じ系統のメニューにまとまっているので、ホットキーを割り当てる前に、まず巻き戻し機能そのものを有効化してください。
また、既定の割り当てはバージョンや過去の設定引き継ぎによって異なります。「記事に書いてあるキーが効かない」ときは、その割り当てが自分の環境では別のキーになっているだけです。既定値を信じず、必ず現在の割り当てを目で確認してから上書きするのが安全です(現在の割り当てを一覧で吐き出す方法は後半の試行錯誤ログで扱います)。
ホットキーとゲーム入力が衝突したときは
ホットキー側とゲーム側に同じキーを割り当てると、片方しか反応しないか、両方同時に発火します。ゲーム操作は原則パッド、ホットキーは原則キーボードと役割を分けておくと、衝突そのものが起きなくなります。パッド側のボタン数が足りないときだけ、余っているボタンをホットキーへ回すのがおすすめの順番です。
4. コントローラーが認識しないときのチェック順(5項目)
「パッドが反応しない」は原因が複数あるので、上から順に、1つずつ切り分けます。順番を飛ばすと原因が特定できません。
チェック1:Windows側で認識されているか
まずエミュレーターの外側を確認します。Windowsのゲームコントローラー設定(joy.cpl)を開き、パッドが一覧に出ているか、ボタンを押して反応するかを見ます。ここで反応しないなら、原因はBizHawkではありません。ケーブル・ドライバ・ペアリングの問題です。
チェック2:BizHawkより後にパッドを挿していないか
入力デバイスの一覧は起動時に作られます。EmuHawkを起動した後にパッドを接続した場合、そのパッドが一覧に現れないことがあります。切り分けはかんたんで、パッドを挿した状態でBizHawkを再起動するだけです。これで直る事例が相当数あります。
チェック3:ソフトを読み込む前に設定画面を開いていないか
第1章のとおりです。読み込み前は割り当て欄が生成されないため、「設定した気になっていたが実際には保存されていない」状態が起こります。読み込み → 設定の順で開き直してください。
チェック4:ウィンドウが前面にあるか(バックグラウンド入力)
BizHawkは既定で、ウィンドウが非アクティブのときに入力を受け付けません。ブラウザや解説ページを見ながら操作していると「急に効かなくなった」ように見えます。裏側でも入力を受け取りたい場合は、バックグラウンド入力を許可する設定(Config → Customize 系のオプション)を有効にします。ただし、他のアプリを操作しているつもりでゲーム側にも入力が入るので、常用は非推奨です。
チェック5:XInput と DirectInput の二重割り当て
第2章のポイント②です。X1 とJ1 の両方に割り当てが残っていないかを確認します。「入力が2回分入る」「ニュートラルに戻らない」はほぼこれです。
それでも直らないとき:物理層を疑う
ここまでで直らない場合、残るのは電力と経路です。バスパワーのハブに複数のデバイスをぶら下げていると、パッドが断続的に切断されます。PC本体のポートへ直挿しして再現するかを確認し、再現しないならハブ側が原因です。恒久対策としてはセルフパワー(ACアダプタ付き)のハブに替えるのが確実です。
コントローラーとキャプチャ機器を同時に挿すと、バスパワーのハブでは電力が足りず認識が不安定になる。ACアダプタ付き(セルフパワー)なら各ポートに電力を回せるので、録画中に接続が切れる事故を防げる。
- ✓ACアダプタ付きで電力不足を回避
- ✓USB3.0で転送が詰まらない
- ✓国内メーカーで相性トラブルが少ない
※価格・在庫・仕様は変動します。最新の情報はAmazonの商品ページでご確認ください。
5. 2P以降を追加する
2人プレイの割り当ては、同じ Config → Controllers… の中の2P用タブで行います。考え方は1Pとまったく同じですが、事故が起きやすい点が2つあります。
- デバイス番号の取り違え:2台目のパッドは
X2(またはJ2)です。1Pと同じ番号に割り当てると、2人が同じパッドを共有した状態になります - 接続順で番号が入れ替わる:抜き差しの順番によって1台目と2台目が入れ替わることがあります。2人プレイの前に必ず1回、両方のパッドで動作確認してください
ハードによっては、2P以降を使うために本体側の設定(拡張ポートの選択など)が必要な場合もあります。タブが出てこないときは、そのハードで多人数プレイに対応した構成になっているかを先に確認します。
6. アナログスティックの遊び幅(デッドゾーン)と感度
Config → Controllers… の Analog タブでは、スティック入力の扱いを調整できます。主に触るのは2つです。
| 項目 | 何が変わるか | 上げると/下げると |
|---|---|---|
| Deadzone(デッドゾーン) | スティックの「遊び」の広さ。ここに入る微小な傾きは入力0として無視される | 上げる=勝手に動くのが止まる/下げる=細かい操作が拾える |
| Multiplier(感度・倍率) | 傾きをどれだけ強い入力として渡すか | 上げる=軽い傾きで最大入力/下げる=じわっと効く |
「触っていないのにキャラが少しずつ動く」=スティックのドリフトは、まずデッドゾーンを少し上げると実用上は止まります。ただしこれは症状を隠しているだけで、原因(スティックの摩耗やセンサーの劣化)は残っています。デッドゾーンを大きく取らないと止まらない状態まで来ているなら、パッドの寿命として判断したほうが結果的に早いです。
逆に、精密な操作を要求されるハードでデッドゾーンを広く取りすぎると、微入力が全部切り捨てられて「反応が鈍い」と感じます。ドリフトが止まる最小値で止めるのが正解です。
7. 設定ファイルの保存場所とバックアップ
ここがこの記事でいちばん実利のある部分かもしれません。
BizHawkの設定は、インストールフォルダ内の config.ini にまとまって保存されます。レジストリではなくフォルダ内で完結する構成なので、このファイル1つをコピーしておけば、割り当てを丸ごと退避・復元できます。PCを買い替えたときも、これを持っていくだけで設定がそのまま復活します。
そして、名前は .ini ですが中身はJSON形式です。テキストエディタで開くと、次のようなキーが並んでいるのが見えます。
AllTrollers:ハードごとの通常のボタン割り当てAllTrollersAutoFire:連射側の割り当てAllTrollersAnalog:アナログの範囲・デッドゾーン等HotkeyBindings:巻き戻し・状態保存などのホットキー割り当て
つまり「今どのボタンに何が割り当たっているか」は、GUIを1つずつ開かなくてもファイルから読めるということです。次章はここを起点にした試行錯誤ログです。
バックアップの最低限の型
- 割り当てが固まったら、EmuHawkを終了する(終了時に書き出されるため、起動中のコピーは古い可能性がある)
config.iniをconfig.ini.20260815.bakのように日付付きでコピーする- 設定を大きくいじる前には、必ずこのコピーを取り直す
これだけで「設定を壊して振り出しに戻る」事故がなくなります。
8. 試行錯誤ログ:割り当て一覧をAIに書き出させる
ここからは当ブログの本題であるAIとの試行錯誤の記録です。目的は明快で、「現在の割り当てを、GUIを開かずに一覧表示したい」。既定値がバージョンで違う以上、自分の環境の”正解”は自分のファイルにしか書いていないからです。
目的
config.ini を読み、ホットキー割り当てを「機能名 → 割り当てキー」の表で出力するスクリプトをClaudeに書かせる。実行環境はWindows+Python 3。
Claudeへ渡した実際のプロンプト
BizHawk(2.9系)の設定ファイル config.ini を読み込んで、
ホットキーの割り当て一覧を「機能名 -> 割り当てキー」の形で標準出力に表示する
Python 3 スクリプトを書いてください。
条件:
- ファイルパスはコマンドライン引数で受け取る
- 割り当てが空のものは出力しない
- 機能名でソートする
- Windows で python bindings.py "C:\BizHawk\config.ini" と実行できること
1回目の生成コード
import configparser, sys
cfg = configparser.ConfigParser()
cfg.read(sys.argv[1])
for key, value in cfg["HotkeyBindings"].items():
if value:
print(f"{key} -> {value}")
結果:エラー
configparser.MissingSectionHeaderError: File contains no section headers.
file: 'C:\\BizHawk\\config.ini', line: 1
'{\n'
これは想定内の失敗でした。AIは拡張子 .ini という文字列から「INI形式だ」と推論しています。人間もまったく同じ間違いをします。エラーメッセージの line: 1 '{' が答えを言っていて、1行目が { = 中身はJSONです。
修正のためにAIへ渡した追加情報
拡張子は .ini ですが中身はJSONでした。1行目が { です。
json モジュールで読み直してください。
トップレベルに "HotkeyBindings" というオブジェクトがあります。
2回目:まだ落ちる
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
JSONとして読んでいるのに1文字目で落ちる、という典型パターン。原因はファイル先頭のBOMで、open() の既定エンコーディングでは先頭の不可視バイトが残り、パーサーが { にたどり着けません。ここはAIが自力で気づきにくい部分で、人間が「BOMでは?」と補助する必要がありました。
最終コード(コピペ可)
import json, sys
# BizHawk の config.ini は拡張子こそ .ini だが中身は JSON。
# さらに BOM 付きで保存されることがあるため utf-8-sig で開く。
def main(path):
with open(path, encoding="utf-8-sig") as f:
cfg = json.load(f)
binds = cfg.get("HotkeyBindings", {})
rows = [(k, v) for k, v in binds.items() if v]
if not rows:
print("割り当てが1件も見つかりませんでした。パスを確認してください。")
return
width = max(len(k) for k, _ in rows)
for name, key in sorted(rows):
print(f"{name.ljust(width)} -> {key}")
print(f"\n合計 {len(rows)} 件")
if __name__ == "__main__":
if len(sys.argv) < 2:
sys.exit('使い方: python bindings.py "C:\\BizHawk\\config.ini"')
main(sys.argv[1])
実行すると、機能名と割り当てキーの対応が一覧で出ます。出力の形は次のようなイメージです(キー名は環境ごとに異なるため、ここでは形式の説明にとどめます)。
Fast Forward -> (お使いの環境の割り当て)
Frame Advance -> (お使いの環境の割り当て)
Rewind -> (お使いの環境の割り当て)
Save State 1 -> (お使いの環境の割り当て)
※実環境での出力結果(実際のキー名を含む実行画面)は、検証のうえ後日追記します。当ブログでは、未検証の値をそれらしく書くことをしない方針です。
この試行錯誤から得られた再利用可能な教訓
- AIは拡張子から形式を推論する。「.iniだがJSON」のような裏切りがある場合、先に伝えないと必ず1回落ちる
- エラーメッセージの引用部分(
'{\n')が答えを持っていることが多い。エラー全文をそのままAIに貼るのが最短 - BOM・改行コードのような不可視の問題は、AIが自力で到達しにくい。「1文字目で落ちる」を見たらエンコーディングを疑って人間が補助する
この「AIに書かせて、落として、直す」流れをそのままゲーム内部の値の観測に応用したのが、当ブログの中心テーマです。同じ型でメモリの値を画面に出す最小構成はこちらにまとめています。

よくある質問
Q1. 設定したのに、再起動すると割り当てが消えています
設定は終了時に config.ini へ書き出されます。異常終了(強制終了・フリーズ)した場合、その回の変更は保存されません。大きく設定を変えたときは、いったん正常に終了させてから作業を続けるのが確実です。フォルダの権限によっては書き込みに失敗することもあるため、書き込み制限のかかる場所(システムフォルダ直下など)に置かないでください。
Q2. Bluetoothのパッドは使えますか
使えます。ただしWindows側でペアリングが完了し、joy.cpl で反応することが前提です。無線は接続が確立するまでに時間差があるため、先にペアリング完了 → 次にEmuHawk起動の順にしてください。省電力で自動切断されるとその場で入力が止まるので、長時間の検証作業では有線をおすすめします。
Q3. 接続モードを切り替えられるパッドはどう設定すべき?
切り替え式のパッドは、モードによって X1 (XInput)で見えたり J1 (DirectInput)で見えたりします。先にモードを決め、それから割り当ててください。割り当て後にモードを変えると、番号が変わって全部効かなくなります。逆に言えば、モードを切り替えられるパッドは「認識しない原因がドライバ側かエミュレーター側か」を機材を替えずに切り分けられるので、検証用としては便利です。
Q4. これは「チート」や「改造」の話ですか?
いいえ、違います。この記事は入力デバイスの設定手順のみを扱っています。当ブログが扱うのはメモリ解析と状態検証、およびLuaによる挙動デバッグで、いずれも自らが所有するソフトをオフライン環境で検証する前提です。オンライン環境での不正操作、コピーガード回避(DRM解除)、ROM・BIOS・改変データ・セーブデータの配布や入手先の案内は一切取り扱いません。
Q5. 別のエミュレーターとは設定を共有できますか
できません。設定ファイルの構造がソフトごとに違うため、割り当てはそれぞれのソフトで作り直す必要があります。逆に言えば、片方の設定を壊してももう片方には影響しないということでもあります。
まとめ
- 設定は
Config → Controllers…。ただし先に自分が所有するソフトのデータを読み込むのが前提 - 割り当ては欄をクリック → ボタンを押すだけ。1つの欄に複数入力を同居させられる
- 巻き戻し・早送り・状態保存は
Config → Hotkeys…という別ウィンドウ。巻き戻しは機能そのものの有効化が別に必要 - 反応しないときは①Windows側で認識 ②起動後に挿していないか ③読み込み前に設定していないか ④ウィンドウが前面か ⑤XInput/DirectInputの二重割り当ての順で切り分ける
- 2P以降はデバイス番号(X2/J2)の取り違えと接続順による入れ替わりに注意
- ドリフトはデッドゾーンを、止まる最小値まで上げる。上げすぎは操作の鈍化を招く
- 設定は
config.ini(中身はJSON)に集約。このファイルをコピーするだけで丸ごと退避・復元できる - 割り当て一覧はAIに書かせたスクリプトで抽出できる。「.iniだがJSON」「BOM」の2点はAIが必ず1回落ちる場所
構成と価格帯の幅が広く、型番を1つに固定すると型落ち・在庫切れで記事がすぐ古くなる。ここは検索結果へ誘導し、選び方の基準は本文側で示す。
※価格・在庫・仕様は変動します。最新の情報はAmazonの商品ページでご確認ください。
次に読む
この記事は、PC上でレトロなゲーム環境を整えるシリーズの一部です。何から手を付けるか迷っている方は、まず親ガイドで全体の順番を確認してください。

別のエミュレーターの導入手順もあわせて読むと、役割の使い分けが分かります。



コメント