AI・セキュリティ・プライバシー
家の場所、所有物、写真、購入情報、保証書、保管場所は、暮らしを便利にする一方で、組み合わせると生活パターンを推測できる情報です。UCHIZUは「多く集める」より、「必要な時だけ使い、利用者が選び、戻せる」ことを優先します。
Local firstクラウドなしでも主要導線を残す
Household scope世帯境界でDatabaseと文書を分離
Evidence firstAI推測と公式判定を混ぜない
1. 扱うデータ
| 分類 | 例 | 主な保護方針 |
|---|---|---|
| アカウント | メール、認証状態、表示名 | 認証基盤で管理し、アプリへ秘密情報を埋め込まない |
| 世帯 | 家、地域設定、構成、役割 | 世帯IDとmembershipで参照範囲を制御 |
| 場所 | 部屋、家具・収納、置き場所 | 日常利用に必要な粒度だけ保存 |
| モノ | 名称、型番、数量、期限、購入、保証 | 世帯内データとして分離 |
| 写真・文書 | 商品写真、レシート、保証書、説明書 | 非公開Storageと短時間URLを前提にする |
| 公式情報 | 自治体、出典、更新日、ライセンス | 家庭データと分離し、原典と取得状態を保持 |
| 外部候補 | AI候補、商品候補、価格 | Provider、取得時刻、状態、修正経路を保持 |
2. 保存先を利用者が選べる
text
ゲスト利用
└─ 端末内保存
クラウド利用を明示的に選択
└─ Supabase Auth
└─ 世帯単位のPostgreSQLデータ
└─ 非公開Storage初回起動でカメラ、写真、通知、クラウドを一括要求しません。各機能を使う時に説明し、許可しない場合も手入力とローカル経路へ戻れる設計です。
3. Databaseと世帯分離
UCHIZUのクラウド構成は、Supabase Auth、PostgreSQL、Storage、Edge Functionsを利用する設計です。画面からDatabaseへ無制限にアクセスするのではなく、世帯membershipとRow Level Securityを境界にします。
基本関係
text
Profile
└─ Household membership: owner / editor / viewer
└─ Home
├─ Room
├─ Furniture / Storage location
├─ Item
├─ Documents / Images
├─ Events / Notifications / Notes
└─ Shopping / Lifecycle historyownerは世帯と権限の管理を担当します。editorは許可された世帯情報を編集します。viewerは閲覧を中心とし、書き込みを制限します。- 世帯外の利用者は、IDを知っていても参照できないことをRLSで制御します。
- 表示名を変更しても関係が壊れないよう、内部の安定したIDで関連付けます。
現在の検証範囲
2026年8月26日の遠隔自動検証では、一時利用者4件を使い、owner、editor、viewer、世帯外利用者のDatabase境界、招待、役割変更、削除を確認しました。これは物理端末2台の長時間利用や、対象公開ビルドの最終保証を意味しません。
4. 写真と文書
- 家庭内の写真・文書はpublic bucketへ置かず、非公開Storageを使います。
- 表示時は短時間のsigned URLを発行する設計です。
- viewerや世帯外利用者の書き込みを拒否します。
- 端末だけで有効な
file://などのURIをクラウドバックアップへ残しません。 - 削除時はDatabaseの行だけでなくStorage objectも対象にします。
遠隔自動検証では、owner・editorの書き込み、viewer・世帯外利用者の拒否、別世帯の分離、削除を確認済みです。signed URLが実時間で失効することと、公開対象ビルドとの最終的な対応付けは未検証です。
5. 外部サービスへの送信
外部送信は機能の利用時にだけ行い、送信しなくても主要な手入力経路を残します。
| 利用場面 | 送信候補 | 送信しない場合 |
|---|---|---|
| 写真解析 | 選択した写真、解析に必要な項目 | 手入力で登録 |
| 商品検索 | 商品名、型番、JANなど | 候補を手入力 |
| URL読取 | 利用者が選んだ商品URL | URLを保持して手入力 |
| クラウド同期 | 世帯内で共有するデータ | 端末内で利用 |
| Push | 通知tokenと必要最小限の配送情報 | アプリ内通知・一覧で確認 |
OpenAI、商品Provider、その他の秘密鍵はExpoクライアントへ埋め込まず、Edge Functionsのsecretとして扱います。外部サービスが未設定、失敗、利用条件外の場合は、推測値で埋めずにmanual、cache、公式ページへ戻します。
6. AIの責任境界
AIに任せること
- 写真から一般的な品目名、メーカー、型番の候補を出す
- 自治体情報を探すための一般品目語を提案する
- 構造化候補や平易な説明文を提案する
- 売却・譲渡の文章案を作る
候補は利用者が確認・修正してから保存します。
AIに任せないこと
- 分別区分、収集日、粗大ごみ料金
- 施設の所在地、営業時間、開設状況
- 避難所や経路の安全性、最寄り、十分性
- 商品のlive価格、在庫、配送、保証
- 利用者の同意、出品、購入、削除の自動確定
これらは公式データ、契約したProvider、または利用者の明示操作に基づきます。確認できない場合は、不明または公式確認が必要であることを表示します。
7. 公式情報とfallback
| 状態 | 表示と動作 |
|---|---|
| live | 現在取得できた公式データ。提供元と取得時刻を表示 |
| cache | 同じ自治体について保存済みの検証済みデータ |
| official snapshot | 取得時点を明記した公式資料の保存情報 |
| unsupported | 安全な判定に必要な情報がない。公式確認へ案内 |
通信失敗時に、別自治体の値、一般論、AIの推測で曜日や金額を補いません。公式資料の条件が「30cmを超える」の場合、ちょうど30cmを同じ扱いにするなど、比較条件そのものも原文に合わせます。
8. 書き出し、削除、保持
書き出し
利用者が自分のデータを持ち出せるよう、JSONの書き出しと再取り込みを用意します。写真・文書を含む復元範囲は、端末とクラウドの構成により別途確認が必要です。
アカウント削除
削除対象は認証だけではありません。
- Profileと認証情報
- 世帯membership、招待、共有状態
- Home、場所、モノ、履歴
- 非公開の写真・文書
- Push tokenや外部連携の回収対象
遠隔自動検証では、一時アカウント、Database、Storageの残留0件を確認しました。物理端末内の管理領域、外部OAuthの認可取消、公開ビルドの保持期間ジョブまで含む最終確認は残っています。
9. 開発時の安全策
.envや秘密鍵をGitへ入れない- クライアントにProvider secretを埋め込まない
- マイグレーションとRLSを世帯役割別に検証する
- デモ値、cache、live、unsupportedを画面とデータで区別する
- 公式情報に提供元、更新日、ライセンス、原典を持たせる
- 法務文書の版、本文hash、同意時刻、経路を分けて記録する
- 公開ドメインが実際に配信するHTMLとbundleを対象に確認する
- 一時アカウントを使う遠隔検証は、終了後の残留データも確認する
10. 公開前に残る確認
| 項目 | 現在の状態 |
|---|---|
| 実在メールへのOTP配送 | 未検証 |
| 物理iPhone・Androidのカメラ、文書、通知 | 未検証 |
| 2台の物理端末でのRealtime・競合・再接続 | 未検証 |
| Expo PushのAPNs・FCM本番配信 | 未検証 |
| Google・Apple認証の認可取消 | 未実装または実サービス未検証のため公開時は無効化が必要 |
| 法務文書と公開URL | 技術的な一致確認とは別に、正式運営情報と専門家確認が必要 |
| ストア申告 | App Privacy、Data safetyを実装内容と照合する必要あり |
セキュリティ機能があることと、本番安全性の保証は別です
UCHIZUは確認済みの境界を公開しますが、未検証の実機・契約・公開設定を完了扱いにはしません。
UCHIZUは確認済みの境界を公開しますが、未検証の実機・契約・公開設定を完了扱いにはしません。
機能別の最新判定は実装状況をご覧ください。