手軽屋
ツール一覧

Gamepad API標準マッピング解説:XboxレイアウトとSwitch Proの違い

ガイド記事 / 約7分で読めます / 一次情報: MDN「Gamepad API」「Using the Gamepad API」

1. Gamepad APIとは

Gamepad APIはW3Cが2014年に策定したWeb標準仕様で、ブラウザからゲームパッドの入力状態を取得するためのJavaScript APIです。MDNによれば「Baseline: Widely available」状態にあり、2017年3月以降の主要ブラウザで広く利用可能です。 中核となるのがnavigator.getGamepads()メソッドで、接続中のゲームパッド配列を返します。各要素はGamepadインターフェースで、id(識別文字列)、mapping(マッピング方式)、buttons(ボタン配列)、axes(軸配列)、vibrationActuator(振動装置)などのプロパティを持ちます。

2. 標準マッピング("standard")の定義

Gamepad APIの標準マッピングは、ブラウザがコントローラーを認識した時にpad.mapping"standard"または""(空文字=独自マッピング)が入る仕組みです。 標準マッピングではボタン番号と物理ボタンの対応が固定されており、JavaScript側で「buttons[0]はA/×ボタン」「axes[0]は左スティックX軸」のような前提でコードが書けます。

IndexXboxPlayStationSwitch Pro
buttons[0]A×B(位置入れ替わり)
buttons[1]BA(位置入れ替わり)
buttons[2]XY(位置入れ替わり)
buttons[3]YX(位置入れ替わり)
buttons[6]LTL2ZL
buttons[7]RTR2ZR

3. なぜXboxレイアウトが基準なのか

W3C仕様策定当時(2013〜2014年)にPC向けゲームパッドのデファクトスタンダードがマイクロソフトXbox 360 / Xbox One用XInput準拠コントローラーだったためです。 Windows PC向けゲームのほとんどがXInput準拠を前提に作られており、PlayStation・Switch Pro等の異種パッドもブラウザ実装でXInput相当の信号にマッピングし直されます。 このため、Switch Proコントローラーを接続するとブラウザ表示上はA・Bが実物と入れ替わって見えます。 これはバグではなく仕様準拠で、Switchの物理ボタンA(右)はXboxレイアウトのB(右)と同じインデックスに割り当てられているためです。 本ツールはこの仕様を踏まえ、標準マッピング時は「A / ×ボタン」のようにXbox/PlayStationの呼び名を併記し、ユーザーが混乱しないよう配慮しています。

4. 独自マッピング判定時の挙動

ブラウザがコントローラーを認識できない場合や、独自規格コントローラーの場合はpad.mappingが空文字(独自マッピング)になります。この時はボタン番号と物理ボタンの対応が保証されないため、本ツールでは「ボタン 0」「ボタン 1」のように番号のみ表示します。 独自マッピング判定になりやすい例:①古いUSBゲームパッド(PSXからのアダプタ等)②サードパーティ製の特殊レイアウト(HOTASフライトスティック、レースハンドル等)③一部のアーケードスティック。 この場合でも、ボタンの「反応そのもの」は正しく検出できるため、動作確認用途としては十分機能します。

5. ブラウザ別の対応状況

Gamepad APIは2017年3月から「Baseline Widely available」とMDNがマークしており、Chrome(74以降)、Firefox(46以降)、Safari(10.1以降)、Edge(Chromium版全て)、Opera(24以降)が対応しています。 ただし、振動(GamepadHapticActuator.playEffect)は対応にばらつきがあり、Chrome系は比較的安定、Firefoxは限定的、Safariは"dual-rumble"のみ近年対応した状況です。 またコネクション検出の挙動も微妙に異なり、ChromeとEdgeは接続直後にgamepadconnectedイベントが発火、Firefoxはセキュリティ上の理由で「ユーザーが任意のボタンを押すまで」検出を遅延させます。 本ツールは両挙動を吸収するため、requestAnimationFrame + 250ms間隔の低頻度ポーリングで安定検出を実現しています。

6. セキュリティ考慮事項

Gamepad APIはHTTPSコンテキスト(またはlocalhost)でのみ動作するセキュリティ制約があります。HTTPページからは利用できません。 また、ブラウザによっては「ボタン入力前は検出しない」というユーザーゲスチャ要件もあり、これはフィンガープリンティング(パッドIDからユーザー識別を試みる行為)を抑制する目的があります。 本ツール(手軽屋)は完全HTTPS配信、検出されたGamepad情報は端末ローカル処理のみで外部送信せず、プライバシーに配慮した設計です。

関連記事