TEI/XMLファイルをS3互換のオブジェクトストレージでホストする機会がありましたので、備忘録です。具体的には、mdx Iのオブジェクトストレージを対象にします。
https://mdx.jp/mdx1/p/about/system
TEI/XMLファイルを読み込み、その内容を可視化するウェブアプリケーション(Next.js)を構築します。この時、ファイル数やサイズが小さい場合は、publicフォルダに格納していましたが、これらが大きくなった場合、別の場所でホストすることを考えました。
場所の選択肢は多々ありますが、今回はS3互換であるmdx Iのオブジェクトストレージを対象にします。
GUIを用いたオブジェクトストレージへのファイルアップロード#
オブジェクトストレージへTEI/XMLファイルをGUI経由でアップロードする方法も多々あります。その中で、これまではCyberduckを使用する方法や、GakunNin RDMを使用する方法などを紹介しました。
一方、今回の事例では、TEI/XML以外のコンテンツをDrupalで管理していました。そこで、Drupalとオブジェクトストレージを接続し、ユーザはDrupalの操作で完結できるようにしました。
Drupalとオブジェクトストレージの接続#
以下のモジュールを使用します。
https://www.drupal.org/project/s3fs
インストール後、環境設定のページ/admin/configから、S3 File Systemを選択します。

そして、アクセスキーや秘密鍵を登録し、さらにS3のバケット名を登録します。

またAdvanced Configuration OptionsのCustom Host Settingsにおいて、https://s3ds.mdx.jpを入力します。

これでオブジェクトストレージとの接続設定は完了です。
その後、各コンテンツタイプのフィード設定において、アップロード先として「S3 File System」を選択します。

また、今回はTEI/XMLファイルがアップロード対象となるため、「許可されている拡張子」として、xmlを入力します。

この結果、DrupalのGUIを介してアップロードしたTEI/XMLファイルが、mdx Iのオブジェクトストレージに格納されるようになりました。
(参考)DrupalのJSON:APIを用いたファイルの一括アップロード#
TEI/XMLの初期登録にあたり、Pythonを用いた一括登録を行いました。JSON:APIを用いたファイルの一括アップロードの方法は、以下の記事などが参考になりました。
https://www.drupal.org/node/3024331
一例ですが、以下のようなスクリプトで実現できました。
すでに対象コンテンツが作成済みで、例えばfield_fileといったフィールドにファイルをアップロードする目的で使用することができます。
より適切な方法があるかと思いますが、以下のように使用できます。
なお、以下のような環境変数が必要です。
Next.jsからの利用#
オブジェクトストレージにアップロードされたTEI/XMLファイルを、Next.jsなどのアプリケーションから読み込みます。
以下のライブラリを使用することができました。
https://www.npmjs.com/package/@aws-sdk/client-s3
具体的には、以下のような形で利用できました。
以下のような環境変数とともに使用します。
結果、以下のような構成を実現することができます。

今後の展望: LEAF-Writerとの接続#
今回はDrupal(実際には、mdx Iのオブジェクトストレージ)にアップロードされたTEI/XMLファイルの編集環境は用意していませんが、例えば以下のLEAF-WriterのDrupalモジュールを使用することで、TEI/XMLファイルの編集と管理をCMS上で完結させられる可能性があります。
https://gitlab.com/calincs/cwrc/leaf-writer/leaf_writer
また、GakuNin RDMとLEAF-Writerを接続したプロトタイプとして、以下も参考になりましたら幸いです。
まとめ#
今回、TEI/XMLファイルをS3互換のオブジェクトストレージでホストする一例について紹介しました。このような方法を採用する利点や欠点が考えられるため、用途に応じた構成を考える上で、本記事が参考になりましたら幸いです。