加速度センサー

W3C 勧告候補草案,

この文書の詳細
このバージョン:
https://www.w3.org/TR/2025/CRD-accelerometer-20250212/
最新公開バージョン:
https://www.w3.org/TR/accelerometer/
エディタードラフト:
https://w3c.github.io/accelerometer/
以前のバージョン:
履歴:
https://www.w3.org/standards/history/accelerometer/
フィードバック:
public-device-apis@w3.org 件名 “[accelerometer] … メッセージトピック …” (アーカイブ)
GitHub
実装レポート:
https://www.w3.org/wiki/DAS/Implementations
テストスイート:
https://github.com/web-platform-tests/wpt/tree/main/accelerometer
編集者:
Anssi Kostiainen (Intel Corporation)
元編集者:
Alexander Shalamov (Intel Corporation)

概要

この仕様は、センサーを搭載したデバイスのX、Y、Z軸に加えられた加速度に関する情報を取得するための AccelerometerLinearAccelerationSensorGravitySensor インターフェースを定義します。

この文書の位置付け

このセクションは、公開時点でのこの文書の位置付けについて説明します。現在のW3C刊行物およびこの技術報告書の最新版は、W3C技術報告書一覧 https://www.w3.org/TR/で見つけることができます。

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

本文書へのコメントは、public-device-apis@w3.org購読アーカイブ)までお送りください。 メール送信の際は、件名に“accelerometer”を含めてください。できれば “[accelerometer] …コメントの要約…” のように記載してください。 すべてのご意見を歓迎します。

勧告候補としての公開は、W3Cおよびそのメンバーによる支持を意味するものではありません。勧告候補草案は ワーキンググループが今後の勧告候補スナップショットに盛り込むことを意図した、前回の勧告候補からの変更を反映するものです。この文書は草案であり、予告なく更新、置換、または廃止されることがあります。この文書を進行中の作業以外として引用するのは不適切です。

この文書が提案勧告段階に進むための条件は、本仕様のすべての機能を実装する、2つ以上の独立かつ相互運用可能なユーザーエージェントを持つことです。これは、ワーキンググループが開発したテストスイートによるユーザーエージェントテストの合格により確認されます。ワーキンググループは、進捗追跡のため実装レポートを用意します。

この文書は、W3C特許ポリシーのもとで活動するグループによって作成されました。 W3Cは、グループの成果物に関連して開示された特許の公開リストを維持しています。そのページには特許開示の手順も記載されています。 特許の本質的クレームを含むと考えられる特許を実際に知っている個人は、W3C特許ポリシー第6節に従って情報を開示しなければなりません。

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

本書は随時保守・更新されます。本書の一部は作業途中のものです。

1. イントロダクション

AccelerometerLinearAccelerationSensor および GravitySensor APIは、デバイスによって定義される加速度が デバイスのX, Y, Z軸へローカル座標系において 加えられる情報を提供するためにGeneric Sensor API [GENERIC-SENSOR]インターフェースを拡張します。

2.

let sensor = new Accelerometer();
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);
以下の例は、スクリーン座標系で 読み取り値を提供する重力センサーの使い方を示しています。このスニペットは、 dom screenが地面に垂直になり、レンダリングされたウェブページの下端が下を指しているときに コンソールへメッセージを表示します。
let sensor = new GravitySensor({frequency: 5, referenceFrame: "screen"});

sensor.onreading = () => {
  if (sensor.y >= 9.8) {
    console.log("ウェブページが地面に垂直です。");
  }
}

sensor.start();
以下の例は、 デバイスのx軸方向へのシェイクジェスチャを検出します。 dom screenの向きに依存しません。
const shakeThreshold = 25;

let sensor = new LinearAccelerationSensor({frequency: 60});

sensor.addEventListener('reading', () => {
  if (sensor.x > shakeThreshold) {
    console.log("シェイクを検出しました。");
  }
});

sensor.start();

3. ユースケースと要件

ユースケースおよび要件は、Motion Sensors Explainerおよび Sensor use casesドキュメントに記載されています。

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

センサー読み取り値は、加速度センサーのような慣性センサーにより提供され、 攻撃者によって様々なセキュリティ脅威に悪用される可能性があります。たとえばキーロギング位置追跡フィンガープリンティングユーザー特定などが挙げられます。

たとえばセキュリティコミュニティが公開した研究論文[KEYSTROKEDEFENSE]によると、 周波数を制限することで攻撃のリスクを完全に排除できない一方、 正当な理由でセンサーを利用するウェブアプリケーションの有用性に大きく影響する場合があります。

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

この仕様は、加速度センサー計測値量子化アルゴリズム最新読み取り値から値を取得操作から呼び出される)を定義しており、 センサーキャリブレーションのフィンガープリンティング[SENSORID]および 高精度のセンサー読み取り値に依拠した攻撃への対策としています。量子化アルゴリズムの詳細はW3C Privacy Interest Groupの推奨に従います。

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

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

6. モデル

6.1. 加速度センサー

加速度センサーセンサータイプには、次の関連データがあります:

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

Accelerometer

センサー許可名

"accelerometer"

センサー機能名

"accelerometer"

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

汎用センサー許可取り消しアルゴリズムを "accelerometer"で呼び出します。

デフォルトセンサー

デバイスのメイン加速度センサー。

仮想センサータイプ

"accelerometer"

最新読み取り値は、 加速度センサーセンサータイプに対し "x", "y", "z" をキーとする3つのエントリーを含み、それぞれの には デバイスの対応軸の加速度が含まれます。

加速度は、デバイスの速度が 時間に対して変化する割合です。 単位はメートル毎秒毎秒(m/s2[SI]です。

加速度の測定における基準フレームは慣性系でなければならず、例えばデバイスが自由落下している場合、各軸において0 (m/s2) の加速度値を示します。

加速度の符号は、 ローカル座標系における右手系規則に従います(下図参照)。

Accelerometer coordinate system.

6.2. 直線加速度センサー

直線加速度センサー センサータイプには、次の関連データがあります:

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

LinearAccelerationSensor

センサー許可名

"accelerometer"

センサー機能名

"accelerometer"

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

汎用センサー許可取り消しアルゴリズムを "accelerometer"で呼び出します。

仮想センサータイプ

"linear-acceleration"

最新読み取り値は、Sensor直線加速度センサーセンサータイプに対して "x", "y", "z"の3つエントリーを含み、 それぞれのには 対応軸の直線加速度が含まれます。

直線加速度は、 センサーを搭載したデバイスに加えられた加速度から 重力成分を除いたものです。

注: 重力直線加速度の関係については Motion Sensors Explainer § gravity-and-linear-accelerationで説明されています。

6.3. 重力センサー

重力センサー センサータイプには、次の関連データがあります:

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

GravitySensor

センサー許可名

"accelerometer"

センサー機能名

"accelerometer"

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

汎用センサー許可取り消しアルゴリズムを "accelerometer"で呼び出します。

仮想センサータイプ

"gravity"

最新読み取り値は、Sensor重力センサー センサータイプに対して "x", "y", "z" をキーとする3つエントリーを含み、 それぞれのには 対応軸にかかる重力による加速度が含まれます。

重力は、 デバイスの加速度成分のうち、近傍の質量への速度増加を防ぐ成分です。 デバイスが長時間自由落下している場合は重力値を正しく計算できない場合があります。

注: 重力直線加速度の関係についてはMotion Sensors Explainer § gravity-and-linear-accelerationで説明されています。

6.4. 参照フレーム

ローカル座標系は、 加速度センサー直線加速度センサー重力センサー読み取り値の参照フレームを表します。これはデバイス座標系、 またはスクリーン座標系のいずれかです。

デバイス座標系は、 デバイスに固定された三次元直交座標系(x, y, z)として定義されます。 ディスプレイ付きデバイスの場合、デバイス座標系の原点はデバイスディスプレイの中心です。デバイスが初期状態で保持されている場合、 Y軸はディスプレイ上端、X軸は右、Z軸はX軸とY軸の外積でディスプレイ面から外側(ユーザー側)に向きます。 デバイス座標系は、 dom screenの向きによらず不変です(下図参照)。

Device coordinate system.

スクリーン座標系は、 dom screen に結びつけられた三次元直交座標系(x, y, z)として定義されます。 スクリーン座標系の原点は dom screenの中心にあります。Y軸は常にdom screen上端方向、X軸は右方向、Z軸はX軸とY軸の外積でスクリーン面外側(ユーザー側)を指します(下図参照)。

Screen coordinate system.

デバイス座標系スクリーン座標系の主な違いは、 スクリーン座標系は常に dom screenの向きに追従する点です。 すなわち現在の向きタイプが変わるとX軸とY軸も入れ替わります。 一方デバイス座標系は デバイスに対して常に不変です。

7. API

7.1. 加速度センサーインターフェース

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

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

dictionary AccelerometerSensorOptions : SensorOptions {
  AccelerometerLocalCoordinateSystem referenceFrame = "device";
};
new Accelerometer(options) コンストラクタのステップは、加速度センサーオブジェクトの構築抽象オペレーションをthisoptionsで呼び出します。

加速度センサーでサポートされるセンサーオプションは "frequency" と "referenceFrame" です。

7.1.1. Accelerometer.x

x 属性は、Accelerometer インターフェースの値であり、最新読み取り値から値を取得thisと"x"を引数にして呼び出した結果を返します。x軸方向の加速度を表します。

7.1.2. Accelerometer.y

y 属性は、Accelerometer インターフェースの値であり、最新読み取り値から値を取得thisと"y"を引数にして呼び出した結果を返します。y軸方向の加速度を表します。

7.1.3. Accelerometer.z

z 属性は、Accelerometer インターフェースの値であり、最新読み取り値から値を取得thisと"z"を引数にして呼び出した結果を返します。z軸方向の加速度を表します。

7.2. 直線加速度センサーインターフェース

[SecureContext, Exposed=Window]
interface LinearAccelerationSensor : Accelerometer {
  constructor(optional AccelerometerSensorOptions options = {});
};
new LinearAccelerationSensor(options) コンストラクタのステップは、加速度センサーオブジェクトの構築抽象オペレーションをthisoptionsで呼び出します。

直線加速度センサーでサポートされるセンサーオプションは "frequency" と "referenceFrame" です。

7.2.1. LinearAccelerationSensor.x

x 属性は、LinearAccelerationSensor インターフェースの値であり、最新読み取り値から値を取得thisと"x"を引数にして呼び出した結果を返します。x軸方向の直線加速度を表します。

7.2.2. LinearAccelerationSensor.y

y 属性は、LinearAccelerationSensor インターフェースの値であり、最新読み取り値から値を取得thisと"y"を引数にして呼び出した結果を返します。y軸方向の直線加速度を表します。

7.2.3. LinearAccelerationSensor.z

z 属性は、LinearAccelerationSensor インターフェースの値であり、最新読み取り値から値を取得thisと"z"を引数にして呼び出した結果を返します。z軸方向の直線加速度を表します。

7.3. 重力センサーインターフェース

[SecureContext, Exposed=Window]
interface GravitySensor : Accelerometer {
  constructor(optional AccelerometerSensorOptions options = {});
};
new GravitySensor(options) コンストラクタのステップは、加速度センサーオブジェクトの構築抽象オペレーションをthisoptionsで呼び出します。

重力センサーでサポートされるセンサーオプションは "frequency" と "referenceFrame" です。

7.3.1. GravitySensor.x

x 属性は、GravitySensor インターフェースの値であり、最新読み取り値から値を取得thisと"x"を引数にして呼び出した結果を返します。x軸方向の加速度のうち重力による成分を表します。

7.3.2. GravitySensor.y

y 属性は、GravitySensor インターフェースの値であり、最新読み取り値から値を取得thisと"y"を引数にして呼び出した結果を返します。y軸方向の加速度のうち重力による成分を表します。

7.3.3. GravitySensor.z

z 属性は、GravitySensor インターフェースの値であり、最新読み取り値から値を取得thisと"z"を引数にして呼び出した結果を返します。z軸方向の加速度のうち重力による成分を表します。

8. 抽象オペレーション

8.1. 加速度センサーオブジェクトの構築

input

object加速度センサー直線加速度センサー または重力センサーオブジェクト

optionsAccelerometerSensorOptions オブジェクト

  1. allowedに、センサーポリシー管理機能のチェックobjectセンサータイプで呼び出した結果を代入する。

  2. もしallowedがfalseなら:

    1. SecurityError DOMExceptionをスローする。

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

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

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

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

8.2. 加速度センサー計測値量子化アルゴリズム

加速度センサーセンサータイプは、 以下の読み取り値量子化アルゴリズムを定義します:

input

readingセンサー読み取り値

output

センサー読み取り値

  1. quantizedReadingreadingとする。

  2. もしquantizedReading["x"]がnullでなければ、quantizedReading["x"]を最も近い0.1 m/s2に設定する。

  3. もしquantizedReading["y"]がnullでなければ、quantizedReading["y"]を最も近い0.1 m/s2に設定する。

  4. もしquantizedReading["z"]がnullでなければ、quantizedReading["z"]を最も近い0.1 m/s2に設定する。

  5. quantizedReadingを返す。

9. 自動化

このセクションは Generic Sensor API § 9 Automation を拡張し、Accelerometer 固有の仮想センサメタデータを提供します。本仕様で使用されるいくつかの 仮想センサータイプ[DEVICE-ORIENTATION] で定義されています。

9.1. 加速度センサー自動化

accelerometer virtual sensor type と、その per-type virtual sensor metadata の対応するエントリは、Device Orientation and Motion § automation で定義されています。

9.2. 直線加速度センサー自動化

linear-acceleration virtual sensor type と、その per-type virtual sensor metadata の対応するエントリは、Device Orientation and Motion § automation で定義されています。

9.3. 重力自動化

per-type virtual sensor metadatamap には、次の エントリ が含まれていなければなりません:

key

"gravity"

value

virtual sensor metadata で、reading parsing algorithmparse xyz reading であるもの。

10. 謝辞

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

センサーキャリブレーションのフィンガープリンティング緩和提案と議論について、W3C Privacy Interest Group および Paul Jensen に感謝します。

適合性

文書規約

適合性要件は、記述的な主張と RFC 2119 用語の組み合わせで表現されています。 規範部分におけるキーワード “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, および “OPTIONAL” は、RFC 2119 に記載されたとおりに解釈されるものとします。 ただし、可読性のために、これらの語が本仕様書で常に大文字で表記されるわけではありません。

この仕様の本文は、明示的に非規範的とマークされたセクション、例、および注を除き、すべて規範的です。 [RFC2119]

この仕様の例は、“for example” という語で導入されるか、または以下のように class="example" によって規範的な本文から区別されます:

これは参考的な例の例です。

参考的な注は “Note” という語で始まり、次のように class="note" によって規範的な本文から区別されます:

注: これは参考的な注です。

適合アルゴリズム

アルゴリズムの一部として命令形で表現された要件(例えば「先頭の空白文字を取り除く」や「false を返してこれらの手順を中止する」など)は、導入時に使われたキーワード(「must」「should」「may」等)の意味で解釈されます。

アルゴリズムや特定の手順として表現された適合性要件は、最終結果が同等である限り、任意の方法で実装できます。特に、本仕様で定義されたアルゴリズムは理解しやすいことを目的としており、パフォーマンスを目的としたものではありません。実装者は最適化することが推奨されます。

索引

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

他で定義された用語

参考文献

規範的参考文献

[DEVICE-ORIENTATION]
Reilly Grant; 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
[SCREEN-ORIENTATION]
Marcos Caceres. Screen Orientation. URL: https://w3c.github.io/screen-orientation/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL Standard. Living Standard. URL: https://webidl.spec.whatwg.org/

参考情報

[ACCESSORY]
Owusu, Emmanuel, et al. ACCessory: password inference using accelerometers on smartphones. 2012. Informational. URL: https://dl.acm.org/citation.cfm?id=2162095
[KEYSTROKEDEFENSE]
Song, Yihang, et al. Two novel defenses against motion-based keystroke inference attacks. 2014. Informational. URL: https://arxiv.org/abs/1410.7746
[MOTION-SENSORS]
Kenneth Christiansen; Alexander Shalamov. Motion Sensors Explainer. URL: https://w3c.github.io/motion-sensors/
[SENSORID]
Zhang, Jiexin; Beresford, Alastair R.; Sheret, Ian. SensorID: Sensor Calibration Fingerprinting for Smartphones. 2019. URL: https://doi.org/10.1109/SP.2019.00072
[SI]
SI Brochure: The International System of Units (SI), 8th edition. 2014. 8th Edition. URL: http://www.bipm.org/en/publications/si-brochure/
[TOUCHSIGNATURES]
Mehrnezhad, Maryam, et al. 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 Accelerometer : Sensor {
  constructor(optional AccelerometerSensorOptions options = {});
  readonly attribute double? x;
  readonly attribute double? y;
  readonly attribute double? z;
};

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

dictionary AccelerometerSensorOptions : SensorOptions {
  AccelerometerLocalCoordinateSystem referenceFrame = "device";
};

[SecureContext, Exposed=Window]
interface LinearAccelerationSensor : Accelerometer {
  constructor(optional AccelerometerSensorOptions options = {});
};

[SecureContext, Exposed=Window]
interface GravitySensor : Accelerometer {
  constructor(optional AccelerometerSensorOptions options = {});
};

MDN

Accelerometer/Accelerometer

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

Accelerometer/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

Accelerometer/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

Accelerometer/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

Accelerometer

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

GravitySensor/GravitySensor

In only one current engine.

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

GravitySensor

In only one current engine.

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

LinearAccelerationSensor/LinearAccelerationSensor

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

LinearAccelerationSensor

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/accelerometer

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?