本記事は生成AIと共同で執筆しています。事実関係は可能な範囲で公式ドキュメント等と照合していますが、誤りが含まれている可能性があります。重要な判断を行う前にご自身でも一次情報をご確認ください。
概要
アーカイブズ機関(文書館・史料館・資料館など)への移管ワークフローでは、受け入れたファイル群から SIP(Submission Information Package)を作る工程があります。定番ツールの CCA-Public/sipcreator は BitCurator(Linux)向けの PyQt5 アプリで、macOS で動かすには Docker コンテナを立て、ブラウザの noVNC デスクトップに接続し、ターミナルからコマンドを実行する、という手順が必要です。非技術者の担当者が日常的に使うには手順が多くなります。
そこで、この SIP 作成ワークフローをネイティブ macOS アプリとして実装し直し、ダウンロードして「アプリケーション」フォルダにドラッグし、ダブルクリックで使える形にしました。ソースと配布物(notarized DMG)は GitHub に公開しています。
- リポジトリ: https://github.com/nakamura196/SIPCreator
- リリース(v0.1.0, notarized DMG): https://github.com/nakamura196/SIPCreator/releases/tag/v0.1.0

インストール(はじめての方へ)
技術的な知識は不要で、Homebrew・Python・Docker・ターミナルのいずれも使いません。
- Releases ページ を開きます
- 最新版の
SIPCreator.dmgをダウンロードします - ダウンロードした
.dmgをダブルクリックして開きます - 開いたウィンドウで、
SIP Creatorアイコンを「アプリケーション」フォルダにドラッグします - 「アプリケーション」フォルダ内の
SIP Creatorをダブルクリックして起動します
Apple の公証(notarization)済みのため、警告なしで起動できます。初回に「開発元を確認できません」等が表示された場合は、アプリを右クリックして「開く」を選ぶと起動できます。
動作要件は macOS 14(Sonoma)以降、Apple Silicon(M1 以降)です。
使い方
- 入力(資料)フォルダを「選択…」から指定します(移管対象のファイルが入ったフォルダ)
- 出力(SIP)フォルダを「選択…」から指定します(SIP の保存先)
- タイトル(必須)など記述メタデータを入力します
- 「SIP を作成」をクリックすると、出力先に SIP(または BagIt bag)が生成されます
実際の操作(フォルダ選択 → 入力 → 作成 → 完了)の流れは、次の操作デモ(字幕つき・約40秒)で確認できます。
(動画が表示されない場合は こちらのリンク からご覧ください)
ここからは、開発の背景・機能・本家との違い・ビルドから署名・公開までの流れを記録します。
背景
調べた範囲では、SIP 作成ワークフロー(フォーマット識別・チェックサム・記述スプレッドシート・パッケージ化)をまとめて行う、署名済みのネイティブ macOS アプリは見当たりませんでした。本家は Linux 前提で、近い Brunnhilde GUI も Python/Qt で依存を自分で用意する必要があります。
Docker や VNC が必要になる理由は、GUI そのものではなく、内部で呼ぶフォレンジック系の CLI(siegfried など)にあります。GUI は SwiftUI でネイティブに作れるため、識別エンジンの siegfried だけをアプリに同梱すれば、利用者は追加のインストールなしで使えます。
できること
- フォーマット識別(siegfried / PRONOM。PRONOM は英国国立公文書館によるファイル形式レジストリ)。アプリに同梱しています
- チェックサム(SHA-256、Apple CryptoKit)
- 記述スプレッドシート(
description.csv)。AtoM/ISAD(G)(国際標準アーカイブズ記述の一般原則)のインポート用に、識別子・タイトル・年代範囲・Extent・Scope を自動補完します - 技術インベントリ(
formats.csv)、DFXML(Digital Forensics XML、dfxml.xml)、HTML レポート(report.html) - パッケージ化(SIP ディレクトリ、または BagIt bag)
出力は本家に倣い metadata/submissionDocumentation/ の下にまとめます。
<SIP>/objects/... 元ファイル(相対パス保持)
<SIP>/metadata/submissionDocumentation/
├ description.csv AtoM/ISAD(G) 記述シート(SIP 1 行)
├ formats.csv 技術インベントリ(ファイル毎)
├ dfxml.xml 技術メタデータ(DFXML)
├ report.html HTML レポート
├ report.txt サマリ
└ checksum.sha256
本家 SIP Creator との違い
下流(Archivematica / AtoM / BagIt)が認識できる出力は本家に合わせ、一部は異なる選択をしています。
| 機能 | 本家 | 本アプリ |
|---|---|---|
| フォーマット識別(PRONOM) | siegfried | siegfried(同じ PUID) |
| チェックサム | MD5 | SHA-256 |
| 記述スプレッドシート(ISAD/AtoM) | あり | あり |
| DFXML / HTML レポート | あり | あり(独自実装) |
| ウイルスチェック(ClamAV) | あり(Brunnhilde 由来) | なし(端末の AV / Docker 版に委ねる) |
| PII スキャン(bulk_extractor) | 任意 | なし |
| ディスクイメージ解析(fiwalk) | △(Brunnhilde 由来・SIP Creator では未使用) | なし |
チェックサムは本家が MD5 です。本アプリでは、より衝突耐性の高い SHA-256 を採用しました(実際の移管ワークフローの検討でも、MD5 から SHA-256 への変更が論点になっていました)。識別・SIP 作成・記述シート・DFXML・HTML レポートは本家と同等で、本アプリで対象外としたのは ClamAV・fiwalk・PII の 3 つです(いずれも別ツールや Docker 版に委ねるのが妥当な範囲と考えています)。
ビルドから公開までの流れ
ネイティブ配布で警告なく起動できるようにするには、署名と notarization が必要です。流れは次のとおりです。
- 実装:SwiftUI でアプリ本体を作成します。パイプライン(走査 → siegfried 識別 → SHA-256 → スプレッドシート/DFXML/レポート → SIP・BagIt 組み立て)は Swift で実装し、XcodeGen でプロジェクトを生成します
- siegfried 同梱:
brewで取得したsfバイナリと署名 DB をResources/bin/に同梱し、オフラインで識別します - テスト:決定性(同じ入力なら同じ SHA-256)と、PRONOM ゴールデン(
%PDF-1.4がfmt/18と識別される=本家 siegfried と同じ結果)を検証します - 署名:Developer ID Application 証明書で署名し、ハードンドランタイムを有効にします。同梱した
sfも Developer ID で署名し直します(入れ子のバイナリも署名されていないと notarization に通りません) - notarization:
xcrun notarytool submit --waitで Apple に提出し、Acceptedの後にstapler stapleでチケットを添付します - 配布:
create-dmgで DMG を作成し、GitHub Releases に公開します(gh release create)
つまずいた点として、
ENABLE_USER_SCRIPT_SANDBOXINGが有効だと、ビルド中の Run Script が同梱バイナリにアクセスできず archive が失敗します。同梱バイナリの署名は、archive 時の Run Script ではなく export 後のcodesignで行うのが安全でした。
配布形式は、GitHub の README をリファレンス、チュートリアル動画を使い方、本記事を背景と流れ、という三層に分けています。
まとめ
- Docker や VNC が必要だった理由は GUI ではなく依存 CLI で、siegfried だけ同梱すればネイティブ化できます
- 本家の標準(submissionDocumentation 配置・ISAD 記述シート・BagIt)には合わせつつ、チェックサムは MD5 から SHA-256 に変更しています
- 署名と notarization まで通し、ダブルクリックで使える notarized DMG を GitHub で配布しています
関連
- 本アプリ: https://github.com/nakamura196/SIPCreator
- 本家 SIP Creator: https://github.com/CCA-Public/sipcreator
- siegfried: https://github.com/richardlehane/siegfried
コメント
…