概要
Headless CMSの学習のため、CMSに登録した情報からIIIFマニフェストを生成する試みを行いました。
以下がその結果です。(といっても、以下のアプリからはサーバ側の処理内容は見えないです。)
https://iiif-headless-cms.vercel.app/
本記事は上記の取り組みの備忘録です。
Contentful
以下のようなiiifというContent modelを作成しました。画像データ(url, width, height)の紐付けには、フィールド「JSON object」と「Reference」が使用できそうでしたが、ここでは「Reference」を選択し、画像データの情報を管理するimageというContent modelを別途作成しました。

IIIFマニフェストの形式に変換して返却するAPIについては、Nuxt3を用いて作成しました。
以下のライブラリを使用することで、簡単に接続することができました。
https://www.npmjs.com/package/contentful
microCMS
microCMSにおいても同様のスキーマ作成を行いました。
以下のような画像データを格納するカスタムフィールドを作成しました。

このカスタムフィールドを繰り返しありの形でiiifスキーマに追加することで、以下のように、画像に関する情報を格納できるようになりました。

スキーマをエクスポートしたデータは以下です。
IIIFマニフェストの形式に変換する処理は以下です。
https://github.com/nakamura196/iiif-headless-cms/blob/main/server/api/iiif/microcms/[id]/manifest.ts
Contentfulと記述が少し異なりますが、こちらも以下のライブラリを使用することで、簡単に接続することができました。
https://www.npmjs.com/package/microcms-js-sdk
まとめ
今回は2つのHeadless CMSを利用してみました。初歩的な利用しかできていませんが、とても使いやすく感じました。
Omekaのようなデジタルアーカイブシステムを、フロントエンドフレームワーク + Headless CMSで作成してみるのも有用かと思いました。
なお、冒頭で紹介したアプリについては、サーバサイドでプログラムを実行する必要があったため、Nuxt3のSSRで実現しています。このホストティングにあたり、Vercelを使用しましたが、ビルドの設定やCORSの有効かなど、初めてで少し戸惑った部分がありましたので、別の記事で設定方法等を紹介したいと思います。