ハコヅミを作る #36:利用規約とプライバシーポリシーを、実装と照らして書く

前回(#35)で、セキュリティの見直しが済みました。公開までに要るものの2つ目は、利用規約とプライバシーポリシーです。

人のデータを預かるなら、何を預かり、どう扱うかを、書いて示す必要があります。Google のログインを一般に公開するときにも、プライバシーポリシーの URL が求められます。

  • 文は、Claude Code に下書きしてもらい、自分で全文を読んで決める
  • 「預かる情報」は、実装と1つずつ照らす
  • お問い合わせの窓口は、このブログのフォームを使う

下書きは任せる。決めるのは自分

規約の文を、一から自分で書くのは大変です。今の実装(何を預かり、どう消すか)は Claude Code がいちばんよく知っているので、下書きを任せました。

ただし、Issue には、はっきり書いておきました。

人が全文を読んで、直す・決めることが前提(法律の専門家の確認ではない)

下書きの中で、自分が決めることは、プルリクエストに一覧にしてもらいます。今回は、こういう点でした。

決めること 決めた内容
運営者の表記 「Jiru-Labo(じるラボ)」。個人の名前は書かない
サービスを終えるときの知らせ 90 日前までに知らせる。それまでは、データを書き出せる
凍結の条文 してはいけないことをしたときは、前もって知らせずに凍結できる
責任の範囲 わざと、または重い落ち度がある場合を除いて、責任を負わない
裁判所 運営者の住所地を管轄する裁判所(地名は出さない)

責任の範囲は、「いっさい責任を負いません」と書きたくなるところです。Claude Code によると、そう書くと、消費者契約法で無効になりうるそうです。こういう指摘は、1人では気づけません。

文は、データベースには持たず、ページの中に直接書きました。変えるときは、プルリクエストで行います。履歴が Git に残るので、「いつ、どこを変えたか」があとから分かります。


「預かる情報」を、実装と照らす

プライバシーポリシーで、いちばん気をつけたのは、書いたことと、実際にやっていることが食い違わないことです。

Issue の段階では、預かる情報を、こう考えていました。

  • Google から受け取るもの:メールアドレス、名前、アカウントの識別子
  • 自動で記録されるもの:ログインの記録(日時、IP アドレス、ブラウザの種類)

Claude Code は、文を書く前に、開発用のデータベースを確かめました。読み取りだけで、件数を数える問い合わせです。すると、思っていたのと違うところが出てきました。

思っていたこと 実際
Google から受け取るのは、メールアドレスと名前 プロフィールの画像の URL と、ログインのトークンも保存されていた
ログインの記録に、IP アドレスが入る 開発環境では、入っていなかった(列はある)

ログインの仕組み(Better Auth)が、自分の知らないうちに保存していたものです。画面には出していないので、気づいていませんでした。ポリシーには、どちらも書きました。IP アドレスは、「含まれることがあります」としています。

もう2つ、実装から分かって、書き足したことがあります。

  • Google Fonts:画面のフォントを読み込むとき、ブラウザから Google へ、IP アドレスなどが送られる
  • このブログの解析のクッキー:前回見つけたもの。ハコヅミにも送られるが、読まないし、使わない

2つ目は、書かずに「解析のクッキーは使いません」とだけ書く手もありました。ただ、開発者ツールを開いた人には、クッキーが見えます。書いてあることと見えるものが食い違うほうが、よくないと考えました。

プライバシーポリシーのページ。見出し「1. 預かる情報」の下に、Google から受け取るものとして、メールアドレス、名前とプロフィールの画像の URL、アカウントを見分けるための番号、ログインのために Google が発行する情報が並んでいる

預かる情報は、データベースを確かめてから書いた

消えるまでの時間

退会すると、データと画像は、すぐに消えます(#30)。ただし、Cloudflare のデータベースには、障害のときにもとに戻すための記録があります。そこには、しばらく残ります。

最初の下書きは、「最長で 30 日」でした。Cloudflare の有料プランの数字です。今は無料プランで行くつもりなので、7 日に直してもらいました。

ここには、小さな落とし穴があります。将来、有料プランに変えると、記録が残る日数が延びます。そのとき、文が 7 日のままだと、実際より短い日数を約束していることになります。「プランを変えるときは、先に文を直す」と、CLAUDE.md に書いておきました。


リンクを置く場所

2つのページへのリンクは、次の場所に置きました。

  • フッター(全部の画面):「利用規約」「プライバシーポリシー」「お問い合わせ」
  • ログインの画面:「ログインすると、利用規約とプライバシーポリシーに同意したものとみなします。」
  • アカウントの画面:3つのリンク
  • 凍結の画面:お問い合わせへのリンク
ログインの画面。「Google でログイン」のボタンの下に、利用規約とプライバシーポリシーに同意したものとみなす、という文とリンクがある。フッターには、利用規約、プライバシーポリシー、お問い合わせのリンクが並んでいる

ログインのボタンの下の、同意の文。フッターには3つのリンク

1つ、Issue に書いていなかったことがあります。凍結された人は、凍結の画面のほかは、何も開けません(#29)。そのままだと、フッターの「利用規約」を押しても、凍結の画面に戻されます。凍結の根拠は、規約に書いてあります。凍結された人も、2つのページは読めるようにしました。


お問い合わせは、このブログのフォームで受ける

#34で決めたとおり、ハコヅミの中には、お問い合わせのフォームを作りません。このブログのお問い合わせフォームを使います。

フォームの側に、次の直しを入れました。

  • 「お問い合わせの対象」の選択欄。ハコヅミから来たときは、ハコヅミが選ばれた状態で開く
  • ハコヅミを選ぶと、「ログインに使っている Google アカウントのメールアドレスを入れてください」と出る
  • 届くメールの件名の先頭に、[ハコヅミ] と入る
このブログのお問い合わせフォーム。「お問い合わせの対象」の選択欄で、ハコヅミが選ばれている。その下に、ログインに使っている Google アカウントのメールアドレスを入れてください、という案内が出ている

ハコヅミのリンクから開くと、ハコヅミが選ばれた状態になる

フォームは別のサイトなので、誰がログインしているかは分かりません。メールアドレスを URL に付けて渡せば、入力の手間は省けます。ただ、個人の情報を URL に付けることになります。URL は、履歴やログに残ります。付けるのは、サービスの名前だけにしました。

フォームの送信を受ける仕組み(Cloudflare Workers)も、直しています。ハコヅミを公開すると、フォームを見る人が増えます。入力の長さの上限と、送信の回数の制限(1分に 5 回)を足しました。中身を確かめる処理は関数に切り出して、テストを書いています。フォームを作ったとき(こちらの記事)には、テストがありませんでした。


おわりに

  • 規約の下書きは任せてよい。ただし、全文を読んで決めるのは自分
  • 「人が決めること」は、一覧にしてもらう。文の中に埋もれさせない
  • プライバシーポリシーは、実装と照らして書く。使っている仕組みが、知らないうちに保存しているものがある
  • 見える人には見えるものは、正直に書く
  • 外の事情(プランなど)で変わる数字は、変わるときに文を直す、と決めておく
  • 個人の情報は、URL に付けない

次回は、ログインしていない人に見せる、サービスの紹介のページです。

← トップページに戻る