性能ターゲット

0.3s
cold launch
150ms
send latency (p50)
~6MB
app binary
iOS 16+
deployment target

これらは 「思考の速度を落とさない」 という設計目標から逆算した数値です。 数値の意味と測定方法は 最速メモアプリベンチマーク記事 で詳述しています。

1. ワンタップ送信 (One-tap dispatch)

アプリ起動からメモ入力フィールドに focus が当たるまでを application(_:didFinishLaunchingWithOptions:) 内の同期処理として最短経路で実装。 バックグラウンド初期化が必要な依存(暗号鍵ロード、Outbox 復元など)はメインフロー外で遅延実行し、入力 UI を最優先で出します。 送信ボタンは textfield と同レイヤに配置し、入力中もタップ可能。

実際の使い方は 設定ガイド活用事例 を参照してください。

2. Outbox アーキテクチャ (オフライン対応)

送信時に毎回ネットワークを試行するのではなく、まず Outbox(未送信キュー) に Enqueue → Reachability の変化と BGAppRefreshTask をトリガに自動再送する設計です。 これにより、地下鉄・飛行機内・電波の弱い場所でも「送ったつもりが消えている」を構造的に防ぎます。

// pseudo-flow
1. user taps Send
2. encrypt(plaintext) -> ciphertext
3. outbox.enqueue(ciphertext)
4. trigger flush() immediately
5. on network change / BG refresh -> flush()
6. on 2xx response from edge worker -> mark as sent
7. on 4xx (permanent) -> surface to history with error state
8. on 5xx / network err -> exponential backoff, keep in queue

Outbox の状態は FAQ「オフライン時のメモはどう扱われますか?」 でユーザー向けに説明しています。

3. 端末内 AES-GCM 暗号化

Outbox に積まれたメモ本文と送信履歴は、すべて AES-GCM (256-bit) で暗号化して保存します。 鍵は端末の Secure Enclave に紐付いた Keychain に保管し、アプリ自身であってもメモリ上の必要時間外は鍵を保持しません。

プライバシー方針の全体像は プライバシーポリシー に明文化しています。

4. Cloudflare Workers エッジ送信基盤

送信先のメールサーバーに直接 SMTP を張るのではなく、Cloudflare Workers 上の薄い中継 Worker を経由します。 これにより:

Worker 側は本文の恒常保存を行わず、運用上必要な期間(再送・障害解析用)のみメタデータを保持します。 詳細な扱いは プライバシーポリシー をご参照ください。

5. メソッドとの相性

本アプリは GTD の Inbox、Building a Second Brain の Capture、Inbox Zero の inbox 集約フェーズと相性が良い設計です。 具体的な運用パターンは 生産性メソッド解説 にまとめています。

非機能 / スコープ外

項目状態理由
画像添付非対応テキスト最速 capture に専念するため
同期 (端末間)非対応受信箱がそのまま同期先となる設計
タグ / フォルダ非対応メール側の検索・ラベルに委譲
Android 版未提供iOS の起動・送信特性に最適化中
本文サーバー保存行わないプライバシー設計上の原則

関連ドキュメント

Feedback

技術解説の誤り・追記提案は GitHub Org の Issue で受け付けています。 プロダクトに関するご意見は 公式お問い合わせ へ。