加速度センサー

W3C 候補勧告草案,

この文書についての詳細
このバージョン:
https://www.w3.org/TR/2026/CRD-accelerometer-20260514/
最新公開バージョン:
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 軸に加えられる AccelerometerLinearAccelerationSensor および GravitySensor インターフェイスを定義し、加速度に関する情報を取得できるようにする。

この文書のステータス

この節は、公開時点におけるこの文書のステータスを説明する。 現在の W3C 公開文書およびこの技術報告の最新改訂版の一覧は、 W3C 技術報告 インデックスで見つけることができる。

この文書は、 Devices and Sensors Working Group により、 Recommendation track を用いた候補勧告草案として公開された。この文書は W3C 勧告となることを意図している。

この文書についてコメントしたい場合は、 public-device-apis@w3.org (購読, アーカイブ) へ送信すること。 メールを送信する際は、 件名に “accelerometer” というテキストを含め、 できれば次のようにすること: “[accelerometer] …コメントの要約…”。 すべてのコメントを歓迎する。

候補勧告としての公開は、W3C およびそのメンバーによる承認を意味しない。候補勧告草案は、 作業グループが後続の候補勧告スナップショットに含めることを意図する 以前の候補勧告からの変更を統合する。この文書は草案であり、 いつでも他の文書により更新、置換、または廃止される可能性がある。この文書を 進行中の作業以外のものとして引用することは不適切である。

この文書が勧告案段階へ進むための入口基準は、 作業グループが開発したテストスイートで定義されたユーザーエージェントテストに 合格することにより判定される、この仕様のすべての機能を実装する、 独立しかつ相互運用可能なユーザーエージェントが少なくとも 2 つ存在することである。 作業グループは進捗を追跡するための実装報告を作成する。

この文書は、 W3C Patent Policy の下で運営されるグループにより作成された。 W3C は、グループの成果物に関連して行われた 特許開示の公開リスト を管理しており、 そのページには特許を開示するための指示も含まれている。 自身が Essential Claim(s) を含むと信じる特許について実際の知識を持つ個人は、Essential Claim(s) に関する情報を、W3C Patent Policy の第 6 節に従って開示しなければならない。

この文書は、2025年8月18日 W3C Process Document に従う。

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

この文書は保守され、いつでも更新される。この文書の一部は進行中の作業である。

1. 序論

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

2.

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

sensor.onreading = () => {
    console.log("Acceleration along X-axis: " + sensor.x);
    console.log("Acceleration along Y-axis: " + sensor.y);
    console.log("Acceleration along Z-axis: " + 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("Web page is perpendicular to the ground.");
  }
}

sensor.start();
次の例は、dom screen の向きにかかわらず、デバイスの x 軸方向のシェイクジェスチャーを検出する。
const shakeThreshold = 25;

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

sensor.addEventListener('reading', () => {
  if (sensor.x > shakeThreshold) {
    console.log("Shake detected.");
  }
});

sensor.start();

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

ユースケースおよび要件は、 Motion Sensors Explainer および Sensor use cases 文書に列挙されている。

4. セキュリティおよびプライバシーの考慮事項

加速度センサーなどの慣性センサーにより提供されるセンサー読み取り値は、 攻撃者により、たとえば キーロギング位置 追跡フィンガープリンティングおよびユーザー 識別など、さまざまなセキュリティ脅威を悪用するために使用される可能性がある。

セキュリティコミュニティにより公開された研究論文、たとえば [KEYSTROKEDEFENSE] は、周波数を絞っても攻撃成功のリスクは完全には排除されない一方で、 スロットリングは、センサーを使用する正当な理由を持つウェブアプリケーションの有用性に 大きく影響し得ることを示している。

[TOUCHSIGNATURES] および [ACCESSORY] の研究論文は、 実装が、慣性センサーの使用中に視覚的な表示を提供したり、 センサー読み取り値へアクセスするために明示的なユーザー同意を要求したり できることを提案している。これらの軽減戦略は、Generic Sensor API [GENERIC-SENSOR] で定義される 一般的な軽減策を補完する。

この仕様は、センサーキャリブレーションフィンガープリンティング [SENSORID] および高精度のセンサー読み取り値に依存する攻撃を軽減するため、 加速度センサー読み取り値量子化 アルゴリズム (最新の読み取り値から値を取得する操作から呼び出される) を定義する。 量子化アルゴリズムの詳細は、W3C Privacy Interest Group の 勧告に従う。

5. Permissions Policy 統合

この仕様は、[DEVICE-ORIENTATION] で定義される、 文字列 "accelerometer" により識別されるポリシー制御機能を利用する。

6. モデル

6.1. Accelerometer

Accelerometer センサー型は、 次の関連データを持つ:

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

Accelerometer

センサー権限名

"accelerometer"

センサー機能名

"accelerometer"

権限失効アルゴリズム

"accelerometer" を用いて 汎用センサー権限失効 アルゴリズムを呼び出す。

既定のセンサー

デバイスの主たる加速度センサー。

仮想センサー型

"accelerometer"

Accelerometer センサー型Sensor に対する最新の読み取り値は、"x"、"y"、"z" である キーを持ち、かつ対応する軸についてのデバイスの 加速度を含む を持つ 3 つの エントリを含む。

加速度は、 時間に関するデバイスの速度の変化率である。その単位は メートル毎秒毎秒 (m/s2) [SI] である。

加速度測定の参照フレームは慣性系でなければならず、たとえば、 自由落下中のデバイスは各軸について 0 (m/s2) の 加速度値を提供する。

加速度 値の符号は、ローカル座標系における右手系の規約に従わなければならない (下図を参照)。

加速度センサー座標系。

6.2. Linear Acceleration Sensor

Linear Acceleration Sensor センサー型は、 次の関連データを持つ:

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

LinearAccelerationSensor

センサー権限名

"accelerometer"

センサー機能名

"accelerometer"

権限失効アルゴリズム

"accelerometer" を用いて 汎用センサー権限 失効アルゴリズムを呼び出す。

仮想センサー型

"linear-acceleration"

Linear Acceleration Sensor センサー 型Sensor に対する最新の読み取り値は、"x"、"y"、"z" である キーを持ち、かつ対応する軸についてのデバイスの 線形加速度を含む を持つ 3 つの エントリを含む。

線形 加速度は、センサーをホストするデバイスに加えられる加速度であり、 重力の寄与を含まない。

注: 重力線形加速度の関係は、 Motion Sensors Explainer § gravity-and-linear-acceleration で論じられている。

6.3. Gravity Sensor

Gravity Sensor センサー型は、次の関連データを持つ:

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

GravitySensor

センサー権限名

"accelerometer"

センサー機能名

"accelerometer"

権限失効アルゴリズム

"accelerometer" を用いて 汎用センサー権限 失効アルゴリズムを呼び出す。

仮想センサー型

"gravity"

Gravity Sensor センサー型Sensor に対する最新の読み取り値は、"x"、"y"、"z" である キーを持ち、かつ対応する軸についての 重力による加速度を含む を持つ 3 つの エントリを含む。

重力は、 近くの質量へ向かってデバイスの速度が増加することを防ぐ、デバイスの加速度の成分である。 短時間を超えて自由落下しているデバイスは、重力について誤った値を計算する可能性がある。

注: 重力線形加速度の関係は、 Motion Sensors Explainer § gravity-and-linear-acceleration で論じられている。

6.4. 参照フレーム

ローカル座標系は、 AccelerometerLinearAccelerationSensor、 および GravitySensor 読み取り値の参照フレームを表す。それは デバイス座標系 または画面座標系のいずれかであり得る。

デバイス座標 系は、物理デバイスに結び付けられた 3 次元 直交座標系 (x, y, z) として定義される。 表示装置を持つデバイスでは、デバイス座標系の原点は デバイス表示の中心である。デバイスが既定の位置で保持される場合、 Y 軸は表示の上部へ向かい、X 軸は表示の右へ向かい、 Z 軸は X 軸と Y 軸のベクトル積であり、 表示から外向きに、閲覧者へ向かって指す。デバイス座標系は、 dom screen の向きにかかわらず静止したままである (下図を参照)。

デバイス座標系。

画面座標 系は、dom screen に結び付けられた 3 次元直交座標系 (x, y, z) として定義される。 画面座標系の原点は dom screen の中心である。Y 軸は常に dom screen の上部へ向かい、 X 軸は dom screen の右へ向かい、 Z 軸は X 軸と Y 軸のベクトル積であり、 dom screen から外向きに、閲覧者へ向かって指す (下図を参照)。

画面座標系。

デバイス座標系画面座標系の 主な違いは、画面座標系が常に dom screen の向きに追従することである。 すなわち、現在の向きの種類 が変化した場合、デバイスに対して X 軸と Y 軸を入れ替える。対照的に、 デバイス座標系は常に デバイスに対して静止したままである。

7. API

7.1. Accelerometer インターフェイス

[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 を用いて、加速度センサーオブジェクトを構築する抽象操作を 呼び出すことである。

Accelerometer に対する対応センサーオプションは "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. LinearAccelerationSensor インターフェイス

[SecureContext, Exposed=Window]
interface LinearAccelerationSensor : Accelerometer {
  constructor(optional AccelerometerSensorOptions options = {});
};
new LinearAccelerationSensor(options) コンストラクター手順は、thisoptions を用いて、加速度センサーオブジェクトを構築する抽象操作を 呼び出すことである。

LinearAccelerationSensor に対する対応センサーオプションは "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. GravitySensor インターフェイス

[SecureContext, Exposed=Window]
interface GravitySensor : Accelerometer {
  constructor(optional AccelerometerSensorOptions options = {});
};
new GravitySensor(options) コンストラクター手順は、thisoptions を用いて、加速度センサーオブジェクトを構築する抽象操作を 呼び出すことである。

GravitySensor に対する対応センサーオプションは "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. 加速度センサーオブジェクトを構築する

入力

objectAccelerometerLinearAccelerationSensor または GravitySensor オブジェクト。

optionsAccelerometerSensorOptions オブジェクト。

  1. objectセンサー型を用いて センサーポリシー制御 機能をチェックするを呼び出した結果を allowed とする。

  2. allowed が false なら、次を実行する:

    1. SecurityError DOMException投げる

  3. object および options を用いて センサーオブジェクトを初期化するを呼び出す。

  4. options.referenceFrame が "screen" なら、次を実行する:

    1. objectローカル座標系画面座標系に設定する。

  5. そうでなければ、objectローカル座標系デバイス座標系に定義する。

8.2. 加速度センサー読み取り値量子化アルゴリズム

Accelerometer センサー型は、 次の読み取り値量子化アルゴリズムを定義する:

入力

readingセンサー 読み取り値

出力

センサー読み取り値

  1. readingquantizedReading とする。

  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 自動化

accelerometer 仮想センサー型および 型ごとの仮想センサーメタデータ マップ におけるその対応するエントリは、Device Orientation and Motion § automation で定義される。

9.2. Linear Accelerometer 自動化

linear-acceleration 仮想センサー型および 型ごとの仮想センサーメタデータ マップ におけるその対応するエントリは、Device Orientation and Motion § automation で定義される。

9.3. Gravity 自動化

型ごとの仮想センサーメタデータ マップ は、次のエントリを持たなければならない:

キー

"gravity"

仮想センサーメタデータであって、その 読み取り値解析アルゴリズムXYZ 読み取り値を解析するであるもの。

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”, and “OPTIONAL” は、RFC 2119 で説明されるように解釈されるものとする。 ただし、読みやすさのため、 これらの語はこの仕様ではすべて大文字では現れない。

この仕様のすべてのテキストは、 非規範として明示的に示された節、例、および注を除き、規範的である。 [RFC2119]

この仕様における例は、“for example” という語で導入されるか、 次のように class="example" によって 規範テキストから区別される:

これは参考例の例である。

参考注記は “Note” という語で始まり、 次のように class="note" によって 規範テキストから区別される:

注、これは参考注記である。

適合 アルゴリズム

アルゴリズムの一部として命令形で表現された要件 (たとえば "strip any leading space characters" または "return false and abort these steps") は、そのアルゴリズムを導入する際に使用されたキーワード ("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?