Outboxアーキテクチャとは
Outboxアーキテクチャ(Outboxパターン)は、メッセージをローカルにキューイングし、ネットワーク接続が回復した時点で自動送信する設計パターンです。Obsidian連携シンプルメモでは、この仕組みにより地下鉄や機内などオフライン環境でも、メモを端末に残して、つながったときに送ります。
Outboxアーキテクチャは、分散システムにおけるメッセージ配信保証パターンです。送信者はメッセージをまずローカルのOutbox(送信箱)に永続化し、バックグラウンドプロセスがOutboxを監視して、ネットワーク接続時に順次送信します。送信成功を確認後、Outboxからメッセージを削除します。これにより「ネットワーク障害時のデータ損失」を防ぎます。応答だけが失われたメッセージは送り直されるので、同じメッセージが重ねて届かないようにするには、受け取る側の重複防止(冪等キーなど)と組み合わせます。シンプルメモでは、メモごとのメッセージIDをメール送信サービスへの冪等キーとして渡し、24時間のうちの重複を防いでいます。モバイルアプリではオフラインファースト設計の基盤技術です。
Outboxパターンの3つの要素
シンプルメモの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に保管し、アプリが暗号化・復号時に読み出します。鍵は別の端末へ移行しない設定です。メール配送はエンドツーエンド暗号化ではありません。バックアップと鍵管理の詳細も確認してください。