ジャイロスコープ

W3C 勧告候補草案,

この文書の詳細
このバージョン:
https://www.w3.org/TR/2024/CRD-gyroscope-20241008/
最新公開バージョン:
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技術報告書一覧 https://www.w3.org/TR/ に掲載されています。

本文書はDevices and Sensors Working Groupにより、勧告トラックを用いてW3C勧告候補草案として発行されました。この文書はW3C勧告となることを意図しています。

本文書に関するコメントは、public-device-apis@w3.org購読アーカイブ)までお寄せください。メール送信の際は、件名に「gyroscope」と記載してください。できれば “[gyroscope] …コメントの要約…” の形にしてください。どのような内容でも歓迎します。

勧告候補としての公開は、W3C およびそのメンバーによる支持を意味するものではありません。勧告候補草案は、作業グループが後続の勧告候補スナップショットに含める予定の変更を、前回の勧告候補から反映したものです。本書は草案であり、随時更新・置換・廃止される可能性があります。進行中の作業以外として引用すべきではありません。

本文書が提案勧告段階に進むための条件は、本仕様のすべての機能を実装した独立かつ相互運用可能なユーザーエージェントが最低2つ存在し、ワーキンググループ作成のテストスイートで合格することで確認されます。進捗管理のための実装レポートも作成します。

この文書はW3C特許ポリシーの下で活動するグループによって作成されています。 W3Cはこの成果物に関連するすべての特許開示を公開リストで管理しています。そのページには特許の開示方法も記載されています。該当する必須クレームを含む特許を実際に知っている個人は、W3C特許ポリシー第6節にしたがい情報開示しなければなりません。

この文書は、2023年11月3日版 W3Cプロセス文書に則り管理されています。

この文書は随時保守・更新されます。一部は作業中の内容を含みます。

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仕様[WEBIDL]で必要とされる通りに解釈されなければなりません。

索引

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

他仕様で定義された用語

参考文献

規範的参考文献

[ACCELEROMETER]
Anssi Kostiainen. Accelerometer. URL: https://w3c.github.io/accelerometer/
[DEVICE-ORIENTATION]
Reilly Grant; Raphael Kubo da Costa; Marcos Caceres. Device Orientation and Motion. URL: https://w3c.github.io/deviceorientation/
[GENERIC-SENSOR]
Rick Waldron. Generic Sensor API. URL: https://w3c.github.io/sensors/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra Standard. Living Standard. URL: https://infra.spec.whatwg.org/
[PERMISSIONS]
Marcos Caceres; Mike Taylor. Permissions. URL: https://w3c.github.io/permissions/
[PERMISSIONS-POLICY-1]
Ian Clelland. Permissions Policy. URL: https://w3c.github.io/webappsec-permissions-policy/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL Standard. Living Standard. URL: https://webidl.spec.whatwg.org/

参考情報

[KEYSTROKEDEFENSE]
Song, Yihang, 他. Two novel defenses against motion-based keystroke inference attacks. 2014. Informational. URL: https://arxiv.org/abs/1410.7746
[SI]
SI Brochure: The International System of Units (SI), 8th edition. 2014. URL: http://www.bipm.org/en/publications/si-brochure/
[TOUCHSIGNATURES]
Mehrnezhad, Maryam, 他. Touchsignatures: identification of user touch actions and pins based on mobile sensor data via javascript. 2016. Informational. 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?