<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>WebXR on デジタルアーカイブシステムの技術ブログ</title><link>https://tech.ldas.jp/ja/tags/webxr/</link><description>Recent content in WebXR on デジタルアーカイブシステムの技術ブログ</description><generator>Hugo</generator><language>ja</language><lastBuildDate>Fri, 03 Apr 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://tech.ldas.jp/ja/tags/webxr/index.xml" rel="self" type="application/rss+xml"/><item><title>Next.js + React Three Fiber で Meta Quest 対応 VR ビューアを作る：@react-three/xr v6 実装記</title><link>https://tech.ldas.jp/ja/posts/react-three-xr-quest-locomotion/</link><pubDate>Fri, 03 Apr 2026 00:00:00 +0900</pubDate><guid>https://tech.ldas.jp/ja/posts/react-three-xr-quest-locomotion/</guid><description>&lt;h2 id="はじめに">はじめに&lt;/h2>
&lt;p>IIIF 画像を原寸大で鑑賞できる VR ビューアを &lt;a href="https://tech.ldas.jp/ja/posts/iiif-vr-viewer-webxr/">前回の記事&lt;/a> で A-Frame ベースで作りました。その後 &lt;strong>Next.js 16 + React Three Fiber (r3f) 9&lt;/strong> に書き換え、3D 部分は動くようになったものの、肝心の &lt;strong>Meta Quest で VR 体験ができない&lt;/strong>状態でした。&lt;/p>
&lt;p>&lt;code>@react-three/xr&lt;/code> はインストール済みなのにコード上で一切使われていなかったのです。&lt;/p>
&lt;p>この記事では、r3f アプリに WebXR（Meta Quest）対応を追加する過程で遭遇した問題と解決策を、失敗も含めて記録します。&lt;/p>
&lt;hr>
&lt;h2 id="技術スタック">技術スタック&lt;/h2>
&lt;div class="table-wrapper">
 &lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>項目&lt;/th>
 &lt;th>バージョン&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Next.js&lt;/td>
 &lt;td>16.2.1&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>React&lt;/td>
 &lt;td>19.2.4&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>React Three Fiber&lt;/td>
 &lt;td>9.5.0&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>@react-three/xr&lt;/td>
 &lt;td>6.6.29&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Three.js&lt;/td>
 &lt;td>0.183.2&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>対象デバイス&lt;/td>
 &lt;td>Meta Quest 3&lt;/td>
 &lt;/tr>
 &lt;/tbody>
 &lt;/table>
&lt;/div>
&lt;hr>
&lt;h2 id="step-1-react-threexr-v6-の基本構成">Step 1: @react-three/xr v6 の基本構成&lt;/h2>
&lt;p>v6 では、v5 以前の &lt;code>&amp;lt;VRButton&amp;gt;&lt;/code> コンポーネントは非推奨になりました。代わりにストアベースの API を使います。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-typescript" data-lang="typescript">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// src/lib/xrStore.ts
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kr">import&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">createXRStore&lt;/span> &lt;span class="p">}&lt;/span> &lt;span class="kr">from&lt;/span> &lt;span class="s2">&amp;#34;@react-three/xr&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">export&lt;/span> &lt;span class="kr">const&lt;/span> &lt;span class="nx">xrStore&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">createXRStore&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Canvas 内部を &lt;code>&amp;lt;XR&amp;gt;&lt;/code> で囲み、VR セッション開始は &lt;code>xrStore.enterVR()&lt;/code> を呼ぶだけ。&lt;/p></description></item><item><title>IIIF VR ビューア：WebXR + A-Frame で文化資源を原寸大で体験する</title><link>https://tech.ldas.jp/ja/posts/iiif-vr-viewer-webxr/</link><pubDate>Tue, 31 Mar 2026 00:00:00 +0900</pubDate><guid>https://tech.ldas.jp/ja/posts/iiif-vr-viewer-webxr/</guid><description>&lt;h2 id="はじめに">はじめに&lt;/h2>
&lt;p>IIIF（International Image Interoperability Framework）で公開されている文化資源の画像を、&lt;strong>原寸大&lt;/strong>で体験できたら面白いのではないか。そんな発想から、江戸時代の町家を再現した VR 空間に IIIF 画像を配置し、ブラウザや VR ヘッドセットで閲覧できるビューアを開発しました。&lt;/p>
&lt;p>技術スタックは &lt;strong>A-Frame 1.5.0 + THREE.js 0.158.0 + WebXR&lt;/strong>。3D モデルは Sketchfab で公開されている &lt;a href="https://sketchfab.com/3d-models/japanese-machiya-set-kit-d0bb3d915bf9448a9ef46bcb6a6fa6db">Japanese Machiya Set Kit&lt;/a> をベースに、部位ごとに分割して組み合わせています。&lt;/p>
&lt;p>この記事では「うまくいったこと」だけでなく、ハマった失敗とその原因・修正も正直に書きます。&lt;/p>
&lt;hr>
&lt;h2 id="プロジェクト概要">プロジェクト概要&lt;/h2>
&lt;div class="table-wrapper">
 &lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>項目&lt;/th>
 &lt;th>内容&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>レンダラー&lt;/td>
 &lt;td>A-Frame 1.5.0 / THREE.js 0.158.0&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>XR&lt;/td>
 &lt;td>WebXR (VR ヘッドセット対応)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>画像規格&lt;/td>
 &lt;td>IIIF Presentation API v3 / Image API v2&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>3D モデル&lt;/td>
 &lt;td>Sketchfab: Japanese Machiya Set Kit (GLB)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>アバター&lt;/td>
 &lt;td>VRM + Mixamo リターゲット&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>補助ライブラリ&lt;/td>
 &lt;td>three-vrm v2, aframe-extras&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>ツール&lt;/td>
 &lt;td>gltf-transform, Blender CLI&lt;/td>
 &lt;/tr>
 &lt;/tbody>
 &lt;/table>
&lt;/div>
&lt;h3 id="部屋の設計">部屋の設計&lt;/h3>
&lt;p>部屋のサイズは &lt;strong>TAT_SZ = 1.76 m&lt;/strong>（江戸間の畳 1 枚の短辺）を基準単位にしています。畳・壁・障子・天井・提灯をパーツとしてタイル状に並べることで、IIIF 画像のサイズに応じて柔軟に部屋サイズを変更できる設計です。&lt;/p></description></item></channel></rss>