🙌

a3mを試す

2024/06/13に公開

概要

a3mを試します。

https://github.com/artefactual-labs/a3m

a3mは以下のように説明されています。

a3m is a lightweight version of Archivematica focused on AIP creation. It has neither external dependencies, integration with access sytems, search capabilities nor a graphical interface.

(機械翻訳)a3mはArchivematicaの軽量版で、AIP(アーカイブ情報パッケージ)の作成に特化しています。外部依存関係、アクセスシステムとの統合、検索機能、グラフィカルインターフェースはありません。

Archivematicaとの違い

以下についても機械翻訳結果を掲載します。

The main differentiator is the lack of service dependencies. a3m does not depend on Gearman or external workers, MySQL, Elasticsearch or Nginx. a3m provides its own API server based on the gRPC stack and all processing is performed via system threads and spawned child processes. An embedded database based on SQLite is used to store temporary processing state.

(機械翻訳)主な違いはサービス依存性がないことです。a3mはGearmanや外部ワーカー、MySQL、Elasticsearch、Nginxに依存していません。a3mはgRPCスタックに基づいた独自のAPIサーバーを提供し、すべての処理はシステムスレッドと生成された子プロセスを介して実行されます。一時的な処理状態を保存するために、SQLiteに基づいた組み込みデータベースが使用されます。

インストール

以下を参考にします。

https://a3m.readthedocs.io/en/latest/installation.html

Dockerを使用します。以下のdocker-compose.ymlを作成しました。

docker-compose.yml
services:
  a3md:
    image: ghcr.io/artefactual-labs/a3m:latest
    ports:
      - 7000:7000
    networks:
      - a3m-network
networks:
  a3m-network:
    external: true

そして、docker-compose.ymlが格納されている同じフォルダで、以下を実行して起動します。

docker network create a3m-network
docker compose up -d

AIPを作成する

以下を参考に進めます。

https://a3m.readthedocs.io/en/latest/usage.html

理解が怪しい点がありますが、サーバ上で実行することも、クライアントから利用することもできそうです。

詳細は以下をご確認ください。

https://a3m.readthedocs.io/en/latest/overview.html#architecture

サーバ上で実行する

まずライブラリをインストールします。

pip install a3m

そして、以下のように実行します。

a3m /a3m/examples --name="server"

以下のように出力されました。

AIP 226f0c78-e779-44c6-bc8e-17414f008241 is being generated...
Processing completed successfully!

Processing directoryを確認すると、7zファイルが作成されていました。

ls ~/.local/share/a3m/share/completed/
server-226f0c78-e779-44c6-bc8e-17414f008241.7z

クライアントから利用する

まずライブラリをインストールします。

python -m venv .venv
source .venv/bin/activate
pip install a3m

そして、address引数と、処理対象のファイルをURLで指定します。

サーバのドメインを仮にexample.orgとしています。またいらすやさんの画像を利用しています。

a3m --address=example.org:7000 --name="client" https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5x8DUwBVjGR2IkVozOhVoe1zMnzIrcemz4s8xMsHR1gP8mV809urM_03Et8VWHxlGHXy1Vo2UD6x1z7SUVtVik0d0wCW37bbAIb1q7WOlKdyRiwpDkJiONBKEvgPdJFJFRTwGNMMeGUbW/s691/baby_role_towel_utsubuse.png

これも同様に、以下のように出力され、サーバ上に保存されました。

AIP 8f2c08c7-1ae0-42f5-9ae2-2908bc7fac54 is being generated...
Processing completed successfully!

Pythonで利用する

以下のようにすることで、cliと同様に、AIPを作成することができました。

import grpc
from a3m.server.rpc.client import Client

server_address = 'example.org:7000'

# 暗号化されていないチャネルを作成
channel = grpc.insecure_channel(server_address)
c = Client(channel)

res = c.submit(
    url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5x8DUwBVjGR2IkVozOhVoe1zMnzIrcemz4s8xMsHR1gP8mV809urM_03Et8VWHxlGHXy1Vo2UD6x1z7SUVtVik0d0wCW37bbAIb1q7WOlKdyRiwpDkJiONBKEvgPdJFJFRTwGNMMeGUbW/s691/baby_role_towel_utsubuse.png", 
    name="client-py",
    )

さらに、以下により、処理結果を取得することができました。

res_read = c.read(res.id)
res_read
status: PACKAGE_STATUS_COMPLETE
job: "Store AIP"
jobs {
  id: "a247df6a-edd3-446b-868f-be4c0b5bc367"
  name: "a3m - Download package"
  group: "a3m"
  link_id: "00000e0a-2cb2-4292-a412-58ea57aa6f7e"
  status: STATUS_COMPLETE
  start_time {
    seconds: 1718237770
    nanos: 720538000
  }
}
jobs {
  id: "8b5042e4-56c8-4d21-9263-73de14fd1cca"
  name: "Remove hidden files and directories"
  group: "Verify transfer compliance"
  link_id: "50b67418-cb8d-434d-acc9-4a8324e7fdd2"
  status: STATUS_COMPLETE
  start_time {
    seconds: 1718237771
    nanos: 497992000
  }
}
jobs {
  id: "f921f6fb-a843-4d8d-92ba-209210da4178"
  name: "Remove unneeded files"
  group: "Verify transfer compliance"
  link_id: "5d780c7d-39d0-4f4a-922b-9d1b0d217bca"
  status: STATUS_COMPLETE
  start_time {
    seconds: 1718237771
    nanos: 515314000
  }
}
jobs {
  id: "eb6435aa-2d63-41d6-bed0-6ae6c41528ac"
  name: "Attempt restructure for compliance"
  group: "Verify transfer compliance"
  link_id: "ea0e8838-ad3a-4bdd-be14-e5dba5a4ae0c"
  status: STATUS_COMPLETE
  start_time {
    seconds: 1718237771
    nanos: 533858000
  }
}
jobs {
  id: "6fc1c185-2c99-4b3c-ad5c-e77ee8a56b50"
  name: "Verify transfer compliance"
  group: "Verify transfer compliance"
  link_id: "438dc1cf-9813-44b5-a0a3-58e09ae73b8a"
  status: STATUS_COMPLETE
  start_time {
    seconds: 1718237771
    nanos: 554084000
  }
}
jobs {
  id: "2c3462d0-a711-458d-89fe-04bbea22f203"
  name: "Verify mets_structmap.xml compliance"
  group: "Verify transfer compliance"
  link_id: "d0c463c2-da4c-4a70-accb-c4ce96ac5194"
  status: STATUS_COMPLETE
  start_time {
    seconds: 1718237771
    nanos: 573639000
  }
}
jobs {
  id: "90c0b640-dd58-49a8-a27f-66ca2a00568f"
  name: "Assign UUIDs to directories?"
  group: "Assign file UUIDs and checksums"
  link_id: "bd899573-694e-4d33-8c9b-df0af802437d"
  status: STATUS_COMPLETE
  start_time {
    seconds: 1718237771
    nanos: 600004000
  }
}
jobs {
  id: "4f3173e5-1324-4a99-b341-7325155c0246"
  name: "Assign UUIDs to directories"
  group: "Assign file UUIDs and checksums"
  link_id: "6441980c-b64b-447e-abc7-9351a2547f6a"
  status: STATUS_COMPLETE
  start_time {
    seconds: 1718237771
    nanos: 606370000
  }
}
jobs {
  id: "12a4ede6-4d35-46db-91ad-eb9fa2900fae"
  name: "Assign file UUIDs to objects"
  group: "Assign file UUIDs and checksums"
  link_id: "dc144ff4-ad74-4a6e-ac15-b0beedcaf662"
...
  start_time {
    seconds: 1718237773
    nanos: 159203000
  }
}

考察

ProcessingConfig

以下に記載がある通り、ArchivematicaではXMLベースの設定ファイルを事前に用意しておく必要がありました。一方、a3mでは、transfer requestsの一部として、設定を提出できるようです。これにより、AIP作成における柔軟性が向上するのではないかと思います。

https://a3m.readthedocs.io/en/latest/usage.html#processing-configuration

https://buf.build/artefactual/a3m/docs/main:a3m.api.transferservice.v1beta1#a3m.api.transferservice.v1beta1.ProcessingConfig

利用にあたって

本ツールは開発中ということで、まだ利用を開始するのは難しいかなと思いました。一方、AIPをよりシンプルに作成できるツールとして、今後の進展に期待したいと思います。

まとめ

参考になりましたら幸いです。

Discussion