DIGITAL ARCHIVE TECH BLOG

デジタルアーカイブシステムの技術ブログ

デジタルアーカイブ・デジタルヒューマニティーズ・ソフトウェア開発に関する記事を発信しています

最新の記事

すべて見る →

IIIF 3D Viewer を Presentation API 4 に対応させる — 既存マニフェストの v4 変換器

IIIF 3D Viewer を IIIF 3D Technical Specification Group が公開している Presentation API 4 のドラフト形式 (Scene / PointSelector / WKTSelector / PerspectiveCamera) に揃えました。Presentation 3 + 独自 3DSelector / camPos 拡張で運用してきた既存マニフェストは、ランタイムで v4 に変換する converter を通すことで処理系全体を v4 のみに統一しています。差分の整理、変換ルール、実装の要点をまとめます。

iiif3dpresentation-apiweb-annotation

TEI/XMLの翻刻データから統計ページをCI/CDで自動更新する — 『校異源氏物語』テキストDBの事例

TEI/XMLで構造化された翻刻テキストから、巻ごとのページ数・行数・文字数・和歌数を集計する統計ページを生成し、GitHub Actionsで再ビルド・再公開まで自動化する仕組みを紹介します。

teixmldhgithub-actions

東北大学デジタルアーカイブの公開 API 調査 — OAI-PMH 経由で setSpec ごとに Excel 出力する

東北大学デジタルアーカイブ(touda.tohoku.ac.jp/collection)で利用できる公開 API を調査し、OAI-PMH を使って setSpec 単位でメタデータを取得し Excel に出力する手順を整理しました。

oaipmhiiifpythonopenpyxl

📥researchmap業績登録の選択肢整理と、個人ユーザー向けPlaywright実装

researchmapには公式の書き込みAPIとCSV/JSON/JSONLインポート機能が用意されていますが、個人ユーザーから見るとそれぞれ制約があります。本記事では選択肢を整理した上で、完全自動化とPDF添付に対応するPlaywrightスクリプトの実装を紹介します。

researchmapplaywrightpythonautomation

YAML設定で運用するNext.js管理コンソール — 複数サイト・複数アクションの一元化

複数のWebサイトに対する複数のオペレーション(デプロイ・再インデックス・バックアップ等)を、YAML 1ファイルで定義し、非エンジニアの作業者がブラウザから実行できる管理コンソールの設計を整理しました。

nextjscloudflaregithub-appyaml

GitHub App と Cloudflare Access で構築する組織向け管理コンソール

複数のデータベースサイトを運用する組織で、非エンジニアの作業者がデプロイ・データ更新を自分でトリガーできる管理コンソールを構築した記録です。GitHub App認証とCloudflare Access (Zero Trust) を組み合わせ、PATやOAuth Appとは何が違うのかを整理しました。

githubgithub-appcloudflarecloudflare-access

Drupal の Automatic Updates が動かない: `Unattended background updates` がデフォルトで無効になっている話

Drupal の Automatic Updates モジュールを入れていればセキュリティ更新が自動で当たると思い込んでいたら、cron 中の自動適用ポリシー Unattended background updates がデフォルトで無効になっていて何もしていませんでした。有効化して 10.6.3 から 10.6.7 への自動適用が動き出すまでと、その際に出る『公式サポート対象外』警告についての記録です。

drupalautomatic-updatessecuritycron

ElevenLabs v2 と v3 の日本語朗読品質比較 — 自分の声を学習させた合成音声による A/B 検証

ElevenLabs の Voice Cloning と v3 モデルを使い、自分の声を学習させた合成音声で日本語の技術記事を朗読させる実験を行いました。同一原稿で v2 / v3 を比較した A/B サンプルと、運用上の観察を記録します。

elevenlabsvoice-cloningpodcastyoutube

Mirador (4.0.0) の Annotations タブに OCR が出ない — supplementing motivation の落とし穴

IIIF Presentation 3 で OCR テキストを `motivation: "supplementing"` のアノテーションとして配信したら、Annona など他の viewer では出るのに Mirador 4.0.0 (projectmirador.org/embed) の Annotations タブだけ空、という現象に遭遇しました。実際に配信されている Mirador bundle を読み解いた結果、`config.annotations.filteredMotivations` のリリース版デフォルトが `['oa:commenting', 'oa:tagging', 'sc:painting', 'commenting', 'tagging']` で `supplementing` を許可していないことが判明しました。`['commenting', 'supplementing']` の配列で両対応する方法と、関連する仕様・Cookbook recipe の正しい参照を整理します。

iiifmiradorannotationpresentation-api

アクセス制御付き IIIF デジタルアーカイブの構築 — Cloudflare Access で守る Cantaloupe + S3 + Elasticsearch + Next.js

未公開 / 限定公開の歴史写真を、IIIF 規格に準拠した形でアクセス制御付きで配信するアーカイブシステムの構築記録。Cantaloupe(IIIF サーバ)+ S3 互換ストレージ + Elasticsearch(検索)+ Next.js(UI)+ Cloudflare Tunnel + Access という構成で、一般公開できない画像であっても IIIF の利点(規格準拠の高解像度ビューア / manifest 配信)を許可されたメンバー範囲内で享受できる仕組みを設計しました。外部システムからの相互運用には IIIF Auth API 2.0 への拡張が必要となる点も整理しています。

iiifcantaloupeelasticsearchnextjs

📅調整さんの出欠回答を Playwright で自動入力し、Claude Code 経由の Google Calendar MCP で判定する構成

調整さん(chouseisan.com)の出欠回答を Playwright で自動入力し、◯/△/× の判定は Google カレンダーと照合して Claude Code(claude.ai Google Calendar MCP 経由)に任せる構成を作成した記録です。fetch / fill / submit の3段階に分け、判定ルールは CLAUDE.md に記述する形にしました。

playwrightclaude-codemcpgoogle-calendar

NDL古典籍OCR-LiteとCloud Vision APIの出力差 — 酉蓮社所蔵嘉興版大蔵経『大般若経』105画像での観測

酉蓮社(旧増上寺報恩蔵)所蔵の嘉興版大蔵経のうち『大般若波羅蜜多經』巻571〜575(IIIF経由で取得した105画像)に対して、国立国会図書館のNDL古典籍OCR-Liteと Cloud Vision API DOCUMENT_TEXT_DETECTION を並べて適用し、それぞれの出力に現れた誤りの傾向を観測した記録です。NDLは仮名混入の誤検出が12頁、VisionはカラースケールやIIIF添付要素(蔵書ラベル等)の混入が105頁全てで発生しました。

ocrndl-koten-ocrgoogle-vision-apiiiif