デバイスポスチャAPI

W3C 勧告候補草案

この文書の詳細情報
このバージョン:
https://www.w3.org/TR/2026/CRD-device-posture-20260520/
最新公開バージョン:
https://www.w3.org/TR/device-posture/
最新編集者草案:
https://w3c.github.io/device-posture/
履歴:
https://www.w3.org/standards/history/device-posture/
コミット履歴
テストスイート:
https://wpt.live/device-posture
実装報告:
https://wpt.fyi/results/device-posture
編集者:
Kenneth Rohde Christiansen (Intel Corporation)
Alexis Menard (Intel Corporation)
元編集者:
Diego González (Microsoft、以前は Samsung を代表)
フィードバック:
GitHub w3c/device-posture (プルリクエスト, 新しい課題, 未解決の課題)
追加リソース
解説資料
ポリフィル

概要

この文書は、ウェブアプリケーションがデバイスのポスチャ(姿勢)をリクエストし、その変化通知を受け取ることができるAPIを規定します。

この文書の状態

この節は、この文書の公開時点における状態を説明する。現在の W3C 公開文書の一覧およびこの技術報告書の最新版は、 W3C 標準および草案 索引で確認できる。

この仕様は Chromium ベースのブラウザーで実装されている。WebKit および Mozilla は、この仕様についてまだ正式な見解を公開していない。

この仕様が最終的に勧告候補段階に達する前に実装することに関心のあるベンダーは、 GitHub 上のリポジトリを購読し、 議論に参加するべきである。

この文書は、Devices and Sensors Working Group により、 勧告 トラックを用いて勧告候補草案として公開された。

勧告候補としての公開は、W3C およびそのメンバーによる承認を意味しない。勧告候補草案は、 Working Group が後続の勧告候補スナップショットに含めることを意図している、 前回の勧告候補からの変更を統合する。

これは草案文書であり、いつでも他の文書により更新、置換、または廃止される可能性がある。 この文書を作業中のもの以外として引用することは不適切である。

この文書は、 W3C 特許 ポリシーの下で運営されるグループによって作成された。 W3C は、 そのグループの成果物に関連して行われた 特許開示の公開一覧を維持しており、 そのページには特許を開示するための手順も含まれる。ある個人が、 必須クレーム を含むとその個人が信じる特許について実際の知識を有する場合、 W3C 特許ポリシー第6節に従って その情報を開示しなければならない。

この文書は、 2025年8月18日版 W3C プロセス文書に準拠する。

1. はじめに

デバイスポスチャとは、デバイスが保持する物理的な姿勢であり、角度に加えてセンサーなどから得られる情報に基づく場合もあります。近年、ポスチャを変化できる機能を持つ新しいタイプのモバイルデバイスが登場しています。最も一般的なのは、画面自体や画面周囲を折り畳めるデバイスであり、物理的な形状を変更できます。デバイスのポスチャを知る主な目的は、レスポンシブデザインによる新しいユーザー体験を可能にすることです。

「折り畳み」デバイスには主に2つの物理的なフォームファクターがあります。1つは1枚の柔軟な画面(シームレス)を持つもの、もう1つは2枚の画面(シームあり)を持つものです。どちらもヒンジ周辺で折り畳みでき、現行仕様は両方のタイプに適用されます。また、シームレス・シームありの両方とも、モバイルやタブレットからラップトップサイズまで様々な寸法があります。さらに、デバイスによってデフォルトの向き(縦向き・横向き)が異なり、折り畳みも縦方向・横方向のいずれかの場合があります。

さまざまな折り畳みデバイスの図

ウェブサイトの使い勝手を折り目部分を避けて向上させたり、Webで新しいユースケースを実現したりするために、デバイスポスチャを知ることで開発者は各種デバイスに合わせたコンテンツを調整できます。

デバイスが完全に平らでない状態でも、コンテンツは利用・閲覧できます。この場合、開発者はデバイスポスチャの状態に応じて異なるレイアウトを提供したいと考えるかもしれません。

2. Document インターフェースへの拡張

以下の内部スロットが Document インターフェイスに追加される。

内部スロット 説明
[[CurrentPosture]] デバイスの 現在のポスチャ

3. Navigator インターフェースへの拡張

[HTML] 仕様は Navigator インターフェイスを定義しており、 本仕様はこれを拡張する:

WebIDL[SecureContext, Exposed=(Window)]
partial interface Navigator {
  [SameObject] readonly attribute DevicePosture devicePosture;
};

4. DevicePosture インターフェース

WebIDL[SecureContext, Exposed=(Window)]
interface DevicePosture : EventTarget {
  readonly attribute DevicePostureType type;
  attribute EventHandler onchange;
};

enum DevicePostureType {
  "continuous",
  "folded"      
};

4.1 type 属性:現在のデバイスポスチャの取得

type 属性を取得する場合、ユーザーエージェントは MUSTthis関連する グローバルオブジェクト関連付けられた Document の 内部スロット [[CurrentPosture]] の値を返さなければならない。

4.2 onchange 属性:ポスチャ変化のハンドリング

onchange 属性は、onchange イベントハンドラーのためのイベント ハンドラー IDL 属性であり、 その イベントハンドラー イベント型は「change」である。

5. ポスチャタイプ

この仕様では以下のポスチャ値を定義します:

  1. continuous postureの図

    Continuous ポスチャ:Continuousポスチャは 「平らな」状態を指します。これは、異なるポスチャを持たないほとんどのデバイスのデフォルトの状態です。

    折り目やヒンジ、類似の機能を持たないデバイスも含まれます。

    ハードウェア革新の性質上、デュアル、折りたたみ可能、巻き取り可能、または湾曲した画面を持つデバイスも含まれる。ただし、 Document が平面的なレイアウトで 表示されることが期待される姿勢にある場合に限る。

    例:

    • 折り畳みデバイスが平らに完全展開された姿勢
    • 折り畳みデバイスで、ブラウザがヒンジをまたがないウィンドウ/セクションで動作している
    • 2-in-1デバイスがタブレットモードで片面のみ使用している場合
    • 折り畳めないデバイス

    デバイスによっては、物理的には平らでない姿勢で複数アプリが動作していても、ブラウザが複数画面・セクションにまたがっていなければ、そのポスチャはcontinuousとなります。

  2. folded postureの図 Folded ポスチャ:Foldedポスチャは物理的に折り畳み可能なデバイスを指します。これらのデバイスは柔軟な1枚画面または2枚隣接画面を持つことができます。この姿勢ではディスプレイ/セクション間に「平ら」状態を超えない角度が形成されます。

    例:

    • 折り畳みデバイスが垂直ヒンジで内部画面を「本」姿勢で使用し、内容が両セクションにまたがり、約30°〜170°の角度を形成する場合
    • 折り畳みデバイスが水平ヒンジで「ラップトップ」姿勢で使用されている場合

    折り畳みデバイスが半分折りたたまれた状態(本のような状態)で使われる場合、実装者はテキスト方向や書字モードがレイアウトや表示に与える影響を考慮する必要があります。

    例えば、右から左へ書く言語(アラビア語、ヘブライ語、シリア語など)や、多くの縦書きモード(東アジア言語など)では、英語の本とは逆の順序でページが進み、ページ番号の小さい方が右側になります。

    詳細は 中国語 日本語韓国語 の書字モードの違いを参照してください。

API上、ポスチャ値は DevicePostureType 列挙値で表されます。

6. デバイスポスチャメディアクエリ

6.1 device-posture メディア機能

device-posture メディア特性は、CSS メディアクエリ [MEDIAQ] を介して、デバイスの 姿勢を表す。すべての ナビゲーブルは、 それらの トップレベル traversable姿勢を反映する。

値:
continuous | folded
適用対象:
ビジュアルメディアタイプ
min/maxプレフィックスの受け入れ:
いいえ

ユーザーエージェントはMUST、Webアプリケーションで適用された ポスチャ をCSSメディアクエリ [MEDIAQ] を通じて反映しなければなりません。

7. ポスチャの取得

Document の各インスタンスは内部スロット [[CurrentPosture]] を持ち、これは Document が作成されるときに初期化されるべきであり、そうでない場合、それらは最初に アクセスされるとき、かつその値が読み取られる前に初期化されなければならない(MUST)。ユーザー エージェント は、それを初期化するために、documentDocument に設定し、disallowRecursion を true に設定して、デバイス姿勢 変更手順を実行しなければならない(MUST)。

与えられた Document について、現在の姿勢は、 現在のヒンジ角および 画面の向き、 ならびに潜在的にはその他の実装固有のシグナルから導出される。

以下の表は規範的ではありません。

7.1 ポスチャ値の表

値は近似であり、デバイスごとに異なる場合があります。例えば、平らに置いたときに必ずしも180°にはならず、175°〜185°の値になることもあります。デバイスメーカーはSHOULD、物理的なデバイスポスチャが本仕様で定義されたポスチャに正しくマッピングされるようにしてください。また、ヒンジ角度以外にも複数のセンサーでポスチャを判断することが許されています。例として、画面下部にキーボードがドッキングされているかどうか、キックスタンドが展開されているかどうかなども検出できます。

デバイスの物理的な制約や設計によっては、1つ以上のポスチャが存在しないこともあります。その場合、デバイスはSHOULD、あらゆる角度やデバイスの向き([SCREEN-ORIENTATION]やホストOSでロック可能)、およびデバイス固有のシグナルが定義されたいずれかのポスチャにマッピングされるようにしてください。

7.1.1 折り畳みデバイス

折り畳みデバイスのポスチャ値
ポスチャ 角度値
continuous < ~180°
folded ~180°

8. アルゴリズム

8.1 デバイスポスチャ情報の算出

Document documentデバイス姿勢情報を計算する手順は、次のとおりである:

  1. topLevelTraversable を、document関連する グローバルオブジェクトナビゲーブルトップレベル traversable とする。
  2. topLevelTraversable. [[PostureOverride]] が非 null の場合、 それを返す。
  3. 現在のヒンジ角の値、現在の画面の 向き、 および潜在的な実装固有のシグナルに基づき、 姿勢値表に従って、 DevicePostureType 値を 実装定義の方法で決定して返す。

8.2 デバイスポスチャの変化

ユーザーエージェントが、トップレベル traversable について、画面の折りたたみ角、 向き、またはデバイス固有のシグナルが変化したと判断した場合、それは MUSTデバイス姿勢変更手順を、その トップレベル traversableアクティブ document で実行しなければならない。

Document document および 任意のブール値 disallowRecursion(既定値は false)に対する デバイス姿勢変更手順は、次のとおりである:

  1. document可視性 状態が "hidden" である場合、これらの手順を中止する。
  2. posture を、documentデバイス姿勢情報を計算するを呼び出した結果とする。
  3. posturedocument.[[CurrentPosture]] と等しい場合、これらの手順を中止する。
  4. document関連する グローバルオブジェクトで、 ユーザー 操作タスクソース上に グローバル タスクをキューに入れ、 次の手順を実行する:
    1. document.[[CurrentPosture]]posture に設定する。
    2. document関連する グローバルオブジェクトに関連付けられた Navigator に関連付けられた DevicePosture オブジェクトで、"change" という名前の イベントを発火する
  5. disallowRecursion が true である場合、これらの手順を中止する。
  6. document子孫 navigables の各 descendantNavigable について、 それぞれ:
    1. documentdescendantNavigableアクティブ document に設定し、disallowRecursion を true に設定して、デバイス姿勢変更 手順を実行する。

この仕様は、visibility state および document が与えられたときの、次の ページ 可視性変更手順を定義する:

  1. document に対して デバイス姿勢変更 手順を実行し、 disallowRecursion を false に設定して、 それを初期化する。
注記
Issue 103: ページ可視性変更手順 フックの使用を避ける

https://html.spec.whatwg.org/#update-the-visibility-state より

仕様作成者は、明確に定義された仕様横断的な呼び出し順序を確保するために、ページ 可視性変更手順フックを使用するのではなく、ここから自分たちの仕様へ直接呼び出しを追加するプルリクエストを送る方がよい。この執筆時点で、次の仕様が ページ 可視性変更手順を持つことが知られており、それらは未指定の順序で実行される: Device Posture API および Web NFC。[DEVICEPOSTURE] [WEBNFC]

9. セキュリティに関する考慮事項

本仕様に関して新たなセキュリティ考慮事項は報告されていません。ただし、文書内で示されている 10. プライバシーに関する考慮事項 を確認することが推奨されます。

10. プライバシーに関する考慮事項

10.1 プライバシー脅威の種類

このセクションは非規範的です。

10.1.1 複数コンテキストでのユーザー識別

このAPIが同じデバイス上の異なる閲覧コンテキストで同時に使用される場合、ユーザーをそれら二つのコンテキスト間で相関させ、予期しないトラッキング手法が生まれる可能性があります。しかし、ポスチャ値は通常長時間安定しているため、二つのユーザーが同一人物でないことの確認には利用できますが、折り畳みデバイスにも様々な種類やモデルがあるため、特定ユーザーの識別には役立ちません。

追加されるエントロピーは、ユーザーの主要入力がタッチかどうかを判別する pointer API と同程度です。主要入力は、キーボードの着脱やタブレットモードの切り替えによって変化することがあります。

この理論的な攻撃は、10.2.1 データ最小化10.2.2 ユーザーの注意喚起10.2.3 ユーザー操作によるアクションによって軽減されます。

10.1.2 クロスオリジンiframe

クロスオリジンiframeはこのAPIを通じてポスチャ情報にアクセスできるため、10.1.1 複数コンテキストでのユーザー識別に記載の通り、ユーザー識別に利用される可能性があります。同様の緩和策が適用されます。

10.1.3 悪意のあるスクリプト注入(広告や悪用目的)

iframe経由で、悪意のあるアクターが自身のコードを注入し、ポスチャ情報へアクセスしてユーザーを追跡する用途に利用される可能性があります。

この理論的な攻撃は、10.2.1 データ最小化や、ポスチャ値自体が有用な情報をほとんどもたず長期間安定するという事実によって軽減されます。

10.2 緩和策

10.2.1 データ最小化

このAPIは、高レベルの抽象化として ポスチャ を公開します。値は "continuous" または "folded" のいずれかです。異なるポスチャをサポートしないデバイスは "continuous" がデフォルトとなります。 つまり、指紋情報への追加は最大1ビット分です。 この1ビットの公開には、ユーザーが物理的にデバイスのポスチャを変更するという明確な行動が必要となります。

実装は最適な高レベルポスチャを判断するために様々な低レベル情報を利用できますが、それら低レベル情報はAPIを通じて公開されません。さらに、どの詳細なセンサー値も高レベルポスチャ状態と一対一で対応しません。ヒンジ角度センサーや他のセンサー、キーボードがドッキングされているか、キックスタンドが展開されているかなどの情報や、それらの組み合わせを使って最適なポスチャを判断できます。この抽象化により、意図された機能実装に必要最小限の情報のみ公開され、データ最小化原則に従います。

10.2.2 ユーザーの注意喚起

姿勢値変更イベントは、 アクティブ document のうち、その 可視性 状態 が "visible" であるものについてのみ発火される。これは デバイス姿勢変更手順で説明されている。 そうでない間に値をポーリングすると、古い値が返される。 値は可視性状態が "visible" である間、または "visible" に変わった直後にのみ 更新されるためである。

10.2.3 ユーザー操作によるアクション

デバイスポスチャの変更には、ユーザーによる明確かつ物理的な操作が必要です。「明確」とは、ポスチャ値の表にある実装定義の閾値を超える操作であり、「物理的」とは、OSがポスチャ変更に応じてユーザーの期待通りに動作することを意味します。

11. アクセシビリティに関する考慮事項

Device Posture APIの主な目的はユーザー体験の向上です。APIを活用したアプリケーションがアクセシビリティに良い影響を与える方法は主に3つあります。
  1. 折り目・ヒンジ部分にコンテンツ(特にボタン)を配置しないよう設計・実装すること。この部分は曲面のため指での操作が困難または不可能な場合があります。
  2. 折り畳み時に、動画や画像など大きな連続コンテンツを折り目・ヒンジ部分にまたがって配置しないよう設計・実装すること。この部分はコンテンツや色が少し歪みます。
  3. 画面スペースをより有効活用するため、分割UI(画面セグメントごとにコンテンツを分割表示するUI)を採用し、より強力で差別化されたインターフェースを提供すること。
このAPIを使う際は、上記のアクセシビリティの機会を考慮してください。具体例は以下の通りです:

12. オートメーション

Device Posture API は、インターフェイスを完全に実行するには 物理的なハードウェアデバイスが必要となるため、テスト作成者に課題をもたらす。 この課題に対処するため、この文書は [WEBDRIVER2] の 拡張コマンドを定義し、ユーザーが 報告されるデバイス姿勢を制御し、 実際のデバイスをシミュレートできるようにする。

以下の 拡張コマンドおよびそれらの 8. アルゴリズムとの統合をサポートするため、トップレベル traversables は、次の 内部スロットを持たなければならない:

内部スロット 説明
[[PostureOverride]] ハードウェアが提供する 現在のポスチャ を上書きします。 許可される値:
  • "continuous"
  • "folded"
  • null:上書きしない。ハードウェアが提供する値が使用されます。
これらの値はスクリプトから直接取得できません。

12.1 拡張コマンド

12.1.1 デバイスポスチャの設定

HTTP メソッド URI テンプレート
POST /session/{session id}/deviceposture

この 拡張コマンドは、 デバイス姿勢を特定の DevicePostureType に変更する。

このアルゴリズムで使用される parameters 引数のプロパティ
パラメーター名 値の型 必須
posture String yes

リモートエンド 手順は次のとおりである:

  1. posture を、parameters から "posture" のプロパティを取得した結果とする。
  2. posture文字列でない場合、invalid argumentWebDriver エラー コードを伴う エラーを返す。
  3. posture が "continuous" でも "folded" でもない場合、invalid argumentWebDriver エラーコードを伴う エラーを返す。
  4. topLevelTraversable を、現在の閲覧 コンテキストトップレベル traversable とする。
  5. topLevelTraversable. [[PostureOverride]]posture に設定する。
  6. document を、topLevelTraversableアクティブ document とする。
  7. documentデバイス姿勢変更 手順を呼び出す。
  8. データ null を伴う 成功を返す。

12.1.2 デバイスポスチャのクリア

HTTP メソッド URI テンプレート
DELETE /session/{session id}/deviceposture

この 拡張コマンドは、 デバイス姿勢オーバーライドを削除し、デバイス姿勢の制御を ハードウェアに戻す。

リモートエンド 手順は次のとおりである:

  1. topLevelTraversable を、現在の閲覧 コンテキストトップレベル traversable とする。
  2. topLevelTraversable. [[PostureOverride]]null である場合、データ null を伴う 成功を返す。
  3. topLevelTraversable. [[PostureOverride]]null に設定する。
  4. document を、topLevelTraversableアクティブ document とする。
  5. documentデバイス姿勢変更 手順を呼び出す。
  6. データ null を伴う 成功を返す。

13.

このセクションは非規範的です。

13.1 例1: ポスチャデータ

ポスチャをコンソールに出力するシンプルなユースケースです。

1: ポスチャ変化への反応
navigator.devicePosture.addEventListener("change", () => {
  console.log(`The current posture is: ${navigator.devicePosture.type}!`);
})

13.2 例2: device-posture

デバイスがビデオ通話Webサービスに使われています。ラップトップポスチャに折り畳むことで、机上でハンズフリー体験が可能になります。UAがポスチャを検知し、UIが強化されます。どのポスチャにも適応するコンテンツ例を作成できます。他のユースケースは explainer を参照してください。

device-postureメディア機能とviewport segmentメディア機能を使ったビデオ通話Webサービスの図
2: ポスチャに合わせたUIの適応
@media (device-posture: folded) and (vertical-viewport-segments: 2) {
  body {
    display: flex;
    flex-flow: column nowrap;
  }

  .videocall-area, .videocall-controls  {
    flex: 1 1 env(viewport-segment-bottom 0 0);
  }
}

13.3 例3: device-postureメディア機能の検出

有効なdevice-posture値が必ず1つtrueになるため、以下のコードでユーザーエージェントがこのメディア機能をサポートするかどうか検出できます:

3: device-posture機能の検出
@media (device-posture) {
  /*The browser supports device-posture feature*/
}
メディア機能のbooleanコンテキストに関する詳細は Evaluating Media Features in a Boolean Context を参照してください。

14. 適合性

非規範的と記載されたセクションのほか、著者ガイドライン・図・例・注記はすべて非規範的です。それ以外は規範的です。

この文書におけるキーワード MUST および SHOULD は、 ここに示すようにすべて大文字で現れる場合に限り、 BCP 14 [RFC2119] [RFC8174] に記述されているとおりに解釈される。

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

A. IDL索引

WebIDL[SecureContext, Exposed=(Window)]
partial interface Navigator {
  [SameObject] readonly attribute DevicePosture devicePosture;
};

[SecureContext, Exposed=(Window)]
interface DevicePosture : EventTarget {
  readonly attribute DevicePostureType type;
  attribute EventHandler onchange;
};

enum DevicePostureType {
  "continuous",
  "folded"      
};

B. 謝辞

このセクションは非規範的です。

創設時の編集者として本仕様に多大な貢献をし、また本仕様と Devices and Sensors Working Group の双方にビジュアルアイデンティティを作成してくれた Diego González に感謝する。

Daniel Appelquist、Jo Balletti、Michael Blix、Paul Grenier、Laura Morinigo の皆様に本作業へのご貢献に心より感謝申し上げます。

C. 重要な変更点のまとめ

このセクションは非規範的です。

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/
[infra]
Infra標準 Anne van Kesteren; Domenic Denicola. WHATWG. 現行標準. URL: https://infra.spec.whatwg.org/
[MEDIAQ]
Media Queries Level 4 Florian Rivoal; Tab Atkins Jr.. W3C. 2021年12月25日. W3C 勧告候補. URL: https://www.w3.org/TR/mediaqueries-4/
[RFC2119]
Key words for use in RFCs to Indicate Requirement Levels S. Bradner. IETF. 1997年3月. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC8174]
Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words B. Leiba. IETF. 2017年5月. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc8174
[SCREEN-ORIENTATION]
Screen Orientation Marcos Caceres. W3C. 2023年8月9日. W3C 作業草案. URL: https://www.w3.org/TR/screen-orientation/
[WEBDRIVER2]
WebDriver Simon Stewart; David Burns. W3C. 2024年10月9日. W3C 作業草案. URL: https://www.w3.org/TR/webdriver2/
[webidl]
Web IDL標準 Edgar Chen; Timothy Gu. WHATWG. 現行標準. URL: https://webidl.spec.whatwg.org/

D.2 参考情報

[clreq]
Requirements for Chinese Text Layout - 中文排版需求 Fuqiao Xue; Richard Ishida. W3C. 2024年7月1日. W3C ワーキンググループノート. URL: https://www.w3.org/TR/clreq/
[jlreq]
Requirements for Japanese Text Layout 日本語組版処理の要件(日本語版) Hiroyuki Chiba; Junzaburo Edamoto; Richard Ishida; Seiichi Kato; Tatsuo KOBAYASHI; Toshi Kobayashi; Nathaniel McCully; Felix Sasaki; Atsushi Shimono; Hajime Shiozawa; Fuqiao Xue et al. W3C. 2020年8月11日. W3C ワーキンググループノート. URL: https://www.w3.org/TR/jlreq/
[klreq]
Requirements for Hangul Text Layout and Typography : 韓国語テキストレイアウト及びタイポグラフィ要件 Richard Ishida. W3C. 2020年5月27日. W3C ワーキンググループノート. URL: https://www.w3.org/TR/klreq/