← ishizakahiroshi.com
リリース 2026-09-01

学校の一覧に住所を出して、利用者の住所は保存しなくした

机の上に広げた町の地図。ティール色のピンが数本立ち、隣に木の引き出しと小さく整理された紙の束が置かれている

進路サービス まなびマップ v0.9.0 の記録です。県ページと市区町村ページの学校一覧に所在地を出して、似た名前の学校を開かずに見分けられるようにしました。あわせて、トップで設定した地点についてこちらが保存する内容を減らしています。住所の文字列は保存せず、緯度経度もおよそ 100m 単位まで丸めた値だけを持ちます。プライバシーポリシーには「住所は保存しない」と書いてあったのに実装は保存していた、という食い違いを、実装側に合わせて直した回です。

note で読む(一般向け) → Qiita で読む(技術版) →

この記事のテーマ

ひとつは、保存する個人データを減らすという判断です。用途は「周辺の学校を出す」「距離を測る」「地図の中心に置く」「経路を開く」の 4 つで、どれも 100m ずれても結果が変わりません。だったら詳細な住所も小数第 7 位の座標も持つ理由がない、というところから逆算しました。

開いた引き出しの中身がほとんど空になり、数枚だけ残っている。取り出した紙束は紙飛行機とともに脇へ置かれている
引き出しの中身を減らしても、必要なものは残っている。今回やったのはそういう整理でした。

もうひとつは、技術版の主題であるデプロイの順番です。既存データを減らす migration に CHECK 制約を付けると、その制約を満たさない値を書く「今デプロイ中のフロント」が弾かれます。つまり migration を適用した瞬間から、新しいバンドルが配信されるまで本番の書き込みが失敗します。手順書どおりに Preview の目視を挟むと、その間ずっと壊れたままになります。

元の手順と入れ替え後の比較。適用からデプロイ完了までの区間が、目視を先に済ませることで短くなる
やることは同じで、順番だけ変えた。書き込みが失敗する区間は実測で約 6 分に収まりました。

ほかに、メンテナンス中の通常ページを HTTP 503 と Retry-After へ変更し、家族招待リンクのトークンを URL の fragment へ移し、CSP レポートの受け口を allowlist 方式にしています。redaction は「消しているはずのコード」を読むのではなく、URL の各所に合成の秘密を仕込んだレポートを実際に投げて、実ログで消えていることを確認しました。

関連リンク