用語集 — 技術

Outboxアーキテクチャとは

Outboxアーキテクチャ(Outboxパターン)は、メッセージをローカルにキューイングし、ネットワーク接続が回復した時点で自動送信する設計パターンです。Obsidian連携シンプルメモでは、この仕組みにより地下鉄や機内などオフライン環境でも、メモを端末に残して、つながったときに送ります。

定義

Outboxアーキテクチャは、分散システムにおけるメッセージ配信保証パターンです。送信者はメッセージをまずローカルのOutbox(送信箱)に永続化し、バックグラウンドプロセスがOutboxを監視して、ネットワーク接続時に順次送信します。送信成功を確認後、Outboxからメッセージを削除します。これにより「ネットワーク障害時のデータ損失」を防ぎます。応答だけが失われたメッセージは送り直されるので、同じメッセージが重ねて届かないようにするには、受け取る側の重複防止(冪等キーなど)と組み合わせます。シンプルメモでは、メモごとのメッセージIDをメール送信サービスへの冪等キーとして渡し、24時間のうちの重複を防いでいます。モバイルアプリではオフラインファースト設計の基盤技術です。

Outboxパターンの3つの要素

ローカル永続化
メモはまずデバイス上のストレージに保存されます。ネットワークの状態に関係なく、ユーザーの操作は即座に完了します。シンプルメモではAES-256-GCMで暗号化して保存します。
接続が戻ったら再送
アプリが動いているあいだは、NWPathMonitor(ネットワーク状態監視API)で接続の回復を検出して再送します。アプリを閉じているあいだは、iOSのバックグラウンド更新(実行のタイミングはiOSが決めます)か、次にアプリを開いたときに再送を試みます。
確認付き削除
当社のRelay API(Cloudflare Workers)から送信成功の応答を受けた後にだけ、Outboxからそのメモを消します。エラーのときは自動で再送します(1件につき最大5回。止まったメモは履歴画面から手動で再送信できます)。

シンプルメモのOutbox実装

Obsidian連携シンプルメモのOutboxは、単なるオフラインキューではなく、セキュリティとUXを両立させた設計です。メモの保存時にAES-256-GCMで暗号化し、送信時にのみ復号。送信が済んだメモはOutboxから消します。オフラインで送信ボタンを押したときは「オフライン - 接続時に送信します」と表示して、メモをOutboxに残します。

実例:地下鉄でのメモ送信

シナリオ

1. 地下鉄の車内でアイデアをメモに入力し、送信ボタンをタップ

2. アプリは「オフライン - 接続時に送信します」と表示(メモは送信待ちとして端末に残る)

3. 裏側ではメモをAES-256-GCMで暗号化してOutboxに保存

4. 地上に出てLTE/Wi-Fiに接続 → アプリが動いていれば、NWPathMonitorが接続を検出(閉じていれば、iOSのバックグラウンド更新か次にアプリを開いたとき)

5. Outboxからメモを取り出し、復号してCloudflare Workers APIに送信

6. Resend APIが配信を受け付け、Relay APIが成功の応答を返す(受信箱に届いたことの確認ではない)

7. そのメモをOutboxから消す

よくある質問(Outboxアーキテクチャ)

Outboxアーキテクチャとは何ですか?

メッセージをローカルのキュー(送信箱)に保存し、ネットワーク接続時に自動送信する設計パターンです。オフラインのあいだも送信待ちとして端末に残し、接続が戻ったら送信を再開します。

シンプルメモのOutboxはどう動きますか?

メモ送信時にネットワークが利用できない場合、AES-256-GCMで暗号化してOutboxに保存。接続が戻ると、アプリが動いていればすぐに、閉じていればiOSのバックグラウンド更新か次にアプリを開いたときに、Cloudflare Workers経由でResend APIに送信。送信が済んだらOutboxから消します。

Outboxのメモは安全ですか?

端末内に保存するOutboxはAES-256-GCMで暗号化します。暗号鍵はiOSのKeychainに保管し、アプリが暗号化・復号時に読み出します。鍵は別の端末へ移行しない設定です。メール配送はエンドツーエンド暗号化ではありません。バックアップと鍵管理の詳細も確認してください。

参考文献・外部リンク

オフラインでも、書いたメモは端末に残る
Outboxアーキテクチャ+AES-256-GCM暗号化で、地下鉄でも機内でもメモを端末に残し、つながったら送ります。ダウンロードは無料。
App Store からダウンロード

関連ページ