Omeka Sテーマの多言語化

はじめに Omeka Sのテーマ開発において、多言語化の実装方法に関する日本語の情報は限られています。本記事では、Omeka Sのカスタムテーマを多言語対応させる具体的な手順と、実装時の注意点について解説します。 目次 Omeka Sの翻訳システムの仕組み テーマの多言語化に必要なファイル ステップバイステップガイド よくある間違いと解決方法 実装例 トラブルシューティング 1. Omeka Sの翻訳システムの仕組み Omeka Sはgettext という標準的な翻訳システムを使用しています。このシステムでは: .poファイル:人間が読み書きできる翻訳ソースファイル .moファイル:コンパイル済みのバイナリファイル(実際に使用される) $translate()関数:PHPテンプレート内で翻訳を適用 2. テーマの多言語化に必要なファイル 必要なディレクトリ構造 y ├ │ ├ │ │ │ └ o ─ ─ ─ u ─ ─ ─ r - c └ l ├ ├ └ v └ t o ─ a ─ ─ ─ i ─ h n ─ n ─ ─ ─ e ─ e f g w m i t u t j j / ( e g h a e a a 各 / / e g m . . 種 m e p p m テ e l o o ン . a プ i t レ n e ー i . ト p フ o ァ t イ ル ) # # # # 日 日 重 翻 本 本 要 訳 語 語 : テ 翻 翻 h ン 訳 訳 a プ ソ バ s レ ー イ _ ー ス ナ t ト リ r ( a オ n プ s シ l ョ a ン t ) i o n s = " t r u e " を 追 加 3. ステップバイステップガイド ステップ1:theme.iniの設定 config/theme.iniファイルの[info]セクションに以下の行を追加します: ...

2025年8月14日 · 14 分 · Nakamura

Cantaloupeでdelegate scriptを使ってAzure Storage上のファイルパスを動的に変換する方法

はじめに IIIFサーバーのCantaloupeでAzure Storageを使用している際、IIIF URLのidentifierと実際のAzure Storage上のファイルパスが異なる場合があります。本記事では、この問題をdelegate scriptを使って解決する方法を詳しく解説します。 課題 以下のようなファイル構造で画像を管理しているとします: A ├ │ │ │ │ │ │ │ z ─ u ─ r e i ├ │ │ │ │ └ m ─ ─ S a ─ ─ t g o e c ├ │ └ c └ r s ─ ─ o ─ a l ─ ─ l ─ g l l e e i └ i └ e c t ─ t ─ c C t e ─ e ─ t o i m m i n o 0 i 0 i o t n 0 t 0 t n a 1 1 e 2 e 2 i / / m / m / n 0 0 e 0 0 r 1 2 : _ _ 0 0 m 0 0 y 1 1 c . . o j j n p p t g g a i n e r しかし、IIIF URLでは以下のようにアクセスしたい: ...

2025年8月12日 · 14 分 · Nakamura

RELAX NGとSchematronを組み合わせたTEI XMLスキーマの実装ガイド

! 人手で検証を行った後、AIが記事を執筆しました。 はじめに TEI(Text Encoding Initiative)XMLを編集する際、要素や属性の構造検証だけでなく、より複雑なビジネスルールの検証が必要になることがあります。本記事では、RELAX NG(RNG)とSchematronを組み合わせて、構造検証と内容検証の両方を実現する方法を、実際のプロジェクトで直面した課題を例に解説します。 解決したい課題 日本の古典文学テキストをTEI XMLで校訂する際、以下のような要求がありました: ID参照の動的検証 : corresp属性で参照するIDが、実際に文書内のwitness要素に存在することを検証したい Oxygen XML Editorでの補完機能 : 編集時にIDの候補を自動表示したい 複数ID参照のサポート : スペース区切りで複数のIDを指定可能にしたい 特定要素のみ参照を許可 : witness要素のIDのみを参照可能とし、person要素のIDが含まれる場合はエラーにしたい なぜRNG + Schematronなのか? RELAX NGの得意分野 要素・属性の構造定義 データ型の指定 基本的な内容モデルの定義 Schematronの得意分野 XPathベースの複雑な検証ルール 文書内の相互参照チェック カスタムエラーメッセージの提供 この2つを組み合わせることで、構造と内容の両面から厳密な検証が可能になります。 実装例 1. 基本的なRNGスキーマ構造 < < ? g / x r < < < < < g m a ! s ! s / ! r l m - c - t < s - a m - h - a r t - m v a : r e a m e r S n こ t f r R a r c s こ > t N r s x x x d n h に n > G > i m m m a s e p S a に o l l l t = m r c m よ n n n n a " a e h e る = s s s t h t f e = 構 " = : : y t r i m " 造 1 " a s p t o x a T 定 . h = c e p n = t E 義 0 t " h L : 名 " r I " t h = i / 前 t o " p t " b / 空 e n / e : t h r w 間 i ル > n / p t a w 宣 " ー c : t r w 言 ル r / p y . u を d e / : = t r 埋 i l r / " e i め n a e / h i = 込 g x l p t - " む = n a u t c h " g x r p . t U . n l : t T o g . r p F r . / g : - g c w / / 8 r l w n / " n g c w s w ? s . . / w > n o w 1 w s s r 3 . . t / g . 0 t r c o " e u d r > i c m s g - t p d / c u a l 2 . r t / 0 o e i s 0 r / b c 1 g 1 i h / / . l e X n 0 i m M s " t a L / y t S 1 / r c . a o h 0 n n e " n " m / o a > t - a d t a i t o a n t s y / p 1 e . s 0 " " 2. ID定義とanyURI型の活用 Oxygen XML Editorで自動補完を実現するために、anyURI型を使用します: ...

2025年8月9日 · 17 分 · Nakamura

Docker環境でDrupal 10にWDBモジュールをセットアップする手順

概要 この記事では、Docker環境でDrupal 10を構築し、言語学データベース用のWDBモジュールをインストールする手順を解説します。 前提条件 Docker Desktop がインストールされていること Git がインストールされていること 手順 1. Docker環境の構築 まず、docker-compose.ymlファイルを作成します: s e o r m d l m v a r u a i r i r e u i d p r m r c i m e o n p m o e o e e i e a a s l - v M M M M a a l p - r - s s a s d g t u i Y Y Y Y l g u e t t : d : b e a m m r S S S S : e m n m s 8 a b : : r e a o Q Q Q Q : e / d a : 0 r : t s r n L L L L s d d d d s r 8 t m : : i m _ _ _ _ d : r r r r _ i 0 : { a a e R D U P r u u u u o a : } r a d n O A S A u p p p p n d 8 a i l b t O T E S p a a a a : b 0 l a w : : T A R S a l l l l w d a / _ B : W l / / / / a b y v P A O : f m t p y : s a A S d R 1 i o h r s l r S E r D 0 l d e i a / S : u : . e u m v t l W p 2 s l e a e i O d a d . : e s t s b R r l r 7 / s : e t / D u u - o : : m : p p p p o / y a a h t p o s d l l p p t p q r 8 d t t l u . r d / p 2 u d r d a - p r u r l a a u p u p l p a p a / a l a c w l l h e w / e b w e p - / e b r b s b i u i t v l t m h a l e o e t s s d m e e / u e y d l s e e e f s a u l t / f i l e s 次に、必要なディレクトリを作成し、コンテナを起動します: ...

2025年8月7日 · 6 分 · Nakamura

生成AIを用いてプロジェクトに特化したrngファイルを作成する

概要 TEI/XMLファイルを編集する際、検証に使用するrngファイルを変更することで、使用するタグや属性を限定することができます。これにより、作業者が使用するタグに混乱しない、作成されるTEI/XMLのばらつきが軽減する、といった利点が考えられます。 rngファイルを編集する方法として、以下の記事で紹介したように、Romaを使用する方法が一般的です。 この方法はトップダウン的に使用するタグや属性を限定していく方法ですが、今回は、すでに作成済みのTEI/XMLから、生成AIを用いて、ボトムアップ的にrngファイルを作成してみます。 対象データ 校異源氏物語テキストDBで公開されている以下のXMLファイルを対象とします。 https://kouigenjimonogatari.github.io/tei/01.xml このファイルでは、以下のtei_all.rngを使用しています。 http://www.tei-c.org/release/xml/tei/custom/schema/relaxng/tei_all.rng そのため、以下のように、挿入可能な多くのタグがサジェストされることがわかります。 生成AIによるrngファイルの作成 以下のようなプロンプトにより、対象とするXMLファイルのタグの使用状況などに応じて、rngファイルを作成します。 # # - - # - # 1 2 3 4 # - - # 1 2 # # # . . . . # # . . X 作 作 フ 不 必 M 目 業 業 提 ァ 要 制 要 須 期 カ 簡 L 的 効 者 供 イ 望 * * * * 約 な 属 待 ス 潔 フ 率 が す ル 現 最 入 コ ・ 要 性 す タ な ァ 向 タ る 名 在 小 力 メ 方 素 を る ム 使 イ 上 グ フ : の 限 補 ン 針 は 明 成 R 用 ル の 選 ァ X か 完 ト 除 確 果 N ガ 用 た 択 イ 0 M つ ・ 付 外 に 物 G イ カ め に ル 1 L 必 バ き ( 定 フ ド ス 、 迷 . フ 要 リ * 例 義 ァ タ 使 わ x ァ 十 デ * : イ ム 用 ず m イ 分 ー で ○ ル R す 、 l ル な シ 、 ○ ( N る 一 を 要 ョ 各 、 . G 要 貫 分 素 ン 要 × r ス 素 し 析 セ * 素 × n キ ・ た * ッ * の は g ー 属 構 * ト が 用 使 ) マ 性 造 し * 効 途 用 作 を で 、 * 果 を し 成 限 編 実 で 的 明 な 依 定 集 際 R に 記 い 頼 し で に N 働 ) た き 使 G く R る 用 ス よ N 環 さ キ う G 境 れ ー 設 ス を て マ 計 キ 構 い を ー 築 る 作 マ 要 成 を 素 作 ・ 成 属 性 を 特 定 結果、以下のrngファイルが作成されました。 ...

2025年8月1日 · 30 分 · Nakamura

Omeka S Docker の紹介:デジタルコレクションのための最新かつセキュアなソリューション

! 本記事はAIが作成しました。 Omeka S Docker へようこそ!このプロジェクトは、大学、ギャラリー、図書館、アーカイブ、博物館向けの Web パブリケーションシステムである Omeka S の本番環境対応 Docker セットアップを提供します。 📦 GitHub リポジトリ : https://github.com/nakamura196/omeka-s-docker なぜ Omeka S Docker なのか? デジタルコレクションの管理は複雑である必要はありません。そのため、Omeka S のデプロイと管理を簡素化する Docker ベースのソリューションを作成しました。 主な機能 🚀 クイックセットアップ : シングルコマンドで数分以内に Omeka S を稼働 🔒 セキュリティファースト : 非 root コンテナとセキュアなデフォルト設定を含むセキュリティベストプラクティスで構築 📦 モジュール管理 : 人気の Omeka S モジュールの自動インストールとアップデート 🔄 簡単なアップグレード : データの永続性を保ちながらシームレスなバージョンアップグレード 🐳 本番環境対応 : 開発環境と本番環境の両方に最適化 🌐 Traefik 統合 : リバースプロキシと SSL 終端のビルトインサポート はじめに 前提条件 Docker と Docker Compose がインストールされていること コマンドラインの基本的な知識 (オプション)SSL 付き本番環境デプロイ用のドメイン名 セットアップオプションの理解 この Docker セットアップは2つのデプロイモードを提供します: ...

2025年7月30日 · 3 分 · Nakamura

IIIF 3D Viewerを試作しました。

! 本記事はAIが作成しました。 はじめに デジタルヒューマニティーズの分野において、文化財や歴史的資料の3Dデジタル化が急速に進んでいます。しかし、3Dモデルを単に閲覧するだけでなく、学術的な分析や教育に活用するためには、適切なツールが必要です。本記事では、IIIF(International Image Interoperability Framework)規格に準拠した3Dモデルビューア「IIIF 3D Viewer」について紹介します。 IIIF 3D Viewerとは IIIF 3D Viewerは、IIIF Manifestフォーマットに基づいて3Dモデルを表示し、アノテーション機能を提供するウェブアプリケーションです。 主な特徴 標準規格への準拠 IIIF Presentation API 3.0に準拠 既存のIIIFエコシステムとの親和性 インタラクティブな3D表示 GLB/GLTFフォーマットのサポート マウスやタッチ操作による直感的な操作 WebGLを活用した高速レンダリング アノテーション機能 3Dモデル上の任意の点にアノテーションを追加 3DSelectorタイプによる空間座標の記録 学術的な注釈や解説の付与が可能 多言語対応 日本語・英語のインターフェース 国際的な研究プロジェクトでの利用を想定 静的サイト生成 Next.jsの静的エクスポート機能を活用 GitHub PagesやNetlifyなどで簡単にホスティング可能 技術的な実装 アーキテクチャ 本アプリケーションは、以下の技術スタックで構築されています: フロントエンドフレームワーク : Next.js 15(App Router) 3Dレンダリング : React Three Fiber + Three.js 国際化 : next-intl スタイリング : Tailwind CSS 型安全性 : TypeScript IIIF Manifestの構造 3Dモデルを含むIIIF Manifestの例: { } " " " " " ] @ i t l i c d y a t { } o " p b e n : e e m " " " ] t " l s i t i e " : " " d y t { } x h : : " p e t t " : e m " " " ] " t M { [ " s i t i : p a " : " d y t { } s n " h : " p e " : i j t " : e m " " " " } " h / f a t C [ " s i t m b , t t / e " p a " : " d y o o " " " a t e s : s n h : " p t d i t f r p x t : t " : e i y d y o g : a " [ / a t A [ " v " " p r e / m , " / s p n " : a : : e m t / p 石 e " s n h t " a " i l 淵 x , : t " i { " : t : i e 家 a t t A o h " i . 地 m / a p n n t " : " f c 球 p e t s n " t M h . o 儀 l x i : : p o " t i m " e a o t s d m t o ] . m n / a " : e o p m c p P e t p / l d s a a } o l a x i a / " e : p n , m e g a o i e , l / i i / . e m n n x / / / f c c " p " t a g e p e a o , l , i m l x r s n m e n p t a e t v / . g l f m s . a a c " e - p e j s n o , . b l n s / n m c i e t o 1 o / o n . a n " t a m a c t " , a n / r o i , t n m y m o i o o " / n o t d c / n a e a 3 p t l n / a i . v c g o g a o e n l s n / / b / t 1 1 " 1 e " " , " x , , t . j s o n " , アノテーションの実装 3D空間におけるアノテーションは、以下のような構造で表現されます: ...

2025年7月29日 · 4 分 · Nakamura

「前近代日本-アジア関係資料デジタルアーカイブ」のビューアを試す

概要 「前近代日本-アジア関係資料デジタルアーカイブ」が2025年7月25日に公開されました。 https://asia-da.lit.kyushu-u.ac.jp/ また、以下でビューアが公開されています。 https://github.com/localmedialabs/tei_comparative_viewer 本記事では、本ビューアを試した記録を共有します。 結果、以下のように、セルフホストすることができました。 https://tei-comparative-viewer.aws.ldas.jp/ 以下の「海東諸国紀」のXMLファイルを読み込んでいます。 https://asia-da.lit.kyushu-u.ac.jp/viewer/300 ローカルで起動する 以下に丁寧な説明がなされていますので、手順にしたがって起動させることができました。 https://github.com/localmedialabs/tei_comparative_viewer/blob/main/docs/SETUP.md サーバで起動する サーバで起動するにあたり、Dockerを用いて起動しました。 フォークしたリポジトリは以下です。 https://github.com/nakamura196/tei_comparative_viewer/tree/docker-traefik-setup 以下のようなファイルを用意しました。 F # R # R # R # C # W # C # R # R # R # C R # C # C # R # R # R # E # R # C R U U U O O O U U U O U O O U U U X U M O I N C N I N G P S R C P I N I N R N C P N C P C P C N G N O N E P C N S D M n l n e Y e K o Y n n e o Y o Y o Y r e p x O r t s a g c l l l z u n n n s e a s d t t D p s c s n m r p l p p e m & & & n p t p p p p S e m a [ p t p i u i i i i n o p g u a p t o I y . t o t p o m y d n y d y d a k & & & e h i h h h o E a k r " h a t t r b b b p z d m i p r t a c l - w R a m a m v o o o t d r p m p p p s t d t / p l - l p o x i e n e - l k a f o e l p l e - n c - P c s c e i c c c a i e 8 e i u : l g n n m \ p j \ x r c g l e t r r x v l o l i f g k s H k u k r h h h t a z a a a 0 r s s 8 e g i l s v a e r e o k v i a s n d i e P e p e n o m m e r e r r r p P u r . s t - g 2 \ i c t P - s m i a s r d e a s e / n r - r e r e - w o o t t t t o H - p / 2 y d - - s h H p t = n r t / e r n t f e x e F / r / c p n d d k i L i i i r P p e b - s u e d d o e c P h c g / i w p d a a t n t P p s e e s a s s s t - r i f t p v e e r l p C o w n w e i l u c c g c M h i u s - - - y a r a a a F v n p e d v v e e - o m d w g w n n b l l / o i / p s p s v R R R n a n n n 8 P v i / m m a a x e m p i w d s u t n n n n c o e a a v 0 M a s s t n t x p o r a e t i & g f x g w r r r r w 7 7 k e c r v r o u d e e t o s e p n a l & n i i / i n w v y / w 5 5 e l o o i s r p e & n - s e c p c l d g n g a n f w c i l w 5 5 y n u e r d e p & & s i e r t l i l n i x p x i . o s d o - : f t w c u r e & i n r : o i e f p n / p g c n o i g d g i e : k n v n r o s l r c s r m x s . s o f r r / a v e g : c e / i d a m n t a y a - o i c i n i / e s t a a n : c a t p s e p s a t t n n r s t o t f g s c u a r r e c a c h o n t - l e i o t u i e n e u t p : / / r a c h d p r c - r l s o - e n t s f s / p o e w w w a c h e i d i g f t n d n e - - u e r r w w w t h e r " e e m e d b e / a s r i v w w w e e e , s t b / d v u n e v r v e i - / / & c v s u i a i a t a / i s s d s b & & t " i a t s r s l b c i l s o a t o & o - n r r r e s d l / l o o a r t o o \ r c s / i / c o e e n a c r n a r t \ y " t l n b t p t d g b a d d \ a s , a i g i o t s / i l l . g t l b n r i d n e / c s v e r " l / e / y m e x e o e a a / a x c i f a t n t r \ p e - p i o c z a s p c f / / t y t f m o e u i p / p w c c / p n - l t . p / e w a / \ l p o t a t e c h e r w c s i c s e u s o p t m h u s n e n t - n - c i \ e p t t r t o a f f / s e s l s l v p s s r / / o a / m u i v * b u a i e . p o i c s d l t d e n s m r e a c / r s o a / r b / w v r t b l n w i / h i e g w s c n / i . o o g / a n c r n d c p x o / f o p n c . m . s f o d p c i n / o o t f s s n e . u e f s d p r - / e e s r n u v a p i b e s l r o e v r d i d / s . o c r o d n . f c " o ] n f s n e e r a t t v p w r i p b c r e n l o a e c : u o e n o e a r e x e i c d n s v l t - b - # - - - - # - - - - # - - - - - - - # - k f t s l o o t t _ u w e s i e : d n c a a f . m t l " H " " " " H " " " " S " " " " " " " A " : k r : t k i r i e e r r s t T t t t t T t t t t e t t t t t t t p t - n e e n t l n s s p k a : r T r r r r T r r r r c r r r r r r r p r n a x r e : e v : t u s e a P a a a a P a a a a u a a a a a a a l a e l t f r : . o b : f e e e e e S e e e e r e e e e e e e y e t : : i _ u e r l i f r f f f f f f f f i f f f f f f f f w l n n x a i k i o i i i i r i i i i t i i i i i i i m i o t . e a l t g c - k u k k k k o k k k k y k k k k k k k i k r r : m e e e / n . t . . . . u . . . . . . . . . . . d . k u e s r : a e e e h h h h t h h h h h h h h h h h h d h : e D : s n / s t n r t t t t e t t t t e t t t t t t t l t o - a v s w a t t t t r t t t t a t t t t t t t e t c t s l a e o b ( p p p p p p p p d p p p p p p p w p k e t r t r l r . . . . . . . . e . . . . . . . a . e i o / s k e e r r r m r r r s r m m m m m m m r r r _ p w : = d o o o i o o o e s i i i i i i i e o f v p w / t i u u u d u u u r d d d d d d d s u i i e w r r t t t d t t t v d d d d d d d t l e d / a u e e e e l e e e i l l l l l l l e e w s r e c r r r e r r r c e e e e e e e r . e t " t s s s w s s s e w w w w w w w s p r w s . . . a . . . s a a a a a a a . r _ r w a a a r a a a . r r r r r r r a o a a w t p p p e p p p a e e e e e e e p d p g / o p p p s p p p p s s s s s s s p . p e p - - - . . . . p . . . . . . . . t u H i i i h r e t . a a a a a a a m r b T n n n t u n l l p p p p p p p i a l T s s s t l t s o p p p p p p p d e i P e e e p e r . a - - - - - - - d f c S c c c s = y c d h h h h h h h l i / ) u u u - H p e b e e e e e e e e k a r r r r o o r a a a a a a a a w s e e e e s i t l d d d d d d d a s . . . d t n r a e e e e e e e r e r e m i ( t e n r r r r r r r e t u n i r ` s s c s s s s s s s s s l t d e x = o e . . . . . . . = e r d c x w l r h h h h h h h a = y l t x e v . e e e e e e e p H p e . . b e s a a a a a a a p o o w r y s r e d d d d d d d - s i a e y e = r e e e e e e e h t n r d y c m v r r r r r r r e ( t e i . u y e s s s s s s s a ` s s r z r r r . . . . . . . d x = = e z e e . f c b r s s s e x w h c z " s p r o r e t t t r x e t t ` o o a n o f s s s s . b t s ) l r m t w e S I P " y " p c " v t e e s r e n r y s h e = D n e r c c e y - e r 8 e t r e o l l . r m " 0 n T X r n u o z e e " y y s P d d a z d . = p s o s e d z i s t e F l = S = ` r c r N i i 3 u t ) e h u o l c 1 b r " c e e s t y 5 d u t m " n e = 3 o e " e i r s 6 m " = f = t 0 a h f t r 0 i t = r i 0 n t t u c " s p r e t = s u " - t " e o r " r u i e g " i n - w h e n - c r o s s - o r i g i n " # A A A A # D # D # S C # L # M # P P P P O B E A O A A P P P P D M D _ S S C L G M I O p _ _ _ _ o A a C e S H o _ a L t p E D K U m I t O s I E g C i _ h l N E E R a N a N s O _ g H l M e i V B Y L i = b N i N D i A A r c = U = = n x a E o _ R n N ( I a p G h x s C n D I g N i L L t r = t C x e T R V E f E a i o f t o . I a I E L R r o d a p n y O n V R = n = a n u l s f y N d E = s e s v c s : i y = R f t e m e E t e / g . s C = i a d t l n i / u z q a f l c e p v o x r z l c i e k d c i n x a z i h l ) o r x t t e e n o . i e f n y o i m y n g e y u n . ( r t z u a z s t z e i d o n i s n a d s o c n k e e e r d - e c d o m p o s e l a b e l s ) # e # i f # e e e e e e e e e r # e # e i f e # e m m m m # e c # e i f # e d # e s # e i f # e d # e d d d # e i e f e e e e e e e e e e e e e e e e e e e ! c f i c c c c c c c c c e x c f i c c k k k k c p c f i c o c l c f i c o c o o o c f l i c c c c c c c c c c c c c c c c c c c / h . 設 h h h h h h h h h a . p t h h 必 h d d d d ま h D h コ h c 起 h e ア h 権 h c 設 h c c c ア h s h h h h h h h h h h h h h h h h h h h b o e [ 定 o o o o o o o o o d e o r o ! o 要 o i i i i ず o . o o ! ン o k 動 o e プ o d 限 o k 定 o k k k プ o d e o o o o o o o o o o o o o o o o o o o i n e c # e d # A s r e の n r a e e e e e e な r r r r . e c e d テ e 確 p リ o e d を e キ e e e リ o e e e n " v ! c p c o P e m c 確 " " " " " " " " " - v t e " d c c c c c x " デ " e " n k " d c o ナ " r 認 " ケ " c c o 設 " r ャ " r r r ケ " c c c c " " " " " " " " " " " " " " " " " " " / = . h ア h c 生 P d h 認 " ⚠ " N w " p フ f C o h h h h h i ✅ ィ C - - - - n C v e B o h c を S W 1 ー C k h c 定 S ッ C ー C k h h h " ✅ " A ( " T " T " T " 📝 b = e - o . プ o k 成 _ a o ️ o i ァ $ i h c o o o o o t レ r p p p p v o . r u c o k 起 t c a 5 シ h e o k e c シ l c c c シ h e o o o p a o o o a = x f e リ e - p p し K - p t t " イ ( k e k t ク e フ p e イ i k e 動 a o i ョ e r e t o ュ e o o o ョ e r S p s d d C N 1 2 3 s t " n ケ " r w h h た E i p " 1 2 3 e h P ル c - c e " " " " " 1 r ト a s s s b ァ y x メ l e " r r m t ン c " r t m を a m m m ン c " " " e l s s o v o c h e . . . h T e . C v ー G p p キ Y . _ A I . . . : r を a n k r ❌ P " I a リ t t t t o イ i t ー d r ❌ t p i キ k c G i p ク r p p p の k c ✅ ❌ t i u t c i c h e x E r e r . シ e r $ : ー = b k p M t e ロ t e i l f e を i o o o o ル n e ジ i c i o n ー i o e c n o リ i o o o 状 i o u c m o k e k e c t E U E I n n e e ョ n u ( v 8 a を $ a e p P D A A T h s ー t n n E e d f 作 n r r r t を g r を n c D o n s g が n m n o g s ア n s s s 態 n m A A d p a i p e w e c k d p n a v a x ン e n p a . r . ( k y l O O P S h e s ド . w g e r a y o i 成 g a a a s コ n ビ g o o m g e 設 g p e m e g e e e 確 g p p p o t n r r k s i d s C l . t t キ r w r 2 t e c . i R M P S i e o t r s o c k g g g t ピ e a ル m c p f 定 o r p p 認 o p p c c i g t l y t t a u o フ e i e ー a d / - i n a " t c T A _ E s ' E n r i w o e u k - n e e e r ー n l ド D p k o c - o さ a s a o e - c - - - a s l l k o o h c o c T o e t r m ァ x n r を t - ) w c s v t s m a A I U T t n v k f o r e n e / / / a v ( o o e s o f r れ n e t s r f o f f f p e i i e m n y e o g o r u p . e e p イ t g n 生 i r : w l a . / p t N N R _ s r t . が r : e n r e c a f l p i . キ c s r e n て d i e m n p c c r p o m s m a r s e a ル e a 成 n m / w i n e a A i T = L U e a e e 存 t k n e t e p r o / r e ー k e t d s い - n i d f d d d l - a a l s u a p , p e : n d D r が r . l g x p P . o : y = R t e r x 在 r t s e n w s p a g c o n 生 e b - a o e な g f g - s o i o o o i f t t c e h r p o o f T " v o N a 存 n e . \ a \ \ k t p P e n o h L u f t す a l r u d e o s / m s a n v 成 r - u f i c r い e f s c g c c c c i i o t o p s r s i r . c S t 在 a n e a r e e _ _ n P u t = p i t e る e s a r t r a p e c m な f i n k v 場 n d n i k u k k k a d o o m e u e l e u e k a e k i し l v x p / y r k K v k l r t h k o r か f e e t w k r u w h e し i l d e e i 合 e o e d o e r e e e t o n n p ! l x i n e x e i v な . a p w : n e E . e e - p t a - n 確 i | f o o y b o e n の m d d o r r c は r c w o n r a r r r i c o " d t c - : - r f t r s e い ] e m l w g a y Y e y a d s t s n c a 認 k i y r f l r t D a o c s - e 生 a k c s - t - - - o k c c s e a f " f o i e - 場 ; x p i w e l . = x s o : p s e o l - g k o c k o d i k o g c f k . c s 成 t e a k . c i c c c n e o o e b r t u k r c p V 合 t l c n に t / t g e m / s u t n n r - u r u i c / f c e k a e . o i r p e . o o o o o r n n e n i d d t n o r i は t e e a \ e 設 m A e e a / : m w t | e e n r e c n r { i k s e i r . m t n - p r . m n m m m s - t t - a o o o i d a m o e 作 h r t r 定 p P r n e i y e o i t p e a r d e c l e . r l - " p o g c l - " p p p p t c a a f a l n c c n a l p p w 成 e n . i a ) P n e d n / s r n g w t e t e ! c a e r . - e c o o i c o c o o o a o i i v , k k g s o e e n a e o t _ a r i . u y k u r o - w x e a " t c . f . c d o s b a m c o s a s s s t m n n d a T e e h w s r r l n n e K l a t c r o y ' e e r q o t t o h . i " o . m e e p p a m e c e e e u p e e o i r r r r ( b i e l v E . t o - u o p k r e t e r e . l m p - p o t p - h - - - s o r r c l a u - - i o t - y S f . k Y b e . m d r u a w t k r h i , " e p T o e r l s i o e e e e e . s k a e n c c f a h e e i e e - = a d e o - l i e r n e t e s を o r s x e i e o s x . x x x . e i m e b f : o o r x c t l x y e b k n ( m d h r t x a n a r s e 使 s y e t a c - n e t . t t t . - s a r l i " m m d d y t o u e t . n a s v y a o a e h i e o l n a . s 用 e i - e d a e - e . e e e " e y - e k p p a o e n p . e . v s u . o i m v a s f t e e . s ) - n e r y t x k e r " r r r x r c o o s f u r f . r . = e c e u n a e d t ^ t i T t f . i e g x n . i t e x n n n n t u h o a i s s h o r n i w . n " p 6 c x r . i y h # s k f r w i " o x t a . o e y t a a a a e n a m t s e e b r a g i " a r 4 e t c n a e ' . - o a o k n t w e l . n r . e l l l l r n v p - - o a l u t l o : s e a o . n c . n u e r - s e i r . " n . r . . . . n i e o y p e e a t c . r h d $ s r c m c r c | . e n f k n , r t n y k a . n y y y y a n s o r x x r h t y e u A f n t o e e u " t d i e v n h a m e l " a m m m m l g i e u o t t d e u m d E c P u a u ( m x a r x w ! k m t i a o l l y . l l l l l . ! s - r p e e a l x t P l l a w t t r a o " a w e l u . y . y " s e e r r i n l f t i _ l l i ( e e e r r i n o w . t y u i m y e e e e m u x c r n n s e T o e o K y a t f r d n g k s u r s y m p f l m x x x x l e t o l a a w d r r r n E ! n d h o n . t s ; a k } m c l l e e e e s e n y l l a o a n Y " d o r a " ) r l " l a - n e c c c c p . r f . . c r m e y a / m H l s t u l c b d e x e s n i c y y c o a f o l - " c a T p e h n y b h u e e x a a a a C a g o m m e u i i u s o i T r T t e n : u e i d c e p p p p | h l u n l l s t n k r T h . n n P o r t n i " i . l e c p p p p e . r f s e r o e f ) S p a i n l . d d a g c y e i d l i s s l d a w n i " ) e e n g d . . p a c p p p r k m d g o o b " e a o e v g " r f g ; " . p p h h h h e l u w g l t b m f | . u i s w - . p o p p p p l d r n s e t e a i e r a k . i t n " p w o l o e " ) i l i k s x e s . t h o h p n a a a - g o m d - : n s n e t s i . h e - p h r r r q s g a f " g " = d e t e n " n c p - t t t : s i a s w = r h t s t a a R i i i " " n n a " i = ' n e t r c r a s s s U a d p t " s a l a a h t r w a a a p p ( p h / l f o n e e i t w n n n " p H S " b o a c f s i w ; " T S y a l d e i a s - c c r T L o s l i k n a d o o o t P u e o n r - n a n n u h S c r 6 w g u n k t f f t e ) e 4 i ) n e e k a i i e n " r d : n " n t y e : g g : t o / g i w : y w : : c i m / : n o g : w c c l f a ' " g r e g w l a e i i " k n e - e c a c n > e n d a h r a " c r e a r e t a r a r t e p e t a a s p a e t _ t e a k e v r e d - a e y . s - r . " h f / s t o o w e m w r w t p c w | e / u s p g t ) r o " e r p a g - e q " v b a a r s / e w 6 w 4 w : / " b ; o o t t h s e t n r a p / c a c h e e c h o " P e r m i s s i o n s e t t i n g c o m p l e t e d " まとめ 間違っている点もあるかもしれませんが、参考になりましたら幸いです。 ...

2025年7月29日 · 32 分 · Nakamura

Next.js 15対応 多言語・ダークモード対応SSGテンプレート

この記事は人間が実装を確認し、AIが記事を作成しました。 概要 このテンプレートは、Next.js 15を使用した静的サイト生成(SSG)に対応し、多言語対応とダークモードを標準装備したWebアプリケーション開発の出発点です。TypeScript、Tailwind CSS、next-intl、next-themesを組み合わせています。 https://nextjs-i18n-themes-ssg-template.vercel.app/ja/ 主な機能 1. 静的サイト生成(SSG) output: 'export'によるフルスタティックエクスポート 高速なページロードとSEO最適化 ホスティングコストの削減 2. 国際化対応(i18n) next-intlによる完全な多言語サポート 日本語・英語対応(簡単に言語追加可能) URLベースの言語切り替え(/ja/about、/en/about) 型安全な翻訳キー 3. ダークモード next-themesによるシステム連動ダークモード ユーザーの好みを自動検出 スムーズなテーマ切り替えアニメーション LocalStorageによる設定の永続化 4. 開発者体験の向上 TypeScriptによる型安全性 Tailwind CSSによる効率的なスタイリング ESLintによるコード品質管理 統一されたコンポーネント構造 技術スタック { } " } d e " " " " " " p n r n n t @ e e e e e a t n x a x x i a d t c t t l i e " t - - w l n : " i t i w c : n h n i i " t e d n e ^ " l m c d s 1 ^ " e s c " 5 1 : s s s : . 9 " " s 4 . " : : / { . 1 ^ t 4 . 4 " " y " 0 . ^ ^ p , " 3 0 4 o , . . . g 4 4 1 r " . . a , 6 1 p " 1 h , " y , " : " ^ 0 . 5 . 1 6 " プロジェクト構造 s ├ │ │ │ │ │ │ │ ├ │ │ │ │ │ │ │ ├ │ └ r ─ ─ ─ ─ c ─ ─ ─ ─ / a ├ │ │ │ │ ├ └ c ├ │ │ │ │ │ └ i └ m ├ └ p ─ ─ ─ o ─ ─ 1 ─ e ─ ─ p ─ ─ ─ m ─ ─ 8 ─ s ─ ─ / p n s [ ├ ├ ├ └ i s o l ├ ├ ├ ├ └ p / r a e j l ─ ─ ─ ─ c i n a ─ ─ ─ ─ ─ a o g n a o ─ ─ ─ ─ o t e y ─ ─ ─ ─ ─ g u e . . c n e n o e t s j j a l p a e . m t u H F P T T i / s s l a a b x s a s t e o a o n o o e y g o a v p / a o g g g g n n ] e u m g . d t e g g . u . t p t e e L l l t t t / l s r r a e e s . s e . . y T L t x / t t o h a s s s u e n x x x t m g . e u t . a s t g x s e x . # # # t # # # # # # # s フ サ レ x ペ i 翻 ル ホ A サ ァ イ イ ー 1 訳 ー ー b ン ビ ト ア ジ 8 フ ト ム o プ コ マ ウ 固 n ァ レ ペ u ル ン ッ ト 有 設 イ イ ー t ペ プ コ コ 定 ル ア ジ ペ ー 生 ン ン ウ ー ジ 成 ポ ポ ト ジ ー ー ネ ネ ン ン ト ト 特徴的な実装 1. sitemap.ts の静的エクスポート対応 e e e } x x x p p p o o r r r t t t 実 装 c c d o o e n n f s s a t t u l d r t y e n v f a a u m l n i i c c d t a i = t o e n ' f = s o i r f t c a e e l m - s a s e p t ; ( a ) t : i c M ' e ; t a d a t a R o u t e . S i t e m a p { 2. 統一されたページレイアウト < P / a b t d < P g r i e Y a e e t s o g L a l c u e a d e r r L y c = i C a o r { p o y u u t t n o t m ( i t u b ' o e t I t n n > t i = t e t { m l t s e ( = ' ' { ) d b } e r s e c a r d i c p r t u i m o b n I ' t ) e } m s } 3. 環境変数による設定 # N N E E . X X e T T n _ _ v P P . U U e B B x L L a I I m C C p _ _ l S B e I A T S E E _ _ U P R A L T = H h = t t p : / / l o c a l h o s t : 3 0 0 0 使い方 インストール g c n i d p t m n c e i l x n o t s n j t e s a - l [ i l r 1 e 8 p n o - s t i h t e o m r e y s - - u s r s l g ] - t e m p l a t e 開発 n p m r u n d e v ビルド n p m r u n b u i l d カスタマイズポイント 言語追加 : src/i18n/routing.tsとmessages/ディレクトリ ページ追加 : src/app/[locale]/配下に新規ディレクトリ テーマカスタマイズ : tailwind.config.jsとグローバルCSS メタデータ : 各ページのgenerateMetadata関数 ベストプラクティス コンポーネント命名 : PascalCaseを使用 翻訳キー : ネストした構造で整理 型安全性 : TypeScriptの型を最大限活用 パフォーマンス : 静的生成を活用したキャッシュ戦略 まとめ 国際化対応とダークモード機能を標準装備し、SEOに最適化された静的サイトを素早く構築できるよう目指しています。開発者の生産性を向上させながら、エンドユーザーに優れた体験を提供していきたいと思います。 ...

2025年7月26日 · 5 分 · Nakamura

Next.js 15 で output: 'export' 使用時の sitemap.ts 実装方法

この記事は人間が実装を確認したのち、AIが記事を執筆しました。 背景 Next.js 15で静的サイト生成(output: 'export')を使用する際、sitemap.tsの実装でエラーが発生する場合があります。 E r r o r : e x p o r t c o n s t d y n a m i c = " f o r c e - s t a t i c " / e x p o r t c o n s t r e v a l i d a t e n o t c o n f i g u r e d o n r o u t e " / s i t e m a p . x m l " w i t h " o u t p u t : e x p o r t " . 解決方法 この問題は、sitemap.tsに以下の2つのエクスポートを追加することで解決できます: ...

2025年7月26日 · 5 分 · Nakamura

IIIF認証API 2.0の動作確認

概要 以下のIIIF認証API 2.0の動作確認を行う機会がありましたので、備忘録です。 https://iiif.io/api/auth/2.0/ 以下のようなデモサイトを作成しました。 https://iiif-auth-nextjs.vercel.app/ja リポジトリは以下です。 https://github.com/nakamura196/iiif-auth-nextjs 以下、AIによる説明です。なお、Miradorではうまく動作させることができなかったため、今後の課題です。 概要 本記事では、IIIF Authentication API 2.0 の認証フローを、実際のHTTPリクエスト/レスポンスのレベルで詳細に解説します。各ステップでどのようなリクエストが送信され、どのようなレスポンスが返されるのかを追跡していきます。 アーキテクチャ概要 ┌ │ │ └ ─ ─ ─ ─ ─ ( ─ ─ C B ─ ─ l r ─ ─ i o ─ ─ e w ─ ─ n s ─ ─ t e ─ ─ r ─ ─ ) ─ ─ ─ ─ ─ ┐ │ │ ┘ ─ ◀ ─ ─ ─ ─ ─ ─ ▶ ─ ┌ │ │ └ ─ ─ ─ I ─ ─ I ─ ─ I ─ ─ F ─ ─ ─ ─ S ─ ─ e ─ ─ r ─ ─ v ─ ─ e ─ ─ r ─ ─ ─ ┐ │ │ ┘ ─ ◀ ─ ─ ─ ─ ─ ─ ▶ ─ ┌ │ │ └ ─ A ─ ─ u ─ ─ t ─ ─ h ─ ─ ─ ─ S ─ ─ e ─ ─ r ─ ─ v ─ ─ i ─ ─ c ─ ─ e ─ ─ ─ ┐ │ │ ┘ 認証フローの詳細 Step 1: 初回の画像情報リクエスト(未認証) リクエスト: ...

2025年7月25日 · 52 分 · Nakamura

GitHub File History Analyzerの紹介:ファイル編集履歴をAIで分析するツール

本記事はAIが作成しました。 はじめに GitHubリポジトリで管理されているファイルの編集履歴を分析したいと思ったことはありませんか?特に長期間にわたって更新されているファイルの変更パターンや、プロジェクトの進化の過程を理解したい場合があります。 GitHub File History Analyzerは、このようなニーズに応えるために開発したコマンドラインツールです。 ツールの概要 このツールは以下の機能を提供します: GitHubのAPIを使用して特定ファイルのコミット履歴を取得 変更内容の統計的な分析(追加・削除行数、変更タイプの分類など) OpenRouter経由でAI(Gemini 2.5 Proなど)による編集パターンの分析 分析結果のMarkdown/JSON形式での出力 開発の背景 デジタルアーカイブプロジェクトで、XMLファイルの長期的な編集作業を追跡する必要がありました。単純なgit logでは得られない、より深い洞察(編集の傾向、作業の質、進捗状況など)を得たいという要求から、このツールの開発に至りました。 技術的な実装 使用技術 言語 : Python 3.8+ 主要ライブラリ : PyGithub(GitHub API wrapper) requests(HTTP通信) python-dotenv(環境変数管理) アーキテクチャ ツールは主に2つのコンポーネントで構成されています: GitHubFileHistoryAnalyzer : GitHub APIを使用してファイル履歴を取得・分析 OpenRouterClient : AI分析のためのクライアント # a c a p n o n r 基 a m a o 本 l m l m 的 y i y p な z t s t 使 e s i 用 r s = 例 = = = a a n G n a a i a n l t l a y H y l z u z y e b e z r F r e . i . r g l g . e e e a n H t n e i _ a r s f l a t i y t o l z e r e e _ y _ _ a A h p i n i a _ a s t p l t c r y o h o z r e m e y s p r ( ( t ( " c ( g o o c i w m o t n m m h e i m u r t i b / s t _ r ) s t e , o p k o a e " n n , a ) l " y p s a i t s h ) / t o / f i l e . x m l " ) 実際の使用例 基本的なコマンド # p # p # p y y y フ t A t 結 t ァ h I h 果 h イ o 分 o を o ル n 析 n M n 履 の a 歴 m 実 m r m の a 行 a k a 取 i i d i 得 n n o n と . . w . 表 p p n p 示 y y 形 y 式 で - - 保 - r r 存 a e e n p p a o o l y o o z w w e n n e e r r - / / a r r i e e - p p o o o u t p - - u f f t i i l l a e e n a p p l a a y t t s h h i / / s t t . o o m / / d f f i i l l e e . . p p y y - a n a l y z e 分析結果の例 ツールは以下のような情報を提供します: ...

2025年7月24日 · 4 分 · Nakamura

Odeuropaに関連するツールを試す

概要 Odeuropaに関連するツールを試す機会がありましたので、備忘録です。 Odeuropaとは 以下のページに説明があります。 https://odeuropa.eu/ 以下、機械翻訳の結果です。 Odeuropa(オドゥーロパ)は、ヨーロッパの「匂いの文化遺産」を研究するEU資金による革新的なプロジェクトです。 プロジェクトの目的: 1600年から1920年までのヨーロッパの歴史において、匂いが文化にどのような役割を果たしてきたかを調査・記録することです。最新のAI技術を使って、約4万3千点の画像と16万7千点の歴史的テキスト(英語、イタリア語、フランス語、オランダ語、ドイツ語、スロベニア語)から匂いに関する情報を抽出しています。 主な成果物: 匂い探索エンジン - 300年以上のヨーロッパの匂いの歴史を検索できるユニークなウェブサイト 匂いの歴史・遺産百科事典 - 専門家が執筆した匂いに関する文化的現象のオンライン参考書 嗅覚ストーリーテリング・ツールキット - 博物館や文化遺産機関が匂いを展示に活用するための実践ガイド 遺産匂いライブラリー - 歴史的に重要な匂いを調香師と協力して再現し、保存するコレクション このプロジェクトは、従来の視覚や聴覚中心の文化遺産の理解に、「嗅覚」という新しい次元を加えることで、より豊かで多感覚的な歴史体験を可能にしています。 ツール 以下のページで、関連する幾つかのツールが紹介されています。 https://odeuropa.eu/nosebooks/ Live Image Processing Demo 国立国会図書館の「近代日本人の肖像」で公開されている以下の画像を利用しました。 https://www.ndl.go.jp/portrait/datas/224 以下にアクセスし、画像のURLを指定します。 https://huggingface.co/spaces/mathiaszinnen/odeuropa-demo https://www.ndl.go.jp/portrait/img/portrait/0224_6.jpg 「Confidence Threshold」を0.2に設定した結果は以下です。手に持っているタバコを認識できているようでした。 Smells Extraction テキストから匂いを抽出するツールのようです。 https://smell-extractor.tools.eurecom.fr/ 匂いに関する記述を含む英語のサンプルテキストをAIに作成してもらいました。 A T s h i I s w m a o l r k n e i d n g p a s s t t a r t t h e e d b d a i k f e f r e y r , e n t t h l e y w t a h r o m u g a h r . o m T a h e o f r i f c r h e , s h n l u y t t b y a k a e r d o m b a r e o a f d f a r n e d s h c l i y n n g a r m o o u n n d r o c l o l f s f e w e a f b t e e a d n s t h p r e o r u m g e h a t t e h d e t a h i e r , k i m t a c k h i e n n g , m i y t s m o b u i t t h t e w r a - t s e w r e e i t n s s t c a e n n t t l y p . r o L m a i t s e i r n g t h t a h t e a p f e t r e f r e n c o t o n s , t a w r h t e n t o I m s y t e d p a p y e . d I o t u t w s a i s d e s u a c f h t e a r c t o h n e t r s a u s m t m e t r o s y t e o s r t m e , r d t a h y e e p v e e t n r i i n c g h o w r h e f n i l I l e h d a d m y w a n n o d s e t r r e i d l s t h - r o t u h g a h t t d h i e s t g i a n r c d t e i n v , e w e h a e r r t e h y t h s e c e h n e t a d o y f p r e a r i f n u m o e n o d f r y j a s s o m i i l n e m i b x l i o n s g s o w m i s t h h u t n h g e h s e w a e v e y t i f n r a t g h r e a n a c i e r , o f i n w t e e t r m g i r n a g s l s i . n g I t w i r t e h m i t n h d e e d s h m a e r p o , f g m r y e e v n i s s i m t e l t l o o t f h e f r o e l s d h l l y i b c r u a t r y g r l a a s s s t a w n e d e k t , h e w h s e u r b e t l t e h e s w m e u e s t t n y e s s s m e o l f l r o o f s e a s g . e d N o p t a h p i e n r g a c n o d u l l d e a h t a h v e e r - p b r o e u p n a d r e b d o o m k e s f h o a r d t g o r d e a e y t ' e s d t m r e i p a s t o I t e h n e t e s r e e a d f , o o a d c c m o a m r p k a e n t i , e d h o b w y e v h e i r n , t s w h o e f r e v a t n h i e l l p a u n a g n e d n t a l o m d o o n r d o f f r o f m i s t h h e a n d d e c b o r m i p n o e s i a n s g s a l u i l g t n e i d n m i y n s t e h n e s e y s e l a l s o w I i n n g a v p i a g g a e t s e . d t h r o u g h t h e c r o w d e d s t a l l s , t h e s a l t y t a n g o f t h e o c e a n m i x i n g w i t h t h e m e t a l l i c s c e n t o f i c e a n d s e a f o o d . これを登録した結果が以下です。匂いに関する「Location」「Quality」「Smell Word」などが検出されていました。 ...

2025年7月24日 · 17 分 · Nakamura

AllegroGraphを使ってみる

概要 AllegroGraphを使ってみる機会がありましたので、備忘録です。 https://allegrograph.com/ 使い方 いくつかのセットアップ方法があるようですが、以下のクラウド版を利用してみます。 https://allegrograph.cloud/ セットアップ後、以下のように表示されます。 ログイン後、複数のRepositoriesが表示されます。 匿名アクセスを可能にする 例えば、リポジトリ「actors」のSPARQLエンドポイントは以下です。 https://ag1edt2www58hzzy.allegrograph.cloud/repositories/actors/sparql デフォルトでは、Basic認証がかかります。 そこで、anonymousユーザを作成します。ユーザ名を「anonymous」にすることで、パスワードの入力をスキップできました。 公式の説明は以下に記載があります。 https://franz.com/agraph/support/documentation/managing-users.html#anonymous-access そして、「actors」リポジトリへのREADを許可します。 この設定により、指定したリポジトリへ認証なしでアクセスできるようになります。以下は、yasguiでアクセスした例です。 https://yasgui.org/#query=PREFIX+rdf%3A+<http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23> PREFIX+rdfs%3A+<http%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23> SELECT+*+WHERE+{ ++%3Fsub+%3Fpred+%3Fobj+. }+ LIMIT+10&contentTypeConstruct=text%2Fturtle&contentTypeSelect=application%2Fsparql-results%2Bjson&endpoint=https%3A%2F%2Fag1edt2www58hzzy.allegrograph.cloud%2Frepositories%2Factors%2Fsparql&requestMethod=POST&tabTitle=Query&headers={}&outputFormat=table リポジトリを追加してみる 「my_first_repository」というリポジトリを追加しました。RDFファイルを登録してみます。 校異源氏物語テキストDBで使用している以下のRDFファイルを登録してみます。 https://github.com/kouigenjimonogatari/kouigenjimonogatari.github.io/blob/master/files/rdf/item_sets.rdf 登録時に、Graph URIを任意項目として登録することができます。入力例にしたがって、以下のように入力しました。 エクスポートする 「Repository Control」の「Archiving」からエクスポートできます。 「N-Quads」を選択して、エクスポートした結果が以下です。トリプルに加えて、先ほど登録したGraph URIが出力されていることが確認できます。 < < < < h h h h t t t t t t t t p p p p s s s s : : : : / / w w w w 3 3 3 3 i i i i d d d d . . . . o o o o r r r r g g g g / / / / k k k k o o o o u u u u i i i i g g g g e e e e n n n n j j j j i i i i m m m m o o o o n n n n o o o o g g g g a a a a t t t t a a a a r r r r i i i i / / / / a a a a p p p p i i i i / / / / i i i i t t t t e e e e m m m m _ _ _ _ s s s s e e e e t t t t s s s s / / / / 3 3 3 3 1 1 1 1 . . . . j j j j s s s s o o o o n n n n > > > > < < < < h h h h t t t t t t t t p p p p : : s : / : / w p w w u w w w r 3 w . l i . w . d w 3 o . 3 . r o . o g r o r / g r g d / g / c k 1 / 2 9 t u 0 9 e i 0 9 r g 0 / m e / 0 s n 0 2 j 1 r i / 2 e m r 2 l o d - a n f r t o - d i g s f o a c - n t h s > a e y r m n < i a t h / # a t a l x t p a - p i b n s / e s : p l # / r > t / o y w p " p 3 e ま e i r き > d t は . y し < o / ら h r v " t g t l < p k > h s o t : u " t / i 3 p / g 1 : j e " / p n / s j e e i < x a m h a r o t m c n t p h o p l . g : e g a / . o t o . a w r j r w g p i w > / / . t t w e e 3 r i . m o 3 r t 1 g y . / p x 2 e m 0 / l 0 作 > 1 品 / > < X h M < t L h t S t p c t : h p / e : m e a / x # e a i x m n a p t m l e p e g l . e e o r . r > o g r > < g h > t t p : / / e x a m p l e . o r g > SHACL Shapesを管理する Generate SHACL Shapesボタンを押すと、SHACLファイルが作成されます。 ...

2025年7月16日 · 10 分 · Nakamura

DHConvalidatorにおける'ref'に関する不具合への対応

本記事は、一部AIが執筆しました。 概要 DHConvalidatorは、デジタル人文学(DH)会議の抄録を一貫したTEI(Text Encoding Initiative)テキストベースに変換するためのツールです。 https://github.com/ADHO/dhconvalidator このツールの利用において、Microsoft Word形式(DOCX)からTEI XML形式への変換処理中に以下のようなエラーが発生するケースがありました: E R R O R : n u . x o m . P a r s i n g E x c e p t i o n : c v c - c o m p l e x - t y p e . 2 . 4 . a : I n v a l i d c o n t e n t w a s f o u n d s t a r t i n g w i t h e l e m e n t ' r e f ' この原因と対処方法について共有します。 ...

2025年6月27日 · 22 分 · Nakamura

校異源氏物語テキストDBに対する検索を行うMCPサーバの構築

概要 校異源氏物語テキストDBに対する検索を行うMCPサーバの構築を行ったので、備忘録です。 一例として、Claude Desktopから以下のように使用することができます。 https://youtu.be/8s2R9V2hEvc?si=p9SW-IvhdNSzwTLN 背景 以下の記事で、校異源氏物語テキストDBに対する検索を行うAPIサーバの構築について紹介しました。 この応用として、MCPサーバを構築することで、AIエージェントとのやりとりを試してみます。 単純なものですが、GitHubのリポジトリは以下です。 https://github.com/nakamura196/genji-mcp-server 開発にあたっては、先述したAPIサーバで提供するOpenAPIの仕様をClaude Codeに渡すことで、テンプレートから効率機に開発してくれました。 なおswagger.jsonには、以下でアクセスいただけます。 https://genji-api.aws.ldas.jp/swagger.json 使い方 npmパッケージを以下で公開しています。 https://www.npmjs.com/package/@nakamura196/genji-mcp-server そこで、以下のような設定ファイルを作成して、Claude Desktopを再起動します。 { } " } m c " } p g S e " " e n c a r j o r v i m g e " m s r : a " s n : " { d : " [ : " { - " y n " p , x " " , @ n a k a m u r a 1 9 6 / g e n j i - m c p - s e r v e r " ] 利用例 「夕顔が含まれる巻は?」などと入力すると、以下のように外部連携を使用するための許可が求められます。許可すると、問い合わせ結果に基づき、AIが回答を作成してくれます。 ...

2025年6月26日 · 1 分 · Nakamura

校異源氏物語テキストDBに対する検索を行うAPIサーバの構築

概要 校異源氏物語テキストDBに対する検索を行うAPIサーバの構築したので、備忘録です。 https://genji-api.aws.ldas.jp/ 背景 以下のページで、『校異源氏物語』のテキストデータをTEI/XMLに準拠した形で公開しています。 https://kouigenjimonogatari.github.io/ このテキストデータをElasticsearchに登録し、コマごとの検索を可能にするAPIを作成します。 使い方 以下のURLで、OpenAPIおよびSwaggerを用いた使い方の説明ページにアクセスできます。 https://genji-api.aws.ldas.jp/ 工夫点 検索語の展開 例えば以下のURLは、「夕顔」を検索キーワードとした例です。JSON:APIに準拠した入出力形式としています。 https://genji-api.aws.ldas.jp/search?q=夕顔&page[limit]=20&page[offset]=0&sort=page&filter[expandRepeatMarks]=true&filter[unifyKanjiKana]=true&filter[unifyHistoricalKana]=true&filter[unifyPhoneticChanges]=true&filter[unifyDakuon]=true&filter[vol_str]=04 夕顔 この時、以下のような結果が返却されます。入力したキーワード「夕顔」に対して、バリエーションを生成し、これらに基づく検索を行います。 { } " " } d m a e " " ] " } " } " " " " " } t t q t , t , f , s l o t a a a u r " " " " " " " " " r " " " " " i " " " " " " o i f o g " } " " e a 夕 ゆ ゆ ゆ ゆ 夕 夕 ゆ ゆ a e u u u u l e u u u u v r m f t g v : : r n 顔 う ふ ふ う か か う ふ n x n n n n t x n n n n o t i s a r o " " " ] y s " か か か か お ほ 顔 顔 s p i i i i e p i i i i l " t e l e l d s b [ { " f , お お ほ ほ " " " " f a f f f f r a f f f f _ : " t " g _ o u u { } ] : o " " " " , , , o n y y y y s n y y y y s : " : a s c m c , r , , , , r d K H P D " d K H P D t " : t t _ _ k " " " m m R a i h a : R a i h a r p 2 7 i r c o e k d 夕 e O e n s o k e n s o k " a 0 0 , o " o t t e o 顔 d p p j t n u { p j t n u : g , , n : u h s y c " Q t e i o e o e i o e o e s n e " " _ , u i a K r t n a K r t n " " " { t r : : c e o t a i i " t a i i " 0 , : _ _ o r n M n c c : M n c c : 4 e d [ " u i s a a a C a a a C { r o 0 n e " r " l h t r " l h t 夕 r c 4 t s : k : K a r k : K a r 顔 o _ " " s a n u s a n u " r c 夕 : : { " t n g e " t n g e _ o 顔 : r a e : r a e , u u " 7 [ u " s u " s p n , t e : " t e : " p t r , : r , : e " u t u t r : e r t e r t _ , u r , u r b 0 e u e u o , , e , e u , , n d " : 0 , その結果、本文中に登場する「ゆふかほ」「夕かほ」「夕顔」を一度に検索することができます。 ...

2025年6月25日 · 23 分 · Nakamura

Minecraft Modでお城生成コマンドを作ってみた【Fabric 1.21 + Claude活用】

※ 本記事の大部分はAIが執筆しました。 はじめに Minecraft Modの学習を目的として、コマンド一つでお城を生成できるModを作ってみました。 開発環境 今回使用した技術スタック: Minecraft : 1.21 Modding Framework : Fabric Mod Java : 21 開発環境 : Cursor(AI統合エディタ) AI支援 : Claude 4 Sonnet 環境構築 Java 21のインストールが必要だったので、Homebrewで導入: b r e w i n s t a l l o p e n j d k @ 2 1 プロジェクトの初期化は、Fabricの公式テンプレートをクローン: g i t c l o n e h t t p s : / / g i t h u b . c o m / F a b r i c M C / f a b r i c - e x a m p l e - m o d . g i t c a s t l e - m o d C r r r r R R l e e e e e e o m m m m c s n o o o o e o i t t t t i l n e e e e v v g : : : : i i n n i E C C T g g n n o o o t u u m t o d o m n p a b e e t r l j l ' r i e e t c a n s 9 c a a t g s 3 t s s i i 0 s : t n o n : l g b g ( 1 e j d 1 0 - o e o e 0 0 m b c b l 0 % o j t j t % d e s e a ( ' c : c ( 4 . t t 3 9 0 . s 1 s 3 3 4 . : 0 : ) 0 0 , 4 9 % 1 9 0 3 0 r 3 4 0 ( 0 e 0 ) , 4 % u ) , 7 s , d ( e d 4 3 d 5 o n 7 0 8 n e ) / 1 8 e . , 3 7 . . 0 7 d ) ( 7 o , d n e K e d l i . o t B n a e | . 1 7 1 ) 0 , . 5 p 1 a c M k i - B r / e s u , s e d d o n 8 e 8 . 3 ( f r o m 3 ) その後、Cursorで開発環境を起動: ...

2025年6月16日 · 4 分 · Nakamura

デジタル文化財管理システム(試行版)のNFT対応

お知らせ: 2025-06-14 開発の経過は以下にまとめています。 https://zenn.dev/nakamura196/books/41693d2d017082 概要 以下の記事をはじめとして、ブロックチェーンを用いたデジタル文化財管理システムの試作をしています。 今回、アップロードしたデータがNFTとして認識されるように改修しました。 勉強過程のため、不完全な点があるかと思いますが、参考になりましたら幸いです。 使い方ページ ファイルのアップロード方法はこれまでと同様です。アップロード後に表示される一覧ページにおいて、詳細ページへのリンクを追加しました。 リンクをクリックすると、以下のような詳細画面に遷移します。 実装方法 ※ この章は、AIが執筆しました。 1. コントラクトのNFT対応 既存のデジタル文化財管理コントラクトを、ERC721規格に準拠したNFTコントラクトに改修しました。 主な変更点: 1. OpenZeppelinライブラリの追加 i i m m p p o o r r t t " " @ @ o o p p e e n n z z e e p p p p e e l l i i n n / / c c o o n n t t r r a a c c t t s s - - u u p p g g r r a a d d e e a a b b l l e e / / t t o o k k e e n n / / E E R R C C 7 7 2 2 1 1 / / E e R x C t 7 e 2 n 1 s U i p o g n r s a / d E e R a C b 7 l 2 e 1 . U s R o I l S " t ; o r a g e U p g r a d e a b l e . s o l " ; 2. コントラクトの継承構造を変更 ...

2025年6月12日 · 9 分 · Nakamura

ブロックチェーンとPinata IPFSを使用したデジタル文化財管理システムの試作

お知らせ: 2025-06-14 開発の経過は以下にまとめています。 https://zenn.dev/nakamura196/books/41693d2d017082 概要 ブロックチェーンの学習にあたり、デジタル文化財の管理システムのプロトタイプを作成しました。ブロックチェーンの学習が目的のため、不足している機能などが多いですが、今後追加・改修を加えていく予定です。 https://digital-heritage-five.vercel.app/ 使用技術 EthereumのSepoliaネットワークを使用しています。ブロックチェーンの学習およびプロトタイプの開発が目的であるため、テストネットワークを使用します。 分散ファイルストレージIPFSのホスティングサービスとして、Pinataを使用しています。 https://pinata.cloud/ 準備 後述する本サイトの使用にあたり、MetaMaskのウォレットの作成や、ETHのSepoliaテストネットの作成などが必要です。また登録にあたっては、ガス代の支払いに必要なSepoliaETHが一定数必要です。 これらの方法については、別の記事で紹介したいと思いますが、インターネット上の記事を参考にしてください。 使い方 以下のURLにアクセスします。 https://digital-heritage-five.vercel.app/ MetaMaskがインストール済みの場合、以下のように表示されます。 「ウォレットを接続」ボタンを押すと、以下の画面が表示されます。 接続後、以下のような画面が表示されます。 サンプルとして、いらすとやさんの画像を利用させていただきます。 https://www.irasutoya.com/2020/12/blog-post_279.html 名前や説明、画像URLを入力して、登録ボタンを押します。 以下の画面が表示されます。確認ボタンを押します。 以下のようにデータが登録されます。 Transactionの確認 Etherscanを使って、取引の内容を確認することができます。 https://sepolia.etherscan.io/tx/0x1234567890abcdef…(例) Input Dataに入力されている文字列は、「スマートコントラクトの関数呼び出しのエンコードされたデータ」とのことです。以下の関数でデコードしてみます。 c c f } d o o u e n n n t } } c s デ s イ c r デ o t コ t ン t y c c c c c c c c c c c c コ d ー プ i o o o o o o o o o o a o ー e e ド i ッ o { n n n n n n n n n n t n ド I t す n ト n 関 s s パ s デ s パ s デ s 結 s s s s c s を n h る p デ 数 t o ラ t コ t ラ t ー t 果 o o o o h o 実 p e イ u ー d シ l メ ー メ タ を l l l l l 行 u r ン t タ e グ f e ー p ダ d ー t を d 表 e e e e ( e t s プ D を c ネ u . タ a ー e タ y デ e 示 . . . . e . ( ッ a デ o チ n l デ r を c の p コ c l l l l r e i = ト t コ d ャ c o ー a 作 o 型 e ー o o o o o r r n デ a ー e を t g タ m 成 d を s ド d g g g g o r p r ー ド I 取 i ( を s e 定 e ( ( ( ( r o u e タ = n 得 o ' 取 D r 義 = d ' ' ' ' ) r t q p n F 得 a \ N D I ( D u ' u S u ( t = [ = n a e m { ' a i 0 t i n 最 a ' D m s a デ t r x ( g c 初 n s d e e c g コ a e b i n t の = e t e c : r e ー ) ( 2 n a i 4 w r c o ' i ド ; ' f p t o バ ' i o d , p U エ e 2 u u n イ 0 e n d e t R ラ t 6 t r ト x t g e d d i L ー h 2 ) e S を ' h ' r e o : : e e i 除 e , . P c n ' ' r 4 { = g く + r d a o : , , s . n ) s ' e r d ' ' . i a i . s c a e , d e ) . n t n A t o m d e r ; ( p u p b r d e [ d c r 実 u r u i i e t 0 e o o 際 t e t C n ( e ] c d r の . : . o g t r ) o e ) 登 s ' s d ' y s ; d d ; 録 l , l e , p : e [ デ i i r e ' d 2 ー c f c ( ' s ) [ ] タ e u e ) s , ; 1 ) の ( n ( ; t ] ; 例 0 c 1 r p ) ) , t 0 i a ; ' i ) n r ; 1 o ; g a 0 n ' m ) S ] s ; i ; D g a n t a a t ) u ; r e ) ; 結果、以下のように確認することができました。 ...

2025年6月12日 · 5 分 · Nakamura