Features — 技術仕様と設計
Captio式シンプルメモの中核を支える技術コンポーネントを、開発者向けに解説します。 エンドユーザー向けの機能紹介は 公式サイト をご覧ください。
性能ターゲット
これらは 「思考の速度を落とさない」 という設計目標から逆算した数値です。 数値の意味と測定方法は 最速メモアプリベンチマーク記事 で詳述しています。
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 に保管し、アプリ自身であってもメモリ上の必要時間外は鍵を保持しません。
- 暗号方式: AES-GCM (256-bit), nonce はメモごとにランダム生成 (96-bit)
- 鍵保管: iOS Keychain(
kSecAttrAccessibleWhenUnlockedThisDeviceOnly) - iCloud / 他端末への鍵同期: なし(端末ローカル限定)
- 復号タイミング: 履歴閲覧時 / 送信直前のみ
プライバシー方針の全体像は プライバシーポリシー に明文化しています。
4. Cloudflare Workers エッジ送信基盤
送信先のメールサーバーに直接 SMTP を張るのではなく、Cloudflare Workers 上の薄い中継 Worker を経由します。 これにより:
- 世界中のエッジから 150ms 前後で受理応答を返せる
- メール本文は Worker 内で受け取って即時上流に送り、ログに本文を保存しない設計に統一できる
- レート制御・スパム保護・送信元 IP の信頼性管理を 1 箇所に集約できる
Worker 側は本文の恒常保存を行わず、運用上必要な期間(再送・障害解析用)のみメタデータを保持します。 詳細な扱いは プライバシーポリシー をご参照ください。
5. メソッドとの相性
本アプリは GTD の Inbox、Building a Second Brain の Capture、Inbox Zero の inbox 集約フェーズと相性が良い設計です。 具体的な運用パターンは 生産性メソッド解説 にまとめています。
非機能 / スコープ外
| 項目 | 状態 | 理由 |
|---|---|---|
| 画像添付 | 非対応 | テキスト最速 capture に専念するため |
| 同期 (端末間) | 非対応 | 受信箱がそのまま同期先となる設計 |
| タグ / フォルダ | 非対応 | メール側の検索・ラベルに委譲 |
| Android 版 | 未提供 | iOS の起動・送信特性に最適化中 |
| 本文サーバー保存 | 行わない | プライバシー設計上の原則 |
関連ドキュメント
技術解説の誤り・追記提案は GitHub Org の Issue で受け付けています。 プロダクトに関するご意見は 公式お問い合わせ へ。