日本向けの更年期記録・受診準備アプリ「メノブリッジ」をSwiftUIで開発しました。この記事では医療知識ではなく、健康情報を扱うアプリで実装上分けたデータ境界を紹介します。
アプリは診断や治療を行いません。体調記録と自由入力を端末内へ保存し、本人が確認した内容だけを明示的に書き出す設計です。
1. 体調記録と仕事相談メモを別モデルにする
受診メモには、記録日数、本人が入力した変化、生活への影響、質問を含められます。一方、仕事相談メモの初期値には、病名、症状、薬、月経、医療機関名を入れません。
表示時に同じ巨大モデルから項目を隠すのではなく、永続化モデル自体を分けました。UIの条件分岐ミスで健康情報が仕事用PDFへ混入するリスクを下げるためです。
2. 保存と共有を別のユーザー操作にする
記録しただけで外部送信しない。PDFやCSVの生成と共有は別操作にし、共有前にプレビューを挟みます。永続化層、レンダラー、Share Sheetも分離します。
レンダラーは渡されたスナップショットだけを出力し、共有先を知りません。保存イベントや画面遷移をきっかけに意図せず共有処理が走る経路を作らないためです。
3. HealthKitの権限と基本機能を分ける
Appleヘルスケアから読み込むのは、本人が説明を読み、ボタンを押した場合の睡眠データだけです。拒否、未設定、対象データなしでも、手入力を含む基本機能は使えます。
権限をアプリ全体の起動条件にせず、睡眠インポート機能の状態として扱います。インポート済みデータだけを削除する経路も、ほかの手入力記録と分けました。
4. 分析イベントと健康内容を分ける
健康情報を扱う画面で、自由入力や症状名を分析イベントへ入れると、ローカル保存の意味が崩れます。初期状態で分析を置かず、画面内容、自由記述、健康データを送る設計を採用しませんでした。
ローカルファーストでも「絶対安全」とは言わない
端末内保存は、絶対に漏えいしないことを意味しません。端末のロック、OSのバックアップ、ユーザーが選んだ共有先、書き出したファイルの管理も関係します。
そのため「体調記録と自由入力は端末内に保存」「共有と書き出しは本人の操作時だけ」と具体的に説明し、「完全匿名」「絶対安全」といった表現を避けます。