ジャイロスコープ

W3C 勧告候補草案,

この文書の詳細
このバージョン:
https://www.w3.org/TR/2026/CRD-gyroscope-20260514/
最新公開バージョン:
https://www.w3.org/TR/gyroscope/
エディタードラフト:
https://w3c.github.io/gyroscope/
以前のバージョン:
履歴:
https://www.w3.org/standards/history/gyroscope/
フィードバック:
public-device-apis@w3.org 件名 “[gyroscope] … メッセージトピック …” (アーカイブ)
ジャイロスコープ イシューレポジトリ
実装レポート:
https://www.w3.org/wiki/DAS/Implementations
編集者:
Anssi Kostiainen (Intel Corporation)
前編集者:
Mikhail Pozdnyakov (Intel Corporation)
テストスイート:
GitHub 上の web-platform-tests

概要

この仕様は、デバイスのローカルな三つの主要軸まわりの回転率を監視するための具体的なセンサーインターフェースを定義します。

この文書の位置付け

このセクションは、本書が公開された時点のステータスについて説明します。 現在のW3C出版物および本技術レポートの最新版は、 W3C技術レポート一覧でご覧いただけます。

本書は Devices and Sensors Working Group によって、Recommendation track を用いて、候補勧告ドラフトとして公開されました。本書はW3C勧告となることを意図しています。

本書についてコメントがある場合は、 public-device-apis@w3.org (登録, アーカイブ) までお送りください。 メール送信時には、題名に「gyroscope」という文字列を、 次のように記載するのが望ましいです: “[gyroscope] …コメントの概要…”。 すべてのコメントは歓迎します。

候補勧告としての公開は、W3C およびその会員による承認を意味するものではありません。 候補勧告ドラフトは、前回の候補勧告から、作業部会が次回の候補勧告スナップショットに含めようとする変更点を統合したものです。 これはドラフト文書であり、随時更新・置換・廃止される可能性があります。 本書は進行中の作業以外のものとして引用するのは不適切です。

本書が提案勧告段階に進むための基準は、 本仕様のすべての機能を実装した、最低2つの独立かつ相互運用可能なユーザーエージェントが存在することです。 これは、作業部会が作成したテストスイートで定義されるユーザーエージェントテストに合格することで判断されます。 作業部会は進捗を追跡するための実装報告書を準備します。

本書は W3C特許ポリシー の下で運営されるグループによって作成されました。 W3Cは当該グループの成果物に関連して 特許開示の公開リスト を管理しています。 そのページには特許開示方法についての説明もあります。 特許の「必須クレーム」を含むと考えられる特許について実際に知っている個人は、 W3C特許ポリシー第6節 に従って情報を開示する必要があります。

本書は 2025年8月18日版W3Cプロセス文書 によって管理されています。

この仕様は既存のデプロイメントのために保守されている。複数のブラウザーエンジンが この仕様について懸念を表明している。新しいプロジェクトでは、開発者は クロスエンジン対応を持つ Device Orientation and Motion を使用するべきである。 Working Group は、新しいモーション検知機能を Device Orientation and Motion で開発する意向である。

本書は随時メンテナンスおよび更新されます。本書の一部は進行中の作業です。

1. はじめに

Gyroscope APIは、Generic Sensor API [GENERIC-SENSOR] を拡張し、デバイスのローカルX、Y、Z軸まわりの角速度(ラジアン毎秒単位)に関する情報を提供します。

2. ユースケースおよび要件

ユースケースおよび要件は、Motion Sensors Explainer ドキュメントで扱われています。

3.

let sensor = new Gyroscope();
sensor.start();

sensor.onreading = () => {
    console.log("X軸回りの角速度 " + sensor.x);
    console.log("Y軸回りの角速度 " + sensor.y);
    console.log("Z軸回りの角速度 " + sensor.z);
};

sensor.onerror = event => console.log(event.error.name, event.error.message);

4. セキュリティとプライバシーに関する考慮事項

センサー 読み取り値は、ジャイロスコープなどの慣性センサーによって提供され、攻撃者によって様々なセキュリティ脅威(例:キーロギング位置追跡フィンガープリンティングユーザー識別、さらには盗聴)に悪用される可能性があります。

たとえば[KEYSTROKEDEFENSE]など、セキュリティコミュニティにより発表された研究論文によれば、 周波数を絞ることで成功率を完全に排除できるわけではなく、逆にセンサー利用に正当な理由があるウェブアプリにとっては実用性が大きく損なわれることがあります。

[TOUCHSIGNATURES] では、慣性センサーの利用中に視覚的インジケーターを表示したり、センサー読み取り値へのアクセスに明示的なユーザー同意を要求する実装が提案されています。 これらの緩和策は、Generic Sensor API [GENERIC-SENSOR]で定義されている一般的な緩和策を補完します。

5. パーミッションポリシー統合

この仕様はポリシー管理機能として"gyroscope"を利用します。これは[DEVICE-ORIENTATION]で定義されています。

6. モデル

ジャイロスコープ センサータイプには以下のデータがあります:

拡張センサーインターフェース

Gyroscope

センサー許可名

"gyroscope"

センサー機能名

"gyroscope"

許可取り消しアルゴリズム

Generic Sensor permission revocation algorithm を "gyroscope" で呼び出します。

デフォルトセンサー

デバイスのメインジャイロセンサー。

仮想センサータイプ

"gyroscope"

最新読み取り値は、Sensorジャイロスコープ センサータイプに対し "x", "y", "z" の3つのエントリを持ち、そのキーは "x", "y", "z" であり、対応するには現在の角速度が含まれます。

角速度 は、デバイスが指定軸のまわりを回転する速度であり、デバイスによって定義される ローカル座標系 のもとで計測されます。 単位はラジアン毎秒(rad/s)[SI] です。

現在の角速度の符号は、回転方向に依存し、デバイスで定義されたローカル座標系で右手系規則に従うものとします。すなわち、軸の正方向から見て時計回りの回転を正とします(下図参照)。

Device’s local coordinate system and rotation.

6.1. 参照フレーム

ローカル座標系は、Gyroscope 読み取り値の参照フレームであり、デバイス座標系またはスクリーン座標系のいずれかです。

7. API

7.1. ジャイロスコープインターフェース

[SecureContext, Exposed=Window]
interface Gyroscope : Sensor {
  constructor(optional GyroscopeSensorOptions sensorOptions = {});
  readonly attribute double? x;
  readonly attribute double? y;
  readonly attribute double? z;
};

enum GyroscopeLocalCoordinateSystem { "device", "screen" };

dictionary GyroscopeSensorOptions : SensorOptions {
  GyroscopeLocalCoordinateSystem referenceFrame = "device";
};
new Gyroscope(sensorOptions) コンストラクタのステップは、ジャイロスコープオブジェクトの構築抽象オペレーションをthissensorOptionsで呼び出すことです。

Gyroscopeでサポートされるセンサーオプションは "frequency" および "referenceFrame" です。

7.1.1. Gyroscope.x

x 属性は、Gyroscope インターフェースの現在のX軸まわりの角速度を示します。 すなわち、この属性は、最新読み取り値から値を取得thisと"x"を引数にして呼び出した値を返します。

7.1.2. Gyroscope.y

y 属性は、Gyroscope インターフェースの現在のY軸まわりの角速度を示します。 すなわち、この属性は、最新読み取り値から値を取得thisと"y"を引数にして呼び出した値を返します。

7.1.3. Gyroscope.z

z 属性は、Gyroscope インターフェースの現在のZ軸まわりの角速度を示します。 すなわち、この属性は、最新読み取り値から値を取得thisと"z"を引数にして呼び出した値を返します。

8. 抽象オペレーション

8.1. ジャイロスコープオブジェクトの構築

入力

objectGyroscope オブジェクト。

optionsGyroscopeSensorOptions オブジェクト。

  1. allowedobjectセンサータイプを指定してセンサーポリシー管理機能のチェックを呼び出した結果を代入する。

  2. もしallowedがfalseなら:

    1. SecurityError DOMException をスローする。

  3. objectoptionsセンサーオブジェクトの初期化を呼び出す。

  4. もしoptions.referenceFrame が"screen"なら:

    1. objectローカル座標系スクリーン座標系に設定する。

  5. それ以外の場合は、objectローカル座標系デバイス座標系に設定する。

9. 自動化

このセクションはGeneric Sensor API § 9 Automationを拡張し、Gyroscope固有の仮想センサメタデータを提供します。

gyroscope virtual sensor typeおよび per-type virtual sensor metadata mapの対応するエントリは Device Orientation and Motion § automation で定義されています。

10. 謝辞

Generic Sensor API に関する作業について Tobie Langel に感謝します。

11. 適合性

適合性要件は、記述的な記述と RFC 2119 用語の組み合わせで表現されます。規範的部分で使われている "MUST"、 "MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、 "RECOMMENDED"、"MAY"、"OPTIONAL" というキーワードは RFC 2119 に記載された通りに解釈されます。 ただし、可読性のために、これらの語句は本仕様ではすべて大文字では記載されていません。

本仕様の本文は、例示や注記、非規範的と明示されたセクションを除き、すべて規範的な内容です。[RFC2119]

適合ユーザーエージェントは、 ユーザーエージェントに該当する、本仕様に記載されたすべての要件を実装しなければなりません。

本仕様の IDL 断片は、「Web IDL」仕様に記載された通り、適合する IDL 断片として必須であると解釈されます。[WEBIDL]

索引

本仕様で定義されている用語

他仕様で定義された用語

参考文献

規範的参考文献

[ACCELEROMETER]
Anssi Kostiainen. 加速度センサー. URL: https://w3c.github.io/accelerometer/
[DEVICE-ORIENTATION]
Reilly Grant; Marcos Caceres. デバイスの方向と動き. URL: https://w3c.github.io/deviceorientation/
[GENERIC-SENSOR]
Rick Waldron. 汎用センサーAPI. URL: https://w3c.github.io/sensors/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra標準. ライビング・スタンダード. URL: https://infra.spec.whatwg.org/
[PERMISSIONS]
Marcos Caceres; Mike Taylor. パーミッション. URL: https://w3c.github.io/permissions/
[PERMISSIONS-POLICY-1]
Ian Clelland. パーミッションポリシー. URL: https://w3c.github.io/webappsec-permissions-policy/
[RFC2119]
S. Bradner. RFCで要求レベルを示すためのキーワード. 1997年3月. 現行の最良慣行. URL: https://datatracker.ietf.org/doc/html/rfc2119
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL 標準. ライビング・スタンダード. URL: https://webidl.spec.whatwg.org/

参考情報

[KEYSTROKEDEFENSE]
Song, Yihang, ほか. 動作ベースのキーストローク推論攻撃に対する2つの新しい防御手法。2014年。情報提供。URL: https://arxiv.org/abs/1410.7746
[SI]
SI ブロシュア: 国際単位系(SI)、第8版。2014年。第8版。URL: http://www.bipm.org/en/publications/si-brochure/
[TOUCHSIGNATURES]
Mehrnezhad, Maryam, ほか. Touchsignatures: モバイルセンサーデータとJavaScriptによるユーザーのタッチ動作とPINの識別。2016年。情報提供。URL: https://arxiv.org/abs/1602.04115

IDL索引

[SecureContext, Exposed=Window]
interface Gyroscope : Sensor {
  constructor(optional GyroscopeSensorOptions sensorOptions = {});
  readonly attribute double? x;
  readonly attribute double? y;
  readonly attribute double? z;
};

enum GyroscopeLocalCoordinateSystem { "device", "screen" };

dictionary GyroscopeSensorOptions : SensorOptions {
  GyroscopeLocalCoordinateSystem referenceFrame = "device";
};

MDN

Gyroscope/Gyroscope

In only one current engine.

FirefoxNoneSafariNoneChrome67+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Gyroscope/x

In only one current engine.

FirefoxNoneSafariNoneChrome67+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Gyroscope/y

In only one current engine.

FirefoxNoneSafariNoneChrome67+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Gyroscope/z

In only one current engine.

FirefoxNoneSafariNoneChrome67+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Gyroscope

In only one current engine.

FirefoxNoneSafariNoneChrome67+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

Headers/Feature-Policy/gyroscope

In only one current engine.

FirefoxNoneSafariNoneChrome67+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?