WebXR とは?
なぜWebXRが必要なのか、どんなデバイスと機能(ハンドトラッキング、コントローラー、空間オーディオ、AR)が対象なのかを日本語で整理しました。
1. WebXRとは何か?
WebXR Device APIは、VR(仮想現実)やAR(拡張現実)デバイスへのアクセスを提供するWeb APIです。W3C の勧告候補草案(Candidate Recommendation Draft)として策定が進んでおり、W3C Recommendation としてはまだ確定していません。ブラウザ上でVR/AR体験を開発・配信することを可能にします。
従来、VR/AR体験を提供するにはネイティブアプリの開発が必要でしたが、 WebXRを使えばURLを開くだけで没入体験を届けられます。 インストール不要、クロスプラットフォーム対応という、Webならではの強みを活かせます。
2. WebXRの使い方
WebXRデモを試す
Meta Quest、Android、PCブラウザで動くVR/ARデモをブラウザから開いて確認します。
対応デバイスを見る
iPhone、Meta Quest、Android XR、PC VRなど、WebXR対応状況を端末別に確認します。
ライブラリを選ぶ
Three.js、Babylon.js、PlayCanvasなど、WebXR実装に使うライブラリを比較します。
はじめてWebXRを触る場合は、まずデモを実機で開き、次に対応ブラウザとデバイスを確認し、最後に使うライブラリを選ぶ順番が現実的です。iPhoneではSafari単体のWebXR AR対応に制限があるため、iOS向けにはApp Clipを使う方法もあわせて確認してください。
4. WebXR対応ブラウザ
WebXRはHTTPSなどのsecure contextで動作する実験的なWeb APIです。MDNではLimited availabilityとして扱われており、本番導入ではブラウザ互換性とfallbackを確認する必要があります。
| 環境 | WebXRの見方 | BANGEOでの扱い |
|---|---|---|
| Meta Quest Browser | immersive-vr / immersive-ar の主要検証環境 | Quest実機デモとWebXR仕様更新を優先して追跡 |
| Chrome / Edge | 端末・OS・XR runtime によって利用可否が変わる | WebXR EmulatorやPC VR検証の入口として扱う |
| Android Chrome | ARCore対応端末でimmersive-ar検証候補 | Hit TestやスマートフォンARの検証対象 |
| iOS Safari | WebXR Device APIは直接使えない前提で設計 | App Clip、WebAR、AR Quick Lookなどの代替経路を検討 |
| visionOS Safari | Apple Vision Pro向けWebXR検証環境 | Spatial Web、immersive website、HTML model要素とあわせて追跡 |
対応状況はブラウザ・OS・端末・feature flagで変わります。最新の端末別メモはデバイスページと標準化・対応状況に分けて更新します。
5. WebXRの基本用語
XRSession
WebXR体験の実行単位。inline、immersive-vr、immersive-ar の session mode を指定して開始します。
XRReferenceSpace
座標系の基準。viewer、local、local-floor、bounded-floor、unbounded などを使い分けます。
XRFrame
各フレームのpose、input source、hit test結果などを読むためのオブジェクトです。
XRInputSource
controller、hand tracking、gazeなど、ユーザー入力を表します。
requiredFeatures / optionalFeatures
hit-test、local-floor、dom-overlayなど、セッション開始時に要求または任意指定する機能です。
fallback
WebXRや特定featureが使えない場合に、通常3D表示、画像、WebARなどへ落とす設計です。
6. 最小コードで見るWebXRの流れ
WebXRアプリは、対応確認、セッション開始、reference space取得、フレームループの順に組み立てます。実際の描画はThree.jsやBabylon.jsなどのライブラリに任せることが多いですが、APIの流れは次の形です。
if (!navigator.xr) {
showFallback();
}
const supported = await navigator.xr.isSessionSupported("immersive-vr");
if (!supported) {
showFallback();
}
const session = await navigator.xr.requestSession("immersive-vr", {
optionalFeatures: ["local-floor", "bounded-floor"],
});
const referenceSpace = await session.requestReferenceSpace("local-floor");
session.requestAnimationFrame(function onFrame(time, frame) {
const pose = frame.getViewerPose(referenceSpace);
if (pose) {
renderSceneForXR(pose);
}
session.requestAnimationFrame(onFrame);
});本番では、HTTPS配信、ユーザー操作を起点にしたsession開始、権限エラー、feature未対応、WebGL/WebGPU context loss、通常表示へのfallbackを必ず扱います。
7. WebXRのModule別機能
WebXR Device APIは中核となるセッション・pose・入力・描画の仕組みを提供し、ARやhand tracking、hit test、layers、depth sensingなどは追加Moduleとして整理されています。実装時は「WebXR対応ブラウザか」だけでなく、「必要なModuleがその端末で使えるか」を分けて確認します。
Hit Test Module
現実空間の平面や特徴点に対してrayを飛ばし、ARオブジェクトを置く位置を求めます。スマートフォンARやQuestのpassthrough ARでよく使います。
DOM Overlays Module
immersive-ar中にHTML UIを重ねるためのModuleです。開始/終了ボタン、設定パネル、フォームなどを通常のDOMで扱いやすくします。
Hand Input Module
hand tracking(手の関節pose)を扱うModuleです。controllerがない環境でもpinchやdirect touchに近い入力設計を検討できます。
Layers API
projection layer、quad layerなど、WebXR描画をlayer単位で扱うための仕様です。高解像度UI、動画、foveated renderingと関係します。
Depth Sensing Module
現実空間のdepth情報を使い、depth occlusionやMR合成を行うためのModuleです。Quest Browser 146以降のdepth projection検証とも関係します。
WebXR/WebGPU Binding
WebGPUでWebXRセッションに描画するための接続仕様です。Quest BrowserのExperimental WebGPU supportとあわせて追跡しています。
8. WebXR実装チェックリスト
公開前に確認すること
- HTTPSで配信している
- ユーザー操作からrequestSession()を呼んでいる
- isSessionSupported()でsession modeを確認している
- requiredFeaturesとoptionalFeaturesを分けている
- WebXR不可の場合のfallbackを用意している
- Meta Quest / Android / PC / iOSで分岐を確認している
失敗しやすいところ
- iOS SafariでWebXR ARが直接動く前提にする
- controllerのthumbstick axesが必ずある前提にする
- local-floorとbounded-floorの違いを見落とす
- depthやmeshが取れない時に画面が空になる
- iframe内WebXRに必要なallow属性を忘れる
- WebGPU対応とWebGPUが安定して使えることを混同する
9. WebXRのよくある質問
WebXRはiPhoneで使えますか?
iPhoneのiOS SafariではWebXR Device APIを直接使えない前提で考えます。iPhone向けARでは、App Clip、AR Quick Look、8th Wall、MindARなどのWebAR実装を検討します。
WebXRとWebARは同じですか?
同じではありません。WebXRはブラウザが提供する標準API群です。WebARはブラウザでARを見せる広い呼び方で、WebXR以外のカメラ合成、画像認識、AR Quick Lookなども含まれます。
WebXRを始めるならThree.jsとBabylon.jsのどちらがよいですか?
既存のThree.js資産やサンプルを使いたいならThree.js、WebXRの機能を高レベルに扱いたいならBabylon.jsも候補です。PlayCanvasはエディタや商用案件の運用で便利です。
WebXRはメタバース用の技術ですか?
WebXRはメタバース専用ではありません。Web上でVR/ARデバイスにアクセスするための低レベルAPIで、教育、製造、商品プレビュー、展示、可視化、ゲームなど幅広い用途に使えます。
10. 目標と非目標
目標(Goals)
- XR機能が利用可能か検出する
- XRデバイスの機能を照会する
- XRデバイスと入力デバイスの状態をポーリングする
- 適切なフレームレートでXRデバイスに映像を表示する
非目標(Non-goals)
- VR/ARブラウザの動作を定義すること
- すべてのVR/ARハードウェアのすべての機能を公開すること
- 「メタバース」を構築すること
11. 対象ハードウェア
WebXRは以下のようなデバイスに対応しています:
12. XRの「X」とは?
Virtual Reality、Augmented Reality、Mixed Reality... これらには多くの共通点があります。
WebXR APIは、これらすべての基盤要素を提供することを目指しています。 特定の形式に限定したくないため、頭文字ではなく代数的な変数として「X」を使用しています。
X = Your Reality Here
(あなたの現実をここに)
13. ユースケース
360°動画
Webは動画配信に非常に効果的です。XR対応プレーヤーは没入視聴を可能にします。
データ可視化
3Dモデルや医療画像など、VR/ARではより正確なスケール感を伝えられます。
アート体験
ストアモデルに合わない短い実験的体験にとって、Webの即時性は魅力的です。
14. なぜ新しいAPIが必要だったのか
既存APIの限界
DeviceOrientation や Gamepad API では、XRに必要な高精度なタイミングと位置情報の同期が困難でした。
描画の課題
レンズ歪み補正やステレオレンダリングを標準化された方法で処理する仕組みが必要でした。
15. WebVRとWebXRの違い
WebVR (廃止)
VRのみを想定した初期の実験的設計。
WebXR(W3C勧告候補草案)
VR + AR 全てに対応し、セキュリティと拡張性を重視。
16. OpenXRとの関係
OpenXRはネイティブ向けの標準APIです。WebXRと多くの概念を共有しており、ブラウザのバックエンドとして活用されます。