概要

以下の記事で、Aleph 3D viewerを紹介しました。

その後調べた結果、以下のリポジトリの存在も知りました。

https://github.com/aleph-viewer/aleph-r3f

以下のように説明されており、react-three-fibershadcn/uiを使用している点に違いがあるようでした。

Aleph is a 3D object viewer and annotation/measurement tool built with react-three-fiber and shadcn/ui

以下のように、アノテーション付与機能なども改良されているようでした。

今回の記事でも、菊池市デジタルアーカイブで公開されている「石淵家地球儀」の3Dデータを使用します。

https://adeac.jp/kikuchi-city/catalog/e0001

使い方

以下で閲覧いただけます。

https://iiif-aleph-r3f.vercel.app/

アノテーションタブで、アノテーションの付与を行うことができました。

アノテーションデータのインポート/エクスポートを行うことができ、JSON形式でのエクスポート結果は以下でした。

[]{}"}"}"}"}"}""p,n,c,c,r,ldo"""o"""a"""a"""o"""""aesxyzrxyzmxyzmxyzti____bsi"""m"""e"""e"""asxyzoect:::a:::r:::r:::tE"""rlrilaaiu:::d"io-0-"-0-P-1-T---ole:pn0.0:0.0o0.1a000ne000rt".6..6.s.1.r..."r,,,""i:027{147i174g000:":o654135t563e001:西n{662606i977t201{""984209o208"396tX":015738n278:678rY,374715"114484uZ"934501:812{990e"253316851940,628918{7843608775979140641808709149897402945445520115049843702504352419990495220307150,79,95,4909475414,,,967"25,,

カスタマイズ

「石淵家地球儀」を表示するにあたり、以下のようにソースコードを編集する必要がありました。

iimmppcooorrnsttsrtco{:p[t'/u{{iFAsl'pesn'}ihpErsM,gt.fc:eulhtcfara:tpse}{slbssc,u:e'H:'trlhe/;,_e':tl/smhtmrueet'peastntMstweLtpe:'.Resa:gevC:s/ifau/ustCb/ruh}oecekun'dmibft:nelurr.nasoo{gtmemll.rsiCac']tuworcbsne=he.ta.'lecug,dntslat'eos.;Cb.coajonlpmt///rafKofihldlrs8eo(8sn(4/o)1os1rG=-ir>0go2iu(0np{6a/-lg4/l72T75Fe3--eSbfa6dm5fpf3l-4e34-d7A18sf4s25e09t19sd5/e4m9aa9ei40n/4/mfMe6oabds3eublresef/maFe5lnfit3g_8hc2tu2Hbeeedl.5mg9el.tbg/?lgvbl='T1,F7/1F0l5i0g0h4t6H1e2l0m8e't,.gltf',

また、Vercelへのデプロイにあたり、以下のように、tailwind.config.jsを修正する必要がありました。

GPTによる以下の回答を参考にしました。

このエラーは、tailwind.config.jsファイルがECMAScriptモジュール(ESM)として扱われており、そのためにmodule.exportsが定義されていないことを示しています。これは、ESMがデフォルトまたは強制されている環境(例えば、ViteやVercelの一部の設定)でよく発生します。

ie}mx;ppdct}pooaoh,l@rrrnec}e}utttktmo,x,gyMeencps}tc}b}k}a}iptdon:teac,eo,o,e,n,neaedtandr'nlbirbfp}s}d}m}a}p}c}rlmsy'}'}i''sife:{itde2dooniaor,e,e,u,c,o,a,dgdmfa,a,maa:{la:neiex:rrpncriDfcDfsDftDfcDfpDfrDfe:::rcftcftacciwu[ernnlsdugkemEooEotEoeEoeEooEodEoracrocrotcc[mil['r:gs'{:et:ggaFrnFrrFrdFrnFrvFr:FrR''moo:oo:iootpnt'.::::r:rrrAedAeuAe:AetAeeAeAeavccermrmorraodc/t{:'ooyUgaUgcUgUg:UgrUg{Ugdaaasd:{d:{nddirc{lp{r'{''huu:LrrLrtLr{LrLr:LrLrirll:ii:iiltsaau21'hsnnToyToiToTo{ToToTou(cco{ho{hoow(ssger4hsldd{:u::uv:u:u:u{:u:us-(({nene{nni'Ase,e0sl(::nnennnnn:-vv-hi-hi--ntn'sm0l(v'd{'d:'d'd'd'd'draadeguegdudai]/'p(va''h:h:h:h:h:h:h:{arroihpihopcim,*,xvarhhss{sssssd((wgt'gtw'sla*'ar(ssl'l'l'l'l'l'l'i--nh::h:n:swt/,r(-ll(h(h(h(h(h(h(hu--'tt'Aie*(--((vsvsvsvsvsvsvssrr::{:0:'nn.--rvvalalalalalalal)aavaidf{-iiaar(r(r(r(r(r(r('dd{0a}'cmcrtbnnrr(v(v(v(v(v(v(v,iirv,acasosopg((-a-a-a-a-a-a-auu}(acotsm,ru)---r-r-r-r-r-r-rss,-rcre'tdt)--p(s(d(m(a(p(c())-(od])'se)'bfr-e-e-u-c-o-a-r-ri,.txr),aoi-c-s-t-c-p-r---a-doCa})'crmpostdemeaopdcdrinoi'),kearnereduncvo)a24iao-nl,'ggridcus)ttcep)rppxdnufw,rrymaoct)e)ero'dxx-i-piioo)arntr'd)n)v,-))axdgnuu)rydiu,-'t)ef''c-o0}d/nn'y)avcf,-'ro,,caw.ccdd,-)retof,-rocn2so))f'y)irofercssm))o,-)verogdo0-p''rf'egerrir.eao,,eo,-rgeood2anngrforgunissiereouorn-oemnogrnuodcne-aturednu)o-aotsnog)dn)ncsue/dur))d'toet'*)no')),en-';*)du,')nto,/')n,'teu*,)d,-nt.')ht'{,)e-,t'ihs,ge,hittgs)hx't})'}',,},/app/**/*.{ts,tsx}',/src/**/*.{ts,tsx}'],

まとめ

今後、IIIFマニフェストファイルの参照などのカスタマイズにも試みたいと思います。