エクスポート
エクスポートは、スペース全体、または単一のフォルダを、Markdownファイルをまとめた1つのZIPアーカイブとしてダウンロードします。ファイルこそが信頼できる唯一の情報源(file-first原則)であるため、エクスポートはインデックスから再構築するのではなく、ディスクから直接ファイルを読み取ります。アーカイブに入るのは、各ファイルのフロントマターにある notarium-id まで含めた実際のファイルそのものです。
だからこそエクスポートは可逆です。インポートで元に戻すことも、構造・同一性・日付を失うことなく別のインスタンスへ移すこともできます。エクスポートとは実のところ「データを外へ持ち出す」ことではなく、すでにあなたのファイルとしてディスク上に存在しているものを、手軽にパッケージ化する手段なのです。
エクスポートの方法
エクスポートは、スペースの設定にある Export タブにあります。
- ボタンを押すとジョブがキューに入り、以降はプログレスバー(ノート数が判明した時点でパーセント表示になります)と Cancel ボタンが表示されます。
- 準備が整うとアーカイブは自動でダウンロードされ、その横には Download .zip(もう一度ダウンロード)と Export again(エクスポートを再実行)のボタンが残ります。
- タブを離れて戻っても安全です。戻ってくれば、実行中のジョブか、ダウンロード可能な状態のファイルが再び表示されます。
単一のフォルダは、ツリーのコンテキストメニューにある Export folder 項目からエクスポートできます。これはサブツリーにスコープを絞った同じジョブで、進捗はキャンセルボタン付きの「固定表示」トーストに現れます。
オプション
どちらのエクスポート経路も、同じパラメータのセットを受け付けます。
| パラメータ | 値 | 動作 |
|---|---|---|
scope | user(デフォルト)· all | user — 自分のノートのみ。all — エージェントのメモリマウント(.notarium/memory)を含む、スペースの中身すべて。 |
frontmatter | keep(デフォルト)· strip | keep はファイルをそのまま書き出す。strip はYAMLブロックを切り落とし、読むための綺麗なコピーにする。 |
folder | パス | エクスポートをサブツリーに絞り込む(Export folder が行うこと)。 |
frontmatter=strip は再インポートを壊すフロントマターを切り落とすと、欠損のあるコピーになります。YAMLブロックとともに notarium-id とタグが失われるからです。このようなアーカイブはノートを読んでもらうために渡すには便利ですが、もはや欠損なく再インポートすることはできません。データを移す用途では keep(デフォルト値)のままにしてください。
scope=all であっても、エクスポートのアーカイブに入るのはスペースのMarkdownファイルだけです。メタデータデータベースは含まれません。アカウントも、アクセス権限も、バージョン履歴も、ジョブの状態もありません。ここからインスタンスを復元することはできません。バックアップはイメージの組み込みコマンドで行う別の操作です。バックアップとリストアを参照してください。
内部の仕組み
エクスポートは、どれだけ大きなナレッジベースでもメモリに溜め込まないよう、ストリーミング方式で構築されています。
- デフォルトは非同期ジョブ。 ホストにメタデータデータベースがある場合(セルフホストでは通常こうなります)、エクスポートは永続ジョブになります。バックグラウンドワーカーがZIPをアーティファクトストレージに組み立て、再開可能なダウンロードに対応した完成ファイルを提供します。タブを閉じても、接続が切れても、サーバーが再起動しても、エクスポートは頓挫しません。
- ダウンロードはバッファリングされない。 完成したアーカイブをブラウザはディスクへ直接ストリーミングし、ファイル名はレスポンスヘッダーから取得します。大きなナレッジベースがタブのメモリに溜まることはありません。
- キャンセルは処理を止める。 ダウンロードをキャンセルすればノートの取り出しもそこで止まり、サーバーが無駄にナレッジベース全体を読み続けることはありません。
flowchart LR
notes[(Markdownノート)] -->|ディスクから読み取り| worker[バックグラウンドワーカー]
worker -->|ZIP| artifact[ジョブアーティファクト]
artifact -->|ダウンロード| user([ブラウザ])
メタデータデータベースを持たないホスト(データベースが無いのは AUTH_MODE=none モードのときだけです)では、ジョブ層がありません。エクスポートは同期ストリーミング経路をとり、同じZIPが単一のリクエスト内で直接ダウンロードとして提供されます。進捗表示も再開可能なダウンロードもありません。変わるのは配信方法だけで、結果は同じです。
境界
- 一度に1つのスペース。 スペースは独自のアクセス制御を持つ隔離されたストアです。複数をエクスポートするには、それぞれ個別にエクスポートしてください。
- アーティファクトにはTTLがある。 完成したZIPは限られた時間だけ(デフォルトで7日)保持され、ガベージコレクターによって削除されます。期限切れになるまでは再ダウンロードできます。
- バイナリ添付ファイルはエクスポートされない。 アーカイブに入るのはノートのテキスト、つまりMarkdownファイルです。
- キャンセルはできるが一時停止はできない。 ジョブはキャンセルできますが、一時停止して再開する仕組みはありません。