Eclipse EDCを使ったデータスペース入門 - ローカル環境でデータ交換フローを体験する

はじめに 近年、企業間でのデータ共有・流通の重要性が高まっています。しかし、単純にAPIを公開するだけでは、「誰が」「どんな条件で」「どのデータに」アクセスできるかを制御することが困難です。 データスペース(Dataspace) は、この課題を解決するための概念です。データの所有者が主権を持ちながら、信頼できる相手とデータを安全に共有できる仕組みを提供します。 本記事では、データスペースの実装基盤である Eclipse EDC(Eclipse Dataspace Components) を使って、ローカル環境でデータ交換フローを体験します。 目次 データスペースとは? Eclipse EDCの概要 環境構築 データ交換フローの実行 GUIダッシュボードの作成 まとめ データスペースとは? 従来のデータ共有の課題 従来のAPI連携では、以下のような課題がありました: アクセス制御が困難 : APIキーを渡すと、どんなデータでも取得できてしまう 利用条件の管理 : 「このデータは社内利用のみ」といった条件を技術的に強制できない 監査・追跡 : 誰がいつデータを取得したか追跡しづらい データスペースの解決策 データスペースは以下の仕組みで解決します: ┌ │ │ │ │ │ │ └ ┌ │ │ │ │ │ │ │ │ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ 従 C 課 ─ ─ デ 1 2 3 4 メ ─ ─ 来 o 題 ─ ─ ー . . . . リ ─ ─ の n : ─ ─ タ ッ ─ ─ A s ─ ─ ス C P 両 C ト ─ ─ P u 誰 ─ ─ ペ o r 者 o : ─ ─ I m で ─ ─ ー n o : n ─ ─ 連 e も ─ ─ ス s v s 条 ─ ─ 携 r デ ─ ─ u i 契 u 件 ─ ─ ー ─ ─ m d 約 m 付 ─ ─ ─ タ ─ ─ e e 交 e き ─ ─ ─ ← 取 ─ ─ r r 渉 r ア ─ ─ ─ ─ 得 ─ ─ : : ・ : ク ─ ─ ─ ─ 可 ─ ─ 合 セ ─ ─ ─ ─ 能 ─ ─ 「 「 意 契 ス ─ ─ A ─ 、 ─ ─ 〇 こ 約 、 ─ ─ P デ 条 ─ ─ 〇 の に 監 ─ ─ I ー 件 ─ ─ の 条 基 査 ─ ─ キ タ 管 ─ ─ デ 件 づ 可 ─ ─ ー ─ 理 ─ ─ ー を き 能 ─ ─ ─ ─ な ─ ─ タ 満 デ 、 ─ ─ ─ ─ し ─ ─ が た ー 主 ─ ─ ─ ─ ─ ─ 欲 せ タ 権 ─ ─ ─ ─ ─ し ば 取 維 ─ ─ → ─ ─ い 提 得 持 ─ ─ ─ ─ 」 供 ─ ─ P ─ ─ ( す ─ ─ r ─ ─ カ る ─ ─ o ─ ─ タ 」 ─ ─ v ─ ─ ロ ( ─ ─ i ─ ─ グ ポ ─ ─ d ─ ─ 確 リ ─ ─ e ─ ─ 認 シ ─ ─ r ─ ─ ) ー ─ ─ ─ ─ 提 ─ ─ A ─ ─ 示 ─ ─ P ─ ─ ) ─ ─ I ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │ ─ ─ ─ ─ ─ ─ ─ ─ │ ─ ─ │ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ ─ ─ ─ ─ ─ ─ ─ ─ │ ─ ─ ─ ─ ─ ─ ─ ─ │ ─ ─ ─ ─ ─ ─ │ ─ ─ ─ ─ ─ ─ ─ ─ │ │ ─ ─ ─ ─ ─ ─ ─ ┐ │ │ ┘ ┐ │ │ ┘ 主要な用語 用語 説明 Connector データスペースに参加するためのソフトウェア。ProviderとConsumerそれぞれが持つ Provider データを提供する側 Consumer データを取得する側 Catalog Providerが公開しているデータの一覧 Policy データアクセスの条件(誰が、いつ、どのように使えるか) Contract ProviderとConsumer間で結ばれる契約 EDR Endpoint Data Reference。データ取得用の一時的なアクセス情報 Eclipse EDCの概要 Eclipse EDC は、Eclipse Foundationが開発するオープンソースのデータスペース実装基盤です。 ...

2026年1月21日 · 32 分 · Nakamura

@elastic/react-search-ui を React 19 + Next.js 15.5 で使う方法

はじめに React 19 と Next.js 15 を使用しているプロジェクトで @elastic/react-search-ui を使おうとすると、以下のような依存関係エラーに遭遇することがあります。 n n p p m m e e r r r r o o r r E p R e E e S r O L r V e E a c c t o @ u " l > d = n 1 o 6 t . 8 r . e 0 s o < l v 1 e 9 " f r o m @ e l a s t i c / r e a c t - s e a r c h - u i @ 1 . 2 3 . 1 この記事では、この問題の原因と解決方法を詳しく解説します。 ...

2026年1月19日 · 8 分 · Nakamura

GLBファイルのDraco圧縮 - 87%のサイズ削減と精度への影響

3DモデルをWebで配信する際、ファイルサイズは重要な課題です。本記事では、Draco圧縮 を使ってGLBファイルを87%削減した事例と、圧縮時の注意点(特にUV座標)について解説します。 https://3dtiles-viewer.vercel.app/glb-viewer.html 使用データ モデル : Rotunde Brunnen(噴水のある円形建築物) 出典 : Sketchfab 形式 : GLB (glTF 2.0 Binary) Draco圧縮とは DracoはGoogleが開発したオープンソースの3Dメッシュ圧縮ライブラリです。glTF 2.0ではKHR_draco_mesh_compression拡張として標準サポートされています。 圧縮の仕組み 量子化(Quantization) : 頂点座標やUV座標を指定ビット数に丸める 予測符号化 : 隣接頂点との差分を予測して符号化 エントロピー符号化 : 予測誤差を効率的に圧縮 圧縮コマンド # n # n p p g x オ x l プ - - - t g シ g q q q f l ョ l u u u - t ン t a a a t f 付 f n n n r - き - t t t a t ( t i i i n r 高 r z z z s a 品 a e e e f n 質 n - - - o s 設 s p n t r f 定 f o o e m o ) o s r x を r r i m c 使 m m t a o 用 i l o d d o r r r n 1 d a a 0 c c 1 1 o o 4 \ 2 i i \ n n p p u u t t . . g g l l b b o o u u t t p p u u t t - - d d r r a a c c o o . . g g l l b b \ 圧縮結果の比較 ファイルサイズ ファイル サイズ 削減率 rotunde-brunnen.glb(元) 94.7 MB - rotunde-brunnen-draco.glb 12.5 MB 87%削減 メッシュ構造 項目 元ファイル Draco圧縮後 メッシュ数 38 2(統合) 三角形数 約175万 約167万 テクスチャ 1024x1024 PNG 同一 バウンディングボックス ほぼ同一 ほぼ同一 精度 視覚的な精度低下はありません 。 ...

2026年1月17日 · 8 分 · Nakamura

300万点超の点群データをブラウザで快適に表示する - Potree LODビューアの構築

大規模な点群データ(LiDAR/LAZ)をWebブラウザで表示しようとすると、メモリ不足でクラッシュしてしまうことがあります。本記事では、Potree のLOD(Level of Detail)技術を使って、数百万点の点群をストレスなく表示する方法を紹介します。 https://3dtiles-viewer.vercel.app/potree-lod-viewer.html 使用データ データ名 : Utah State Capitol(ユタ州議事堂) 出典 : OpenTopography ダウンロードURL : https://object.cloud.sdsc.edu/v1/AUTH_opentopography/www/education/MatlabTopo/Utah_state_capitol.laz ファイルサイズ : 15MB(LAZ圧縮) 点数 : 3,481,512点 位置 : Salt Lake City, Utah, USA 課題 このデータをそのままThree.jsなどで読み込もうとすると、ブラウザがフリーズする可能性があります。 解決策:Potree Potreeは、大規模点群データのためのWebGLベースのビューアです。**LOD(Level of Detail)**により、カメラに近い部分は詳細に、遠い部分は粗く表示することで、数十億点のデータでもスムーズに動作します。 仕組み 点群をオクトリー構造 で空間分割 各ノードに異なる詳細度のデータを格納 視点に応じて必要なノードのみ動的に読み込み 手順 1. LAZファイルのダウンロード c u r " l h t - t L p s : / / u o t b a j h e _ c c t a . p c i l t o o u l d . . l s a d z s c \ . e d u / v 1 / A U T H _ o p e n t o p o g r a p h y / w w w / e d u c a t i o n / M a t l a b T o p o / U t a h _ s t a t e _ c a p i t o l . l a z " 2. LAZからPotree形式への変換 PotreeConverterをDockerで実行します。 ...

2026年1月17日 · 26 分 · Nakamura

mirador-annotations を Mirador 4.x へ移行した記録

背景 mirador-annotations は、IIIF ビューア Mirador にアノテーション機能を追加するプラグインです。 従来のプロジェクトは以下の構成でした: ビルドツール : nwb (Create React App ベース) UI ライブラリ : Material-UI v4 Mirador : 3.x React : 17.x しかし、以下の問題が発生していました: nwb のメンテナンス停止 - nwb は長期間更新されておらず、依存関係の競合が頻発 npm install の失敗 - 古い依存関係により、新しい環境でのセットアップが困難に セキュリティ脆弱性 - 古いパッケージに多数の脆弱性警告 これらの問題を解決するため、以下への移行を決定しました: ビルドツール : Vite UI ライブラリ : MUI v7 Mirador : 4.x React : 18.x 移行作業の概要 1. ビルドツールの移行 (nwb → Vite) nwb の設定ファイルを削除し、vite.config.js を新規作成しました。 主なポイント: e } x ) p c r } ; v o o e ; i r n t d } r } t t s u e , e , e t r f g s d ] . d n d i l 重 o e , c e e r n o 複 l d ' ' ' ' o f n { a e b パ v u @ @ r r n a v f : a ッ e p e e e e f u t l ケ : e m m a a i l = - { : ー : o o c c g t j ジ { t t t t . l s ' の [ i i ' - j d o g 解 o o , d s e a が l 決 n n o f d o / / m i E g b r s ' n n l a e t , e v o l a y C ( b T c l o m a h t e n o l i ' d f d s , ' i e を ' , g , 参 , ( 照 ( p す { r る o た m c め o e d s e s . } c ) w d = ( > ) , { ) ; 2. Material-UI の移行 (v4 → v7) @material-ui/* を @mui/* に変更 makeStyles を sx prop に置き換え Grid コンポーネントの API 変更に対応 (item と xs props が size に統合) < < G G r r 変 i 変 i 更 d 更 d 前 後 i s ( t ( i M e M z U m U e I I = x { v s v 1 4 = 7 2 ) { ) } 1 > 2 } > 3. Mirador 4.x への対応 Mirador 4.x では、アクションやセレクターのインポート方法が変更されました: ...

2026年1月13日 · 8 分 · Nakamura

mirador-rotation-plugin 機能拡張

概要 mirador-rotation-pluginに以下の機能を追加しました: 90度単位の回転ボタン URLパラメータによるマニフェスト・回転角度の指定 UIの改善(リセットボタンのアイコン変更) ヘルプ機能(使い方を説明するダイアログ) 新機能の詳細 1. 90度単位の回転ボタン 従来は1度単位のスライダーのみでしたが、90度単位で素早く回転できるボタンを追加しました。 実装内容 src/plugins/MiradorRotation.js に以下の変更を加えました: i i c } m m o ; p p n c u o o 9 s o p r r 0 t n d t t 度 s a 回 h t t R R 転 a e o o の n n V t t ハ d e i a a ン l w e t t ド e R w e e ラ R o p L R ー o t o e i t a r f g a t t t h t i ( I t e o w c I 9 n i o c 0 n n o = d n = o f r w r f ( o I o r d t d m o i a , m r t ' e i { @ ' c o m @ t n r u m i o i u o + t / i n a i / ) ( t c i d i o c = i o n o > r n s n e : - s { c m - t n a m i e t a o w e t n R r e o i r t a i a l a 9 t / l 0 i R ) o R ; n t o a t } t a ) e t ; L e e R f i t g ' h ; t ' ; UIには2つのボタンを追加: ...

2026年1月8日 · 10 分 · Nakamura

Next.js + next-auth で GakuNin RDM と OAuth2 連携する

はじめに 研究データ管理基盤「GakuNin RDM」と Next.js アプリケーションを OAuth2 で連携する方法を解説します。GakuNin RDM は OSF(Open Science Framework)互換の API を提供しているため、OSF の OAuth2 フローを参考に実装できます。 本記事では、next-auth を使用した実装方法と、アクセストークンの自動リフレッシュ というハマりポイントについて詳しく説明します。 GakuNin RDM とは GakuNin RDM(Research Data Management)は、国立情報学研究所(NII)が提供する研究データ管理サービスです。 URL : https://rdm.nii.ac.jp/ API : OSF 互換 REST API(https://api.rdm.nii.ac.jp/v2/) 認証 : OAuth2(https://accounts.rdm.nii.ac.jp/) 研究者が研究データを安全に保存・共有・公開できるプラットフォームで、学認(GakuNin)認証との連携により、日本の大学・研究機関のユーザーが利用できます。 事前準備 1. OAuth アプリケーションの登録 GakuNin RDM の設定画面から OAuth アプリケーションを登録します。 https://rdm.nii.ac.jp/settings/applications/ にアクセス 「Developer application を登録する」をクリック 以下を設定: Application name : アプリ名 Application homepage URL : http://localhost:3000(開発時) Application description : 説明 Authorization callback URL : http://localhost:3000/api/auth/callback/gakunin 登録後、Client ID と Client Secret が発行されます。 ...

2026年1月6日 · 22 分 · Nakamura

【AWS Amplify】さくらのドメインでカスタムドメイン設定時にハマったポイント

はじめに AWS Amplifyでホスティングしているアプリに、さくらインターネットで管理しているドメインのサブドメインを設定しようとしたところ、「ドメインの所有権を検証中…」のまま進まない問題に遭遇しました。 原因はさくらのDNS特有の仕様 でした。同じ問題でハマっている方の参考になれば幸いです。 環境 AWS Amplify Hosting さくらインターネット ドメインコントロールパネル ネームサーバー: ns1.dns.ne.jp / ns2.dns.ne.jp 症状 Amplifyのカスタムドメイン設定画面で指示されたCNAMEレコードを設定したが、いつまで経っても「ドメインの所有権を検証中…」から進まない。 Amplifyからの指示内容 Amplifyからは以下のようなDNSレコード設定を求められます: 1. SSL証明書検証用 ホスト名 タイプ 値 _abc123.your-subdomain.example.com. CNAME _def456.xyz.acm-validations.aws. 2. サブドメイン転送用 ホスト名 タイプ 値 your-subdomain CNAME xxxxx.cloudfront.net 原因 digコマンドで確認したところ、CNAMEの値にドメイン名が二重に追加されていました。 $ d i g y o u r - s u b d o m a i n . e x a m p l e . c o m C N A M E # y # y o o 期 u 実 u 待 r 際 r す - の - る s 結 s 結 u 果 u 果 b ( b d 誤 d o り o m ) m a a i i n n . . e e x x a a m m p p l l e e . . c c o o m m . . I I N N C C N N A A M M E E x x x x x x x x x x . . c c l l o o u u d d f f r r o o n n t t . . n n e e t t . . e x a m p l e . c o m . さくらのDNSでは、CNAMEの値に末尾ドット(.)がない場合、自動的にゾーン名(ドメイン名)が補完される仕様 になっています。 ...

2026年1月4日 · 3 分 · Nakamura

Dydra JSON-LDシリアライゼーションの挙動と回避策

概要 Dydraは優れたクラウドベースのRDFトリプルストアですが、JSON-LDシリアライゼーションにおいて、一部のケースで期待と異なる出力が得られることがあります。このブログでは、その挙動と、我々が実装した回避策について解説します。 確認された挙動 期待される出力 JSON-LD仕様では、URI参照は以下のようにオブジェクト形式で出力されることが一般的です: { } " " " } " } @ @ p , p i t r " r " d y o @ o @ " p v i v i : e : d : d " w " w " " : a : a : h s s t [ A " G " t " t h e h p p t t n t s r r t e t : i p r p b s a s / : u : t : e E t / e / x n e / d / a t d s B s m i T e y e p t o p " p l y " o : o e " : l l . ] i { i c , { a a o . . m e e / t t i h h t e e e r r m s s / c c 1 a a " n n , . . i i o o / / a t d x d / r 0 e x s a s b / c 0 d x . 1 . 2 . 3 " 4 . . . " Dydraで確認された出力 DydraのJSON-LDエンドポイントでは、一部のURI参照が単なる文字列として出力されるケースが確認されました: ...

2025年12月29日 · 13 分 · Nakamura

GakuNin RDM Waterbutler API でアップロードしたファイルの詳細画面に遷移する方法

Waterbutler API とは Waterbutler は、Center for Open Science (COS) が開発したファイルストレージ抽象化レイヤーです。OSF (Open Science Framework) および GakuNin RDM で使用されており、様々なストレージプロバイダー(OSF Storage、Amazon S3、Google Drive、Dropbox など)に対して統一的なAPIでファイル操作を行うことができます。 主な機能 ファイルのアップロード・ダウンロード ファイル/フォルダの作成・削除・移動・コピー メタデータの取得 エンドポイント GakuNin RDM : https://files.rdm.nii.ac.jp/v1 OSF : https://files.osf.io/v1 参考リンク Waterbutler GitHub OSF API Documentation 問題 GakuNin RDM の Waterbutler API を使用してファイルをアップロードした後、そのファイルの詳細画面に直接遷移したい場合があります。 しかし、RDM上ではプロジェクトの短縮URL(例:https://rdm.nii.ac.jp/qv3xf/)が表示されるため、アップロードしたファイルの詳細画面URLをどのように構成すればよいかわかりにくい状況でした。 Waterbutler API のレスポンス ファイルアップロード時の Waterbutler API レスポンス例: { } " } d a " " " } " } t i t a , l a d y t " " " i " " " " p t n k p n d m : : e r a i a k o o " i m n t s w v { " : b e d h " n e o u " " " : l " s " t : : : o : f f e { a s i s " " " d " t l " n f / " h o e : f i 6 : t r s t l 7 t a " { - e d " p g , 4 " a h s e 3 , c t : / - a t / 6 p a p / 7 r 8 s f d o 1 : i a v 6 / l c e 0 / e a n 0 f s a a 0 i . 8 n 9 l r 1 c 0 e d 6 e 0 s m 0 - 1 . . 0 2 0 r n 0 0 9 d i 9 2 e m i 0 5 1 . . 0 - d n a 1 1 a i c 0 2 3 i . 9 - " . j e 2 a p 1 9 c d T . v a 1 j 1 3 3 p " - r , 0 v e 8 1 s - / o 4 r u 7 e r . s c z o e i u s p r / " c w , e z s / 9 w g z / p 9 r g v p i r d o e v r i s d / e o r s s f / s o t s o f r s a t g o e r / a 6 g 7 e d / a 6 c 7 a d a a 8 c 1 a 6 a 0 8 0 1 0 6 9 0 0 0 0 0 1 9 0 0 9 0 e 1 1 0 d 9 a e 3 1 " d a 3 " , 解決策:ファイル詳細URLの構成 ファイル詳細画面のURLは以下の形式で構成します: ...

2025年12月29日 · 5 分 · Nakamura

Pinata V3 API グループ機能の実装ガイド

Pinata の Files API v3 でグループ機能を使用する際のはまりポイントと解決策をまとめます。 背景 Pinata でアップロードしたファイルをグループで管理し、特定のグループに属するファイルのみを取得したいケースがあります。例えば、NFT登録フォームで使用する入力画像を「input」グループに格納し、そのグループからのみ画像を選択できるようにする場合などです。 はまりポイント 1. レガシーAPI と V3 API のファイル管理は分離されている 問題 : レガシーAPI(pinFileToIPFS)でアップロードしたファイルは、V3 API(/v3/files)では取得できません。逆も同様です。 レ V ガ 3 シ ー A A P P I I ( p v i 3 n / L f i i s l t e ) s ) → レ ガ → シ ー で V ア 3 ッ で プ ア ロ ッ ー プ ド ロ し ー た ド フ し ァ た イ フ ル ァ の イ み ル 表 の 示 み 表 示 解決策 : どちらかのAPIに統一する。V3 APIに移行する場合は、新規アップロードからV3を使用し、既存ファイルは手動でグループに追加するか、マイグレーションを検討。 ...

2025年12月28日 · 11 分 · Nakamura

さくらレンタルサーバー Drupal 更新手順

さくらのレンタルサーバーでDrupal 10.1.5から10.6.1へアップデートした際の手順をまとめます。 環境 サーバー:さくらのレンタルサーバー Drupal:10.1.5 → 10.6.1 インストール形式:従来型(tarball、web/ディレクトリなし) 事前準備 作業用ディレクトリの作成 バックアップは www 外に保存します(Webからアクセスできないようにするため)。 m k d i r - p / h o m e / [ ユ ー ザ ー 名 ] / b a c k u p s / d r u p a l ファイルのバックアップ c t d a r / h - o c m z e / f [ ユ / ー h ザ o ー m 名 e ] [ w ユ w ー w ザ ー 名 ] / b a c k u p s / d r u p a l / d r u p a l _ b a c k u p _ $ ( d a t e + % Y % m % d ) . t a r . g z [ d r u p a l デ ィ レ ク ト リ ] / データベースのバックアップ さくらのレンタルサーバーでは --no-tablespaces オプションが必要です。 ...

2025年12月26日 · 8 分 · Nakamura

IIIF Manifestから各巻の冒頭ページを抽出するツールを作成しました

はじめに IIIF(International Image Interoperability Framework)を利用したデジタルアーカイブでは、複数巻や複数章で構成される資料を1つのManifestにまとめることがあります。このような場合、各巻・各章の冒頭ページへのリンクを作成したいというニーズがあります。 今回、IIIF Manifestから各巻(range/structure)のlabel と最初のCanvas URL を抽出するシンプルなWebツールを作成しました。 ツールURL : https://nakamura196.github.io/iiif-manifest-extractor/ GitHub : https://github.com/nakamura196/iiif-manifest-extractor 機能 複数のManifest URLを一括処理(1行に1つのURL) 各巻・各章のlabelと最初のCanvas URLを一覧表示 CSV/JSON形式でのエクスポート 処理進捗のリアルタイム表示 使い方 ツールを開く Manifest URLをテキストエリアに入力(複数行可) 「抽出」ボタンをクリック 結果が表形式で表示される 必要に応じてCSV/JSONでダウンロード サンプル 以下のManifest URLで動作を確認できます。複数URLを入力することで、一括処理の動作も確認できます。 国立国会図書館デジタルコレクション「校異源氏物語」: h h t t t t p p s s : : / / d d l l . . n n d d l l . . g g o o . . j j p p / / a a p p i i / / i i i i i i f f / / 3 3 4 4 3 3 7 7 6 6 8 8 6 7 / / m m a a n n i i f f e e s s t t . . j j s s o o n n これらのManifestは源氏物語の各帖(きりつほ、ははきゝ、うつせみ、わかむらさき…など)がstructuresに定義されており、各帖の冒頭ページを抽出できます。 ...

2025年12月25日 · 4 分 · Nakamura

CloudFront + App Runner で 404 エラーが発生する問題の調査記録

はじめに AWS App Runner で Cantaloupe(IIIF画像サーバー)をホストし、その前段に CloudFront を配置しようとしたところ、CloudFront 経由でアクセスすると全てのリクエストが 404 エラーになる問題に遭遇しました。 本記事では、問題の原因調査から試した解決策、そして結論までを記録します。 環境 アプリケーション : Cantaloupe 5.0.5(IIIF画像サーバー) ホスティング : AWS App Runner CDN : Amazon CloudFront リージョン : ap-northeast-1(東京) 問題の概要 症状 アクセス方法 結果 App Runner に直接アクセス 200 OK CloudFront 経由でアクセス 404 Not Found 確認したこと CloudFront 経由で 404 が返る際、レスポンスヘッダーに server: envoy が含まれていました。これは App Runner の内部プロキシ(Envoy)に到達していることを示しています。 $ H s x T e - c T r c u P a r / e c l 2 r h : e - 4 : I 0 e 4 n E h v r t o r t y o p r s : f / r / o x m x x c x l x o . u c d l f o r u o d n f t r o n t . n e t / つまり、CloudFront → App Runner の通信は成功しているが、App Runner 内部でリクエストがアプリケーション(Cantaloupe)に転送されていないことがわかりました。 ...

2025年12月24日 · 6 分 · Nakamura

Nuxt 4 SSGでローカルJSONファイルを正しく読み込む方法

はじめに Nuxt 4でStatic Site Generation (SSG) を行う際、ローカルのJSONファイルからデータを読み込んで静的ページを生成したいケースがあります。しかし、Next.jsのgetStaticPropsのようにシンプルにはいかず、いくつかのハマりポイントがあります。 本記事では、試行錯誤の末に見つけた正しいアプローチを紹介します。 問題:なぜ単純なfsの読み込みでは動かないのか 最初に試したアプローチ(失敗) c } o ; n i } c r ❌ s f o e t c c c c r n t こ ( o o o o e ク s u れ f i n n n n t ラ t r は e m s s s s u イ n 動 t p t t t t r ア r か c o n ン e a な h r f p f d ト s w い L t s a u a J サ p a o . t l t S イ o i c m = h l a O ド n t a e P N s l t a = a = . e r D a w t p e a . a a h f a = s t s i w s r p a e t a = . s a o r i r e w n = v i t p e ( a s e m a a d i e a r p i t d a t . s ) o m h F t j y r p . i a f s n { t o r l ) e o c ( r e e ; t n ' t s S c ( ( f ( o y h ) f s ' l n ( ; i ' p v c ` l ) a e ( / e ; t ( f d P h p u a a ' r l t t ) o l a h ; c P / : e a $ s t { s s h f t . , i r c l i w ' e n d u P g ( t a ) ) f t , - h = 8 } > ' ' ` p ) ) { u ; ; b l i c / d a t a ' , f i l e P a t h ) ; このアプローチには以下の問題があります: ...

2025年12月11日 · 19 分 · Nakamura

MapLibre GL JS + れきちず で多言語対応の歴史地図を実装する

歴史地図サービス「れきちず」が多言語対応(日本語・ひらがな・英語)したことを受けて、MapLibre GL JS で言語切り替えに対応した地図を実装する方法を紹介します。 れきちずとは れきちずは、江戸時代後期(1800〜1840年ごろ)の地図を現代風のデザインで閲覧できるWebサービスです。2025年11月に多言語対応が追加され、以下の3つのスタイルが提供されています。 言語 スタイルURL 日本語 https://mierune.github.io/rekichizu-style/styles/street/style.json ひらがな https://mierune.github.io/rekichizu-style/styles/street/style_hira.json 英語 https://mierune.github.io/rekichizu-style/styles/street/style_en.json シンプルなHTML版 フレームワークを使わず、素のHTML + JavaScriptだけで実装する例です。GETパラメータ(?lang=en)に応じて表示言語を切り替えます。 完全なHTMLファイル < < < < ! h h / b / / D t e < < < < < < h o < < < b h O m a m m t s l s / e d d / d s / o t C l d e e i c i t b # . } . } . . } s a y i < < < d i c c } f } l c } m f } f } f } d } w } u s d m T > t t t r n y o m c l l l t d > v b b b i v r o ; u e o ) a u u u o ) i ) p c y l Y l a a l i k l { d a o h d a j g b b a p b b b c f t a a b c b y > u u u v i n ' ' ' n c c r t n c s c z ; p n d } n c u w n i c m u u c b ; n c i } ; d r > > P a e p e y p n e i l u a a o n a o o a u o r n n a o o l c t t t > i p れ s j j e G c o o e 現 地 s o t e o . ボ c o ) U c o r i 言 c f u a p p ボ u t ブ d o f 初 a i E n c n > t h > m t i s i s p c r g d r r c r n a g g c l r e l t t t d t き t a a n E t n n t 在 c 図 t n y n o a タ t c b ; R t n l n 語 t r p d d タ m n ラ o n c m u 期 t p g h a れ r a { { r g p g t : k d - d d d k s t n - - k o d > a o o o = > ち ' - ' T i s s u の u を t l t m d ン i u t L i s . d 切 i ( r . a a ン e . ウ w s ( u a p 状 e t h = a m き s e r o h l n i g e b i e e g o - s b b g r e s n n n " ず S : H : パ o t t r 言 r 初 m a e e : d の o m n を o t s o り o l e s t t の n a ザ . t l r p d 態 B > t " r e ち r f g f w l t a - f 8 r r t n r r r r s i t t r : r s m の T i ラ n n 語 r 期 a i : r C ア n e . 更 n e w 替 n a n e e e ク t d の a a r . a を u m j s = ず c = i o i s : y i y p o - n g : - o : i t n n o - = c c c a ス Y ' r ' メ p l e 化 p n : 1 o ク n c 新 u a . え n t t U B リ . d 戻 d l n e s t 設 t l a e " = " n n d : t - x u b : r u z i : . u w c " l l l p タ L h a h ー g a a S n e S 2 n テ u t l ( u r r h s g L S r u ッ q E る d a g n e e 定 t > " t v 多 " h : t t { 5 e c ; n o { 1 a n p e o h a n h o c a a a " イ E t ' t タ e r n T t = r T [ t ィ p . a 履 p l c i w a t l t ク u v / E n t t B o > = i 言 h t - h 0 f m o d t 8 p d d o : n o c d i l o s s s > ル S t : t か t a g Y L : Y 1 r ブ d q s 歴 d h s i = n y ( t イ e e 進 v g ! L S u n " e 語 t t 0 f : p l s n : t p x i : i : v t : t o n s s s < U p p ら L m L a n L 3 o 状 a u s に a = P t t = g l l o ベ r n む e = a t t s U w 対 t p ; a x e : t o x u n 1 e i e r t = = = / R = s ' s 言 a s = E n e ' E 9 l 態 t e L 追 t a o c = e a n ン y t に n = = n y t ( T p 応 p s m 1 ; x e # m s s w t 4 a r v # ; : r " " " d L : h : 語 n S g w m S . ( を e r i 加 e n r r h = ( n s ト S L 対 t g l o ) F o デ s : p i 0 ; c n f : 1 o : h e p l e 2 o l l l i { / t / を g = p [ a [ 7 n 更 B y s ) U e a y L c S g ( e i 応 L g c e n ; - r モ : a l 0 e t 5 6 l i r x l { 1 # l a a a v / t / 取 F a l = m p c 6 e 新 u S t r w m . a u l T ) ) l s i e u = ( s 8 t < d y % n : f 1 p i 4 t ; ; { 9 2 s n n n > m p m 得 r n r a a ' u 7 w t e . l s p n r a Y ; ; e t s t r S ( " " u d : ; t 5 p x d p e 0 b 6 1 " g g g i s i o e a n g p , r 1 t l t ( U . u g r n L c e t L r l T ) > t u n i e c f x ; x ; . a F 9 > - - - e : e m w m g e l r , m o e o l R s s ( e g E t n e a e a Y ; c i n p n s h r e 5 # ; 2 c 3 6 b b b r / r U s ] t i e a n c g a L e h l n ; S o e n n n n L o t p k g a e ; n ; s c s k ; F t t t u / u r U . L b n 3 p s t g n ( t S a t [ r r e g t g E n l k g : n i t o c ; g 3 n n n n m n l R g ? a r t 5 l ( o l g w ( t n L l A ( r F L ; S t e g . s g e l c r ; " " " e i e ( L e n e L . i ) r e ) i ' a g a a l ' ( r a [ e > . c 0 - h r i ; o . e . ) S t l g g a 6 b A ( n l t ) n n l c ' o n l n c o ; s t ; d u d d d g r g e ( a F l n 8 r { l ' { d a e g g ( l p m g a t o m e : n a a a i u i { a ' n r . g 1 e l a o n ( { ) ] ' i o U ) n = m b r # d t t t t n t r l g o M ] 2 g ( c w g { ) . c p r g " m o i c d : a a a h e h c a m a , ] l ' t . ' } r ; l k s l { ] w m a x f a d - - - u . u h n : U p , . . i l , , e a ' t ( ) i a p - ; l d # l l l b g b P g r ( N l v o t n , a ) ; d p l s c ; e a a a . i . a ' ' l { a a e c l u g t ; t l i i } ( 0 n n n i t i r ) j ( v n ' a a ' r - e h i b z 1 e g g g o h o a ; a ) i g , t n , n b ' = b r i 0 0 = = = / u / m ' ; 東 g - i g ; t , d r e n 0 e " " " r b r s ; 京 a b b o ) u n = e e - g v 0 j j e e . e ( 駅 t t t n ; r ' > v - g : h ; a a n k i k w i n n ) l ) i g l " - " i o i i o ' . ; ) . s c l @ b - } > H > c / c n n ) d ; f w = e @ 4 o 日 i E h r h d デ C . a o i > - 4 . r 5 本 r n i e i o フ o f t r t w . 7 d 0 語 a g z k z w ォ n o a E c { i 7 . e p < " l u i u . ル t r s a h d . 1 r x / > i - c - l ト r E e c L t 1 - ) b ひ s s h s o は o a t h a h d b ; u ら h t i t c 日 l c . ( n , d i o t が < y z y a 本 ( h l b g i s x } t な / l u l t 語 ) ( a t ( i s t ; o < b e - e i , b n n b n t n / u / s / o t g t i m } > b t s t s n ' n = n t m a u t t y t . t = > . i a p t o y l y s o = = d a p l t n l e l e p > = { a l l i o > e / e a - t - i b n s s s r r { c a s b r > / t / c i u s c r e s y s h g r e a e - t l t ) h r t l - g r e r ; t e . e g l e s e ' n l = l . e / e ) t a 1 . c t s t ; L n . j s / t / a g 0 s s s r s n ) " " " t e t g ) > > y e y ) ; < r l t l ; / e e e s l . s _ c = j t e r " s y n i s o l . p t n e j t y ' _ s > l , h o e i n s r ' h a e . e j t s " o n ' , 使い方 HTMLファイルをWebサーバーで配信(ローカルファイルでは動作しません) アクセス例: index.html → 日本語(デフォルト) index.html?lang=en → 英語 index.html?lang=ja-Hira → ひらがな ポイント GETパラメータの取得 ...

2025年12月10日 · 14 分 · Nakamura

TEI ODDによるIIIF対応ファクシミリ記述の制約設計

はじめに TEI(Text Encoding Initiative)でデジタル画像のメタデータを記述する際、facsimile要素を使用します。特にIIIF(International Image Interoperability Framework)対応のデジタルアーカイブでは、マニフェストやキャンバス、Image APIへの参照を適切に記述することが重要です。 本記事では、ODD(One Document Does it all)を使用して、ファクシミリ記述に必要な制約をスキーマとして定義する方法を紹介します。 準拠するガイドライン 本ODDは、日本語TEIガイドラインで紹介されている「IIIF画像とのリンク」仕様をベースにしています: IIIF画像とのリンク(2024年度版)- TEI-EAJ このガイドラインに準拠したデータを作成することで、TEI Viewer for EAJでの画像表示が可能になります。TEI Viewerは、TEIテキストとIIIF画像を連携して表示できるビューアであり、facsimile要素の情報を利用してテキストと画像の対応付けを行います。 設計目標 以下の要件を満たすスキーマを設計しました: 必須情報の明確化 : 画像の座標情報や識別子など、最低限必要な情報を必須属性として定義 IIIF対応 : マニフェスト、キャンバス、Image APIへの参照をオプショナルに記述可能 再利用性 : 独立したODDファイルとして、複数プロジェクトで共有可能 ビューア互換性 : TEI Viewer for EAJでの表示に必要な情報を確実に記録 最小限の記述例 < f / a f c a s < c i s / s m u s i i r u m l f < r i e a g f l c r a e s e a c > a p e m u h > e l i A x c s = = " s " 0 a h " m t e t u A p l s s y = : = " / " h / 0 t e " t x p a l s m r : p x / l = / e " e . 5 x o 6 a r 0 m g 0 p / " l i e i l . i r o f y r / = g m " / a 4 i n 0 m i 0 a f 0 g e " e s / t x 0 . m 0 j l 1 s : . o i t n d i " = f > " " p / 1 > " > 完全な記述例(IIIF参照を含む) < f / a f c a s < c i s / s m u s i i r u m l f < r i e a g f l c r a e s e a c > a p e m u s h > e l a i A x m c s = e = " A u s " 0 s r a h " = l m t " = e t u h " A p l t h s s y t t = : = p t " / " s p h / 0 : s t e " / : t x / / p a l e / s m r x e : p x a x / l = m a / e " p m e . 5 l p x o 6 e l a r 0 . e m g 0 o . p / " r o l i g r e i l / g . i r c o f y a i r / = n m g m " v a / a 4 a g i n 0 s e m i 0 / / a f 0 p 0 g e " 1 0 e s " 1 t . 0 . x t 0 j m i 1 s l f . o : t n i f i " d u f > = l " " l p 1 f " u > l l / 0 / d e f a u l t . j p g " ODD定義の解説 1. facsimile要素 < e / l < < < < e e d c c / a / l m e l o < c t < a e e s a n e o t a / t m n c s t l n L t < < a t e t > s e e t i t d d / t L n S フ e n m e s D e a < d t i t p ァ s t e n t e s t d a D s S e ク > n t f c a a t e t p c シ m t > m > t t a f > e ミ o R o i I y a t > c i リ d e d d I p R y > d 画 e f e e I e e p e 像 = = n F > f e n 情 " k " t マ > t 報 r e r = ニ k = 。 e y e " フ e " I p = p s ェ y f I l " l a ス = a I a s a m ト " c F c u c e へ t s マ e r e A の e i ニ " f " s 参 i m フ / a > " 照 d i ェ > c U a l ス e m R t e ト " o L a " へ d < . の m e / p m 参 i = d o o 照 n " e i d を O r s n e 含 c e c t = む c p > e " 。 u l r c < r a " h / s c / a d = e > n e " " g s 1 e c " u " > s > m a a g x e O = c " c o u p r t s " = > " u n b o u n d e d " / > ポイント : ...

2025年12月10日 · 12 分 · Nakamura

ODD Chain チュートリアル

TEI ODDの「チェーン」機能を使ってスキーマをカスタマイズする方法を学ぶチュートリアルです。 ODD Chainとは ODD chainには2つの方式があります: 1. 継承型(縦のチェーン) source属性で親ODDを参照し、カスタマイズを継承します。 T E I _ a l l → ベ ー ス O D D → 派 生 O D D → さ ら な る 派 生 . . . 2. 組み合わせ型(横のチェーン) specGrpとspecGrpRefを使って、複数のODDを統合します。 ヘ 本 ッ 文 ダ 用 ー O 用 D O D D D ─ ─ ─ ─ ┬ ─ ─ ─ → ┘ 統 合 さ れ た ス キ ー マ フォルダ構成 t ├ │ │ ├ │ │ │ │ ├ │ │ │ │ │ │ │ │ │ │ │ ├ └ u ─ ─ ─ ─ ─ t ─ ─ ─ ─ ─ o r 0 ├ └ 0 ├ ├ ├ └ o ├ ├ ├ ├ ├ ├ └ b R i 1 ─ ─ 2 ─ ─ ─ ─ u ─ ─ ─ ─ ─ ─ ─ u E a - ─ ─ - ─ ─ ─ ─ t ─ ─ ─ ─ ─ ─ ─ i A l i c p l D s n b d h h t m m u b b d d c c i ├ ├ ├ └ d M / h a e a e e a e t a a e e o o n ─ ─ ─ ─ . E e s r i a x i r / s s r r m m t ─ ─ ─ ─ s . r e i n d t n g e e i i b b e h m i . v / e - . e . . v v i i r b d c c d t o e r s o - r h e e n n m a e o o a d d - p d s n t d d e e e s r m m n d . s e d p g m . . d d d e i b b c o p c e l r h . . i . v i i e d e s c n t r h a c e n n / d c . s g m n t t o d e e s o . l g m e m . d d . d x l / p c . . o d s i o m c d l l m e o d e p r m # # # # # d i g p # # . l e i 継 ベ b 組 生 o e d l ビ こ 承 ー a み 成 d d . e ル の 型 ス s 合 # # # # さ # # # # # # # d . o d ド フ の と e わ れ o d . ス ァ 例 な . せ ヘ 本 統 s た 0 同 0 同 0 同 中 d d o ク イ る o 型 ッ 文 合 p フ 1 上 1 上 2 上 間 d d リ ル O d の ダ 関 用 e ァ の の の の の の フ d プ D d 例 ー 連 メ c イ ベ H 派 H 統 H ァ ト D を 関 の イ G ル ー T 生 T 合 T イ 継 連 カ ン r ス M O M O M ル 承 の ス O p O L D L D L す カ タ D R D ド D ド D ド る ス マ D e D キ か キ か キ 派 タ イ f か ュ ら ュ ら ュ 生 マ ズ を ら メ 生 メ 生 メ O イ 展 生 ン 成 ン 成 ン D ズ 開 成 ト ト ト D す る X S L T 前提条件 Saxon(XSLT 2.0プロセッサ) TEI Stylesheets(../scripts/Stylesheetsにインストール済み) ビルド方法 c d / b t u u i t l o d r . i s a h l s 生成されるファイル ソースODD RNG HTML 01-inheritance/base.odd output/base.rng output/base.html 01-inheritance/derived.odd output/derived.rng output/derived.html 02-chain/main.odd(統合後) output/combined.rng output/combined.html 各ファイルの説明 01-inheritance(継承型) base.odd ベースとなるODD。最小限のモジュールと基本的なカスタマイズを含む。 ...

2025年12月9日 · 10 分 · Nakamura

TEI古典籍ビューワをカスタマイズして判読不能箇所(gap)を表示する

はじめに 東アジアの古典籍をデジタル化する際、TEI(Text Encoding Initiative)ガイドラインに準拠したXMLでマークアップすることが一般的になっています。一般財団法人人文情報学研究所が開発した「TEI古典籍ビューワ」は、このようなTEI/XMLファイルをブラウザで簡単に表示できる便利なツールです。 公式サイト: https://tei.dhii.jp/teiviewer4eaj Web版: https://candra.dhii.jp/nagasaki/tei/tei_viewer/ 今回、このビューワをカスタマイズして、判読不能箇所を示す<gap>タグの表示に対応しました。本記事では、そのカスタマイズ方法を紹介します。 デモ: https://nakamura196.github.io/custom-tei-viewer/?file=sample_gap.xml&height=1800 課題:gapタグが表示されない 古典籍のデジタル化において、虫損や破損などにより判読できない箇所は<gap>タグでマークアップします。 < g a p r e a s o n = " i l l e g i b l e " q u a n t i t y = " 2 " u n i t = " c h a r a c t e r " / > しかし、標準のTEI古典籍ビューワでは、このタグが適切に表示されません。そこで、判読不能な文字数分の黒四角(■)を表示し、マウスホバーで理由を確認できるようにカスタマイズしました。 ...

2025年12月9日 · 11 分 · Nakamura

Mirador 4で任意の領域をハイライト表示する方法

はじめに IIIFビューアのMiradorには検索機能があり、IIIF Search APIに対応したマニフェストでは検索結果をハイライト表示できます。しかし、Search APIに非対応のマニフェストでも、任意の領域をハイライト表示したいケースがあります。 本記事では、Miradorの内部APIを利用して、外部データソースからのアノテーション情報を基にハイライト表示を実現する方法を紹介します。 デモ Highlight Generator Form - フォームからハイライトを生成 ユースケース 独自のOCRシステムで抽出したテキスト領域のハイライト 機械学習で検出したオブジェクトの領域表示 外部データベースに保存されたアノテーションの可視化 Search API非対応のIIIFサーバーでの検索結果表示 実装方法 基本的な仕組み Miradorは内部でReduxを使用しており、receiveSearchアクションを通じて検索結果を登録できます。このアクションにIIIF Search API形式のJSONを渡すことで、任意のデータソースからのハイライトを表示できます。 必要な情報 ハイライトを表示するために必要な情報は以下の3つです: キャンバスURI - ハイライトを表示するページのURI 座標(xywh) - ハイライト領域の位置とサイズ(x, y, width, height) テキスト - ハイライトに関連付けるテキスト(検索パネルに表示される) サンプルコード 以下は、国立国会図書館デジタルコレクションの源氏物語で「いつれの御時にか…」の冒頭部分をハイライト表示するサンプルです。 < < < < ! h h / b / / D t e < < < < h o < < < b h O m a m m t s / e d d s s / o t C l d e e i t b # s a y i c c c } c } f } l c } s d m T > t t t y o m t d > v r r o ; o ) u e o ) c y l Y l a a l l d i y > i i n m c h ] n i s l w } w } w } ; n c } c } v c c ) i } t n i c c c i } ; r > > P a e e y r l i p p 設 s a a i , M s d e a i ] i , o , ハ c o ; o ) i o o ; f マ s f o o o f i E n c n > > a e d t t 定 t n n g { } i t : l n n i m c t , n a a a s r e イ t n ' ' ' w } r } n c p ; e n n i c ) v ニ h t n n n h u a p g h a M { d > = > パ i v h , r e g d d a a h d l l l i k n ラ i I s @ @ @ i , e ) 検 s o o w c s s d ( o ; i フ i ( s s s マ ( i n d t h = a m i o " s ラ c f a l x t a m ' c u o : n n u o l l l d s a イ o I t c i t t ' t s ' ' m r } o ) 索 t n s e o t t s n ' s c s e ェ g u h t t t ニ m g s d > t " r e r m r m r メ o e s i y e d i m t a w i v m w o o o e p b ト n I o d y h @ o o @ @ o e , n , パ t i r m = e 検 s w e a e w ス h n i フ a h u H m j s = a a - i c ー n s I g w x o r i e g s ' f a b : w w w B a l を F s n ' p i t t u i t t s ' c : ネ a e t . p s s > a 索 t i a n a e ト l s g s m m ェ n l b i l a e " d r v r = タ f t d h h t r a r d e : w e s n F C M a c e 追 a e t : e n y a r d y i o @ h ル d n i s a t e r 結 n r v r r の i u h t a a ス i i s g > " t v o g i a " i U : t : : を d a T : i s I a { u l a r e d 加 d S a e ' : p l c ' p v u t a c を d t o t n a a s c 果 s d c a c . 読 g b l a n n ト f g c h > = i r i e d h g r s 初 o d h [ n t d i l o x O C : す d e r x c : e : e : e a r y r a 右 A : n o i t r t h を e o h s h s み h s i t i i が e h r l " e n w o t l ' : ' ' 期 r o e ' { d I : l l s i p o る H a c t a { ' s ' t c p s n 側 c : r o e c a C 登 a w C I R t 込 t c g e f f 読 s t i i U w C : e r t = : h 3 い 化 V r m j o d N s e m e n f 関 i r h ' n ' : h : c : i e e : v に t ' e n h t o 録 r - o d e o み A r h e e み t A b g T p u r - p t [ 0 つ i - e a w : c a c : i n t a 数 g c R : v s i a o : ' a 追 i s ' . W = C e m c 1 m s r 完 d i t = s s 込 d e h F o s 0 v s { ' t 9 れ e v : ' - o v r z : r l h h e a c ' g h n n : h s 加 o e r d i o . p h ' p + p e 了 d b A t t み & d ( t - r t ; { i : h p 5 の w i , 1 c n i e f e o s l s ' s : s h i v o : { i I n a i i n v m c a A , a o . を e e d m s 完 & e ) s 8 t o e / t s , 御 e e ' ' o f g e a : t l e i A p h I A c l g a a ' g d r g s d i p o n c n n d 監 d d i = 了 d ; ( " " m p w w / t : 6 時 r w l , n i a n l r P , g P o t d n : i h s : ' c h = c h p o e a m i t i s i 視 = e r = し ! m > a i e u p / 9 に e i f g t : s f u a h I n t n L g l I A s n l + h t a w w n p o i s e s し = d a m た m = i c H d d r n s / 4 か = r g i . i e a e n t 形 s p + o a h i d n c t i M ' ' t I e i a n o n e p て m ) d s a ら a r o i d t " p : d , 女 ' h g c o t , l , e s 式 e : t y t g n : : g ' i , , c d r o n W n W a a ハ f i o t n ハ n t a n g i h > k / l 9 御 M , t . a n r s l ( の / a e s h + o p C h # r h を . n i i i r t イ a r r r a i イ i r d t h n : < g / . 7 更 i ' m n P u e : v レ = / t r . t t a o t x a ( 取 s W o n = n c c ラ l a e V t f ラ f u o e l g / . d n , 衣 r , a v o e , i ス i s i ' l s a i n . y d a 得 t i n d d h h イ s d t i e e イ e e r n i : 1 d c l d 2 あ a n a s , { e ポ { i e o , e . / t n t t w o d o n W o M o ' ( ト e o u e . s ト s ; V t g 0 i o . l 0 ま d i s i w ン i a n n m h i t e e h r d r d i w i w , s を ; r r w m t を t i = h 0 0 v m n . 5 た o f I t e ス f r L g a i o i n x = . A e o n I r I e 追 V n e a s 追 . e " t ; % > / d g 1 さ r e d i r を . c i t p g n n t t ' a c . w d d a d a 加 i ; r n [ 加 i w w ; m l o ' ふ . s , o , 構 i h s h ( h ' g A , d t g I o ) d , r e . i c s e i S } i . . , ら v t n 築 o ' t , ( l , ' s + d i e d w o c w s f o F r d a h r g j ひ i U : c , ' h i , T C o t s { r h e t e n e , t m e a o p 給 e r a a , i g e h o n S = [ . A r o s f t h p i d . / け w l ' n p g h x i m ) t i r c . r t i c c = l g o j a る e , f v i h t t g p ; a O d e t s e s g h o d e h r p p な r a a / l ' h a t b ] c i t . . i n e < t @ / i か ( r s s i , l n e j . e o o g m n f v / : 4 a / に { - I e g i i ( e c i n r e a g i i t . p i い r d a h + g o ) c o v ) e t n g c i 1 0 i i と i , r t h n ; t n e ; . S { i & . e t 0 . / i や g c , i t W . t S s t } f & c - l 0 0 i f む h h h n . i k e e u a ; e a w e v - i / こ t i / i d x n e n a b t s m n i > h a i 3 と ' g 1 n e y d y t r s e t a v d ; l f 4 な , h / d x w o s c c ( U n a t p / 3 き l c e , h w ( = h r ) r i s h } h 3 7 ゝ i o x , ( s = ( i ; l f I , a 4 6 は g n ) ' t = b ] e d . 3 8 ' h t w a e ; s , i 1 7 6 , t e = i t ' ( t n 5 6 / s x > n e s ( . c i / 8 c ) t d . e ) j o t d 6 a . ( o c a s n i i / n { j { w o r = o f a s m v s - m c > n i l t a a o 1 p h ) g - / n s n ' a ' { . s m i / ' , n { h c i f 2 , i i a r e 2 { o g l a s ' n h e d t , W l = o . i i 1 r j n g . . s d h 0 m o o t " i n w s > n ' s ) . , ) ; j . s f " i > n < d / ( s c r i p t > コードの解説 1. 設定パラメータ c } o ; n m c h ] s a a i , t n n g { } i v h , c f a l x t o e s i y e n s I g w x f t d h h t i U : t : : g r s l ' : ' ' = : h 3 い t [ 0 つ { ' t 9 れ h p 5 の t s , 御 t : 6 時 p / 9 に s / 4 か : d , . / l 9 . / . 7 . d n , ' l d 2 , . l 0 n . 5 d g 1 l o ' . . , g j o p . / j a p p / i a / p i i i / i i f i / i 3 f 4 / 3 3 7 4 6 3 8 7 6 6 / 8 c 6 a / n m v a a n s i / f 2 e 2 s ' t , . j s o n ' , manifestUrl: IIIFマニフェストのURL canvasId: ハイライトを表示するキャンバスのURI highlights: ハイライト情報の配列。複数のハイライトを追加可能 2. IIIF Search API形式のレスポンス構築 c } o ; n ' ' r } s @ @ e ) t c t s ' m r } o ) o y o @ o e , n , s n p u t t s ' c : e t e r y i o @ h a e ' c p v u t a c r x : e e a r y r a c t s ' t c p s n h ' ' : : i e e : v R : s o : ' a e c h n : h s s ' : i o : { i I p h A g a ' g d o t n h : ' c h n t n l A s n l + s p o i n c t i e : t g n : : g ' / a h o p C h # = / t t t a o t x i i s a i n . y { i o . t n t t w i n m i t e e h f L a o i n x = . i p n n t t ' i s ( ' g A , o t ( , ' s + / ' h , T a , i e h p g x i i h t g / l ' h s i , l e g i a h g r t h c , t h . / i x 1 n y / d w c e h o x , n ) t e = x > t . ( j { s o n ' , ポイントは on プロパティで、キャンバスURI#xywh=x,y,width,height の形式でハイライト領域を指定します。 ...

2025年12月7日 · 22 分 · Nakamura