本記事は生成AIと共同で執筆しています。事実関係は可能な範囲で公式ドキュメント等と照合していますが、誤りが含まれている可能性があります。重要な判断を行う前にご自身でも一次情報をご確認ください。

国立国会図書館(NDL)の電子展示会「錦絵と写真でめぐる日本の名所」は、全国の名所を描いた江戸時代の錦絵や、明治・大正期の写真を、地図とともに紹介するコンテンツです。この展示会で扱われている「名所」と、それぞれに紐づく画像の一覧を、地図データとして扱える形(GeoJSON / CSV / IIIF)に整理し、独立したデータセットとして公開しました。

念のため位置づけを明確にしておくと、名所の選定・画像・解説といった内容そのものは国立国会図書館によるものです。本記事で扱うのは、それを新たに作り起こしたものではなく、公開されている Web ページ(HTML に埋め込まれたデータ)と各資料の IIIF マニフェストから機械的に抽出し、データセット形式へ変換・整形した非公式の二次データセットです。国立国会図書館が作成・提供・公認したものではありません。座標・分類・ファイル構造などの編纂部分をこちらで付加しています。

成果物

名所 534 件(すべて緯度経度あり)、画像 4155 点(うちパブリックドメイン 3885 点)、書物単位の関連資料 373 件を収録しています。編纂したデータ(座標・分類・構造)は CC BY 4.0 で、画像は各レコードに権利表示を付けています。

GitHub 上でのデータセット。GeoJSON を開くと名所がクラスタ表示された地図がそのまま描画される

GeoJSON(Geographic JSON、地理データの JSON 形式)は GitHub 上でそのまま地図として表示され、CSV は表としてプレビューされます。ダウンロードせずに中身を確認できます。

公式のダウンロード手段が見当たらなかった

この展示会のページには、調査した限りではデータの一括ダウンロードや API(Application Programming Interface)は用意されていないようでした。一方で、ページは Nuxt(Vue.js 系のフレームワーク)で作られた静的サイトで、各名所ページの HTML には表示に必要な構造化データ(座標・画像リスト・解説)が埋め込まれています。画像は IIIF(International Image Interoperability Framework、画像相互運用の国際規格)の URL で参照されていました。

そこで、各名所ページに埋め込まれたデータと、画像ごとの IIIF マニフェスト(資料のメタデータを記述した JSON)を機械的に読み取り、正規化したデータセットに変換する方針を採りました。処理は次の流れです。

抽出パイプライン。NDL 展示会のページから scrape で名所・座標・画像を取り出し、enrich で書名や権利を IIIF マニフェストから補い、check-links で到達できない画像を除外し、export で各形式へ整形して、公開データセットと地図アプリの二つの成果物を作る

  • scrape: 各名所ページから、名所名・都道府県・緯度経度・解説・画像(錦絵/写真)を抽出する
  • enrich: 画像の書誌 ID から特定できる NDL デジタルコレクションの資料について、IIIF マニフェストを取得し、書名・著者・権利表示を補う
  • check-links: 画像 URL の到達性を確認し、404 になるものを除外する
  • export: GeoJSON / CSV / IIIF Collection / Frictionless datapackage などの形式へ整形する

一覧ページだけでは名所が集まらなかった

当初は名所一覧ページ(/landmarks/sights)に並ぶリンクを名所の全体集合だと考えていました。しかし公開前の点検で、この一覧は展示会の全名所を網羅したものではなく、一覧に載っていない名所ページが多数存在することが分かりました。

一覧から取れたのは 323 件でしたが、各名所ページの「近郊の名所」などのリンクをたどると、そこからしか到達できない名所が約 200 件見つかりました。しかもその中に、浅草(画像 51 点)・日本橋(44 点)・函館(38 点)・鎌倉・銀座・京都の主要寺社といった、画像点数の多い主要な名所が含まれていました。

対応として、名所の収集をページ間リンクの**幅優先探索(breadth-first search)**に切り替えました。一覧の 323 件を起点に、各ページから見つかる名所リンクをたどり、新規に見つからなくなるまで巡回します。別名(旧 URL などからのリダイレクト)は正規の名所に集約して重複を防ぎます。

索引の種: 323 件 → クロスリンクを巡回して全名所を収集
巡回中: 収集 534 / 探索 560 / 残キュー 0
名所: 534 件 (別名リダイレクト 26 件を正規化)
画像: 4251 点

結果として、名所は 323 件から 534 件、画像は 2671 点から 4251 点(リンク切れ除外後 4155 点)へ増えました。参照される全 560 スラッグが、収集済みの 534 件か別名 26 件のいずれかに含まれることを確認し、取りこぼしが無い状態にしています。

リンク切れと権利表示の扱い

画像 URL のうち、NDL 側で資料が削除・変更されたと見られる 96 点が 404 を返しました。これらは公開データから除外し、除外した記録を broken-links.json として同梱しています。

権利表示は、IIIF マニフェストの Access Restrictions から取得しています。取得できた資料はいずれも PDM(Public Domain Mark、パブリックドメイン)でした。一方、IIIF マニフェストが提供されていない資料(ndlsearch.ndl.go.jp の静的画像として配信されているもの)は権利表示を取得できませんでした。これらはパブリックドメインと決めつけず、rights を空欄のままにしています。空欄は「未確認」であって「自由に使える」という意味ではない、という点をデータセットの説明にも明記しました。

ライセンスは3層に分かれる

このデータセットでは、要素ごとに扱いを分けています。

要素権利扱い
座標・分類・地方区分・CSV/GeoJSON 構造(編纂データ)作成者CC BY 4.0(要・出典明示)
画像そのものNDL デジタルコレクション各レコードの rights を参照(PDM が多数)
解説文(description国立国会図書館© 国立国会図書館。CC BY 4.0 の対象外

出典として 国立国会図書館「錦絵と写真でめぐる日本の名所」 を明示することを前提にしています。

形式

用途に応じて複数の形式を用意しました。

ファイル形式用途
ndl-landmarks.geojsonGeoJSON地図 / GIS。1 名所 = 1 地点、properties.images[] に画像
sights.csvCSV名所テーブル
images.csvCSV画像明細(書名・著者・権利・IIIF URL 付き)
other-materials.csvCSVその他の資料(書物単位の関連資料)
iiif-collection.jsonIIIFMirador などの標準ビューア用 Collection
datapackage.jsonFrictionlessスキーマ・ライセンス・出典の機械可読な記述

images.csv を GitHub で開いたところ。名所・書名・著者・権利・IIIF URL などが列として並ぶ

CSV は名所テーブル(sights.csv)と画像明細(images.csv)を slug で結合できる構成にしています。GeoJSON はそのまま地図に載せられ、datapackage.json で各列の型やライセンスを機械可読に記述しています。

地図アプリへの取り込み

同じ抽出結果を、地図アプリ(実験的に運用している文学地図ツール)にも取り込みました。名所をピン、書物を資料、画像を用例として登録し、ピンをクリックすると紐づく錦絵・写真を閲覧できます。登録はアプリの REST API 経由で行い、データセット生成と同じ抽出結果を再利用しています。

なお、このアプリは現時点では閲覧にログインを必要とする設定のため、誰でも中身を確認できる導線としては前述の GitHub 上の GeoJSON プレビューが手軽です。

生成の再現

データセットの生成は、次のコマンドで再現できます。

node scripts/ndl-landmarks/scrape.mjs       # クロスリンクをBFS巡回して全名所を抽出
node scripts/ndl-landmarks/enrich.mjs       # IIIF マニフェストで書名・権利を補完
node scripts/ndl-landmarks/check-links.mjs  # 画像リンクの死活チェック
node scripts/ndl-landmarks/export.mjs       # データセットを生成(死リンク除外)

公開にあたっては、複数のエージェントで取得漏れ・値の正しさ・メタデータの整合を独立に点検し、指摘(一覧ページ由来の取りこぼし、解説文のルビ記法の残り、ライセンス記述の粒度など)を反映してから確定しました。