ゲームパッドテスト
ブラウザでゲームパッドのボタン、スティック、トリガー、十字キー、振動をテスト
左スティック
右スティック
トリガー
振動テスト
イベント履歴
ゲームパッドテストとは?
ゲームパッドテストは、W3C Gamepad API を通じてゲームパッドからブラウザに送られる信号を読み取り、リアルタイムに表示します: ボタン押下、アナログスティックの位置、トリガーの押し込み量、十字キーの方向、振動モーターのすべてを可視化します。プレイ前にゲームパッドが正常か確認したい、反応が悪いボタンを診断したい、古いパッドのスティックドリフトを発見したい、両方の振動モーターが動くか検証したい、といった用途に最短で対応できます。ページは Xbox 風レイアウトで各入力をハイライトし、スティックとトリガーの生の数値を表示し、短いイベントログを保持します。Gamepad API はユーザーがゲームパッドのボタンを押した後にのみゲームパッドを公開するため、ページは最初に任意のボタンを押すよう促します - これはブラウザのセキュリティルールであり、パッドの故障ではありません。すべての処理はブラウザ内で完結し、入力データがデバイスから外に出ることはありません。
使い方
使い方
- USB または Bluetooth でゲームパッドを接続
- ゲームパッドの任意のボタンを押して有効化
- ボタンを押したりスティックを動かすと画面のレイアウトが光るのを確認
- 振動ボタンで振動モーターをテスト
- イベント履歴で押下がすべて記録されたか確認
ヒント
- 緑色のハイライトは入力がブラウザに正しく届いていることを示します
- ゲームパッドは任意のボタンを押した後にのみ表示されます - これはブラウザのセキュリティルールです
- 振動対応はブラウザとゲームパッドに依存します。Firefox が最も対応範囲が広いです
- スティックが静止時に 0 以外の値を示す場合、ドリフトラベルがスティックドリフトを警告します
- 複数のゲームパッドを接続している場合はスロットチップで切り替えられます
利用シーン
仕組み
ブラウザは W3C Gamepad API を通じてゲームパッドを公開します。ゲームパッドは navigator.getGamepads() から取得する Gamepad オブジェクトで表され、この関数は最大 4 つのスロットを返します。各ゲームパッドは id 文字列(ベンダーと製品情報)、mapping フィールド(Xbox レイアウトのデバイスでは 'standard'、それ以外は空)、buttons 配列、axes 配列を持ちます。 標準マッピングでは、buttons は 17 要素です: 4 つのボタン(A/B/X/Y)、2 つのバンパー(LB/RB)、2 つのアナログトリガー(LT/RT)、Select/Start、2 つのスティック押し込み(L3/R3)、4 つの十字キー方向、Home/Guide ボタン。各ボタンは .pressed(真偽値)と .value(0 から 1、トリガーはアナログ、デジタルボタンは 0 または 1)を持ちます。axes 配列は -1 から 1 の範囲の 4 つの値を持ちます: 左スティック X/Y、続いて右スティック X/Y。 この API はイベント駆動ではなくポーリング方式であるため、ページは requestAnimationFrame ループを回し、毎フレーム新しいスナップショットを読み取ります。ゲームパッドが静止中の無駄な再レンダリングを避けるため、gamepad.timestamp が変化した時だけ状態を更新します - このタイムスタンプは新しい入力レポートが届くたびに進みます。接続と切断は window の gamepadconnected と gamepaddisconnected イベントとして届きます。 セキュリティ上、ゲームパッドオブジェクトはユーザーがそのパッドのボタンを押すまで null のままであり、ページは新しく挿したパッドを勝手に読み取れません。振動はオプション機能です: gamepad.vibrationActuator が存在する場合、playEffect('dual-rumble', { duration, weakMagnitude, strongMagnitude }) を呼ぶことで 2 つのモーターを駆動できます。Safari と一部の Chromium ビルドはこれを実装していないため、ページは機能検出を行い、対応していない場合はボタンを無効化します。
- navigator.getGamepads() は最大 4 つのスロットを返します。パッドが非 null になるのはボタンを押した後のみです。
- 標準マッピング: buttons[0-3] がボタン、[4-5] がバンパー、[6-7] がアナログトリガー、[8-9] が Select/Start、[10-11] が L3/R3、[12-15] が十字キー、[16] が Home。
- axes[0-1] が左スティック(X、Y)、axes[2-3] が右スティック。いずれも -1 から 1 の範囲。
- ポーリングモデル: requestAnimationFrame ループがスナップショットを読み取り、gamepad.timestamp でゲートすることで静止フレームは更新しません。
- 振動は gamepad.vibrationActuator.playEffect('dual-rumble', ...) で駆動 - 機能検出が必要で、すべてのブラウザで対応しているわけではありません。
- gamepadconnected / gamepaddisconnected イベントが接続と切断を通知します。パッドの .index がスロットを識別します。
使用例
ボタンを押す
A を押す -> buttons[0].pressed = true、value = 1.0左スティックを倒す
左スティックを右上に倒す -> axes[0] = 0.71、axes[1] = -0.68トリガーを引く
RT を半分まで引く -> buttons[7].value = 0.50、pressed = false(閾値未満)よくある質問
ゲームパッドを接続しても認識されないのはなぜですか?
Gamepad API は、ページが接続済みデバイスを勝手にフィンガープリントするのを防ぐため、ユーザーがゲームパッドのボタンを押すまでゲームパッドを非表示のままにします。USB または Bluetooth でパッドを接続し、このタブにフォーカスを当ててから任意のボタンを押してください - ステータスパネルが「接続済み」に切り替わります。この有効化ステップはブラウザのセキュリティルールであり、故障ではありません。
対応しているゲームパッドは?
ブラウザが標準マッピングで公開するゲームパッド全般: Xbox One/Series ゲームパッド、DualShock 4 と DualSense(多くのシステムで標準にマッピングされる)、そして大半の汎用 USB ゲームパッドです。Bluetooth でも USB でも、ブラウザは同じ 17 ボタン・4 軸レイアウトに正規化します。非標準のパッドも動作しますが、ボタン順が画面のラベルと一致しない場合があります。
振動が動かないのはなぜですか?
振動対応は環境によって異なります。Firefox が最も対応範囲が広く、Chrome と Edge は最近のバージョンで対応、Safari は未実装です。パッド自身も gamepad.vibrationActuator を公開している必要があります。ページはこれを検出し、何も反応しないままではなく明示的に「対応していません」と表示するため、振動が出ないのはブラウザまたはハードウェアの制限であり、本ツールのバグではありません。
スティックに触れていないのに値が出るのは故障ですか?
0 に近い小さな値は正常なデッドゾーンノイズです。静止時にいずれかの軸で約 0.12 を超えると、ドリフトラベルがオレンジに変わります - これが典型的なスティックドリフトで、ポテンショメーターモジュールの摩耗が原因のハードウェア問題であり、通常は時間とともに悪化します。本ツールを使えば、ゲームのせいにする前に確認できます。
データはサーバーに送信されますか?
いいえ。Gamepad API はすべてブラウザ内で読み取られます。ボタン押下、スティック位置、振動コマンドはいずれもデバイスから外に出ません。記録も送信もされません。
DualSense のアダプティブトリガー、タッチパッド、ジャイロもテストできますか?
いいえ。標準の Gamepad API が公開するのはボタン、軸、基本振動のみです。DualSense のアダプティブトリガー、静電容量式タッチパッド、モーションセンサーは Web 標準の一部ではなく(一部はブラウザ対応が乏しい実験的拡張の奥にあります)、ブラウザからは信頼できるテストができません。