バイブレーション API

W3C 候補勧告草案

この文書の詳細
このバージョン:
https://www.w3.org/TR/2025/CRD-vibration-20250212/
最新公開バージョン:
https://www.w3.org/TR/vibration/
最新編集者ドラフト:
https://w3c.github.io/vibration/
履歴:
https://www.w3.org/standards/history/vibration/
コミット履歴
テストスイート:
https://wpt.live/vibration/
実装レポート:
https://wpt.fyi/results/vibration
編集者:
Anssi Kostiainen (Intel)
フィードバック:
GitHub w3c/vibration (プルリクエスト, 新しい課題, 未解決課題)
public-device-apis@w3.org 件名 [vibration] … メッセージトピック … (アーカイブ)
翻訳
简体中文

概要

本仕様は、ホストデバイスのバイブレーション機構へのアクセスを提供するAPIを定義します。バイブレーションは触覚フィードバックの一種です。

この文書のステータス

このセクションは、本書が公開された時点での文書のステータスを説明します。現在のW3C 公開物の一覧と本技術レポートの最新版は、W3C 技術レポートインデックス(https://www.w3.org/TR/)で確認できます。

本書は、Vibration API の範囲と機能についてグループの合意を示しています。グループは、より高度なユースケースがこのシンプルな初版では実現できないことを認識しており、それらは将来の改訂で対応する予定です。

前バージョンからの変更履歴を掲載しています。

本書はDevices and Sensors Working Groupによって Recommendation trackを用い、候補勧告草案として公開されました。

候補勧告として公開されることは、W3Cおよびそのメンバーによる承認を意味しません。候補勧告草案は、ワーキンググループが次の候補勧告スナップショットに含める予定の、前回の候補勧告からの変更点を統合しています。

この文書はドラフトであり、随時更新、差し替え、廃止される可能性があります。進行中の作業以外の引用は不適切です。

本書はW3C特許ポリシーの下で運営されているグループによって作成されました。 W3Cは、 グループの成果物に関連して提出された特許開示の公開リストを管理しています。そのページには特許開示の方法も記載されています。個人が該当する特許を知っている場合は、Essential Claim(s)を含むと考える場合、W3C特許ポリシーの第6節に従って情報を開示する必要があります。

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

1. はじめに

このセクションは規範的ではありません。

このAPIは、シンプルな触覚フィードバックのみが必要なユースケースに対応するために設計されています。より細かな制御が必要なユースケースは本仕様の範囲外です。このAPIは一般的な通知メカニズムとして利用することを意図していません。そのような用途にはNotifications API [NOTIFICATIONS]仕様を使用できます。また、バイブレーションが有効かどうかの判定も本仕様の範囲外です。

2. 適合性

規範的ではないと記載されたセクションに加え、本仕様のすべての著作ガイドライン、図、例、および注記は規範的ではありません。それ以外はすべて規範的です。

この文書中のMAYMUST、およびSHOULDというキーワードは、BCP 14 [RFC2119] [RFC8174] で示された通り、ここに記載されたようにすべて大文字で登場した場合のみ、解釈されるものとします。

本仕様は、含まれるインターフェースを実装するユーザーエージェントという単一製品に適合性要件を定義します。

本仕様で定義されたAPIをECMAScriptで実装する場合、Web IDL仕様 [WEBIDL-1] に従い、同仕様のバインディングと用語に一貫して従う必要があります。

3. バイブレーションインターフェース

WebIDLtypedef (unsigned long or sequence<unsigned long>) VibratePattern;

partial interface Navigator {
    boolean vibrate (VibratePattern pattern);
};

vibrate() メソッドの手順は、バイブレーションパターンの処理アルゴリズムを実行することです。 バイブレーションパターンVibratePattern オブジェクトとして表現されます。

バイブレーションパターンの処理の規則は、下記のアルゴリズムによります。

  1. vibrate() メソッドの第1引数をpatternとします。
  2. pattern検証と正規化に渡し、その結果をvalid patternとします。
  3. documentvisibility statevisibleでない場合、falseを返して手順を終了します。
    信頼された(特権)アプリケーションは、OSの機能と密接に統合されている場合、アプリケーションが全く表示されていなくてもデバイスを振動させることができるため、前の手順を無視することがあります。
  4. 振動を実行を、this関連グローバルオブジェクト valid patternで実行します。

検証と正規化バイブレーションパターンに対してpatternを使って行う場合、次の手順を実行します:

  1. patternがリストなら次へ。そうでなければ以下を実行します:
    1. 空リストlistを作成し、patternlistに追加します。
    2. patternlistに設定します。
  2. max lengthに値10を持たせます。
  3. patternの長さがmax lengthより大きければ、最初のmax length個のみ残して切り捨てます。
    patternの長さが偶数かつゼロでない場合、最後のエントリは効果がないため、実装はこの時点でpatternから削除できます。
  4. max durationに値10000を持たせます。
  5. pattern内の各エントリの値がmax durationより大きい場合、その値をmax durationに設定します。
  6. patternを返します。

振動を実行グローバルオブジェクト globalバイブレーションパターンpatternで行う場合、次の手順を実行します:

  1. globalsticky activationを持たない場合、 falseを返して手順を終了します。
  2. 実装はMAYでfalseを返して手順を終了できます。
    例えば、振動ハードウェアが存在しない、ユーザーが特定のオリジンではデバイスの振動を許可しない設定をしている、またはページが振動できる合計時間を制限し、その超過リクエストを拒否するなど、実装がアルゴリズムを中断する場合があります。
  3. 他の 振動を実行 アルゴリズムのインスタンスがすでに実行中の場合、以下のサブステップを実行します:
    1. 他の 振動を実行 アルゴリズムのインスタンスがあれば中断します。
    2. pattern が空リスト、値0の単一エントリを含む、またはデバイスが振動できない場合は true を返してこれらのステップを終了します。
  4. trueを返し、以降の手順は非同期で続行します。
  5. pattern内の各timeについて、以下を実行します:
    1. timeのインデックスが偶数(最初のエントリは0)、デバイスをtimeミリ秒振動させます。
    2. それ以外の場合はtimeミリ秒待機します。

ユーザーエージェントは、 visibility stateトップレベル閲覧コンテキストDocumentで変化したと判断した場合、すでに実行中のバイブレーションパターンの処理アルゴリズムを中断しなければなりません。

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

Vibration API自体はデータの発生源ではなく、Webで消費可能なデータを生成しません。しかし、他のAPIのイベントソースとして利用される可能性が知られています。特に、加速度センサーやジャイロスコープなどの特定のセンサーは、製造時の微細な不完全性により、バイブレーションAPIによる刺激を利用してフィンガープリントの手段となる可能性があります。この意味で、Vibration APIは他の仕組みと組み合わせることで間接的なプライバシーリスクを生じさせます。これには、クロスデバイストラッキングや通信など、予期しないプライバシーリスクが含まれる可能性があります。また、振動しているデバイスは外部の観察者から視認され、ユーザーの物理的な識別や追跡が可能となる場合もあります。

これらの理由から、ユーザーエージェントは API利用時にユーザーへ通知し、オリジンごとまたはグローバルでAPIを無効化(実質的に何も行わない)する手段を提供してもよい(MAY)。

ユーザーエージェントは、 振動リクエストの回数制限(例:1分または1時間ごと)などグローバルなレート制限を用いて過度な利用を防ぐべきです(SHOULD)。

5.

このセクションは規範的ではありません。

以下の例では、デバイスは1000ミリ秒(ms)振動します:

// 1000 ms振動
navigator.vibrate(1000);

// または
navigator.vibrate([1000]);

以下の例では、パターンによりデバイスは50ms振動、100ms停止、150ms振動します:

navigator.vibrate([50, 100, 150]);

以下の例では、既存の振動をすべてキャンセルします:

// 既存の振動をキャンセル
navigator.vibrate(0);

// または
navigator.vibrate([]);

A. 謝辞

グループは、Justin Lebar、Mounir Lamouri、Jonas Sicking、およびMozilla WebAPIチームの貢献と、初期入力としてWebVibratorプロトタイプを提供してくれたことに深く感謝します。Anne van Kesterenには、他の文脈でも仕様を再利用できるよう提案いただき、Lukasz Olejnikにはプライバシーの考慮事項について感謝します。最後に、Zhiqiang Zhangには簡体字中国語訳を感謝します。

B. 変更履歴

W3C勧告 2016年10月18日以降の変更点:

文書の解釈に機能的な影響を与えないその他の変更:

C. IDL索引

WebIDLtypedef (unsigned long or sequence<unsigned long>) VibratePattern;

partial interface Navigator {
    boolean vibrate (VibratePattern pattern);
};

D. 参考文献

D.1 規定参考文献

[dom]
DOM標準. Anne van Kesteren. WHATWG. リビングスタンダード. URL: https://dom.spec.whatwg.org/
[html]
HTML標準. Anne van Kesteren; Domenic Denicola; Dominic Farolino; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. リビングスタンダード. URL: https://html.spec.whatwg.org/multipage/
[RFC2119]
RFCにおける要求レベルを示すキーワード. S. Bradner. IETF. 1997年3月. ベストカレントプラクティス. URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC8174]
RFC 2119キーワードの大文字・小文字の曖昧さ. B. Leiba. IETF. 2017年5月. ベストカレントプラクティス. URL: https://www.rfc-editor.org/rfc/rfc8174
[WEBIDL-1]
Web IDL標準. Edgar Chen; Timothy Gu. WHATWG. リビングスタンダード. URL: https://webidl.spec.whatwg.org/

D.2 参考情報

[NOTIFICATIONS]
Notifications API標準. Anne van Kesteren. WHATWG. リビングスタンダード. URL: https://notifications.spec.whatwg.org/