# プライバシーポリシー

正規URL：https://hanafuda.lemme.dev/ja/privacy/

最終更新日：2026年9月30日

コンピュータとの練習はアカウントなしで遊べ、その対戦はお使いのブラウザの中だけで完結します。オンライン対戦にはGoogleまたはAppleでのログインが必要です。ログインすると、ほかのプレイヤーに表示されるプロフィール（名前・アバター・戦績）、作成した部屋（閉じるまで）、暗号化された対戦記録と2人が署名した結果（30日後に削除される設定）が保存されます。広告、アクセス解析、トラッキングのためのコードは使っていません。

> **要点**
>
> - 練習にはアカウントが要らず、対戦の内容をサーバーに送ることもありません。
> - オンライン対戦のログイン（GoogleまたはApple）とデータの保存には、Googleのアプリ基盤であるFirebaseを使っています。
> - ほかのプレイヤーには、表示名、アバター、タグ、戦績が見えます。
> - オンライン対戦では、設定で隠さない限り、対戦相手にあなたのIPアドレスが見えます。
> - 対戦中のオンライン対戦は、あとで戻れるよう、暗号化して最長7日間お使いの端末に保存します。ログアウトすると削除されます。
> - 一部の設定はお使いのブラウザにだけ保存されます。このサイト自身はCookieを使いません。

このプライバシーポリシーは、hanafuda.lemme.devで公開している「手合わせ 花札こいこいオンライン」（日本語版・英語版）と、このサイトの解説ページに適用されます。ブラウザのタブで遊ぶ場合も、[アプリとしてインストール](https://hanafuda.lemme.dev/ja/app/)して遊ぶ場合も同じです。以下の「運営者」は、「手合わせ」を運営する者を指します。保存する情報は、ログイン、対戦、プロフィールとランキングの表示、スクリプトなどによる不正の防止といった、ゲームを提供するためにだけ使います。このページでは、下記の施行日の時点でゲームが実際に行っていることを説明します。

## アカウントなしの練習

[コンピュータとの練習](https://hanafuda.lemme.dev/ja/vs-computer/)は、すべてお使いのブラウザの中で進みます。手や結果が運営者のサーバーに送られることはなく、ランキングにも反映されません。練習で保存されるのは、練習用に選んだゲームの設定、終えた対戦の数（アプリのインストールを案内するタイミングの判断に使います）、効果音などの端末の設定だけで、どれもお使いの端末の中に残ります（一覧はお使いの端末に保存される情報にあります）。

ただし、練習であっても、ゲームの画面を開くとGoogleのサービスに接続します。ゲームがFirebase App Checkを起動し、reCAPTCHA Enterpriseを実行するためです。また、ゲームとこの解説ページは、フォントをGoogle Fontsから読み込みます。詳しくは情報を受け取る外部サービスで説明します。

## GoogleまたはAppleでのログイン

[オンライン対戦](https://hanafuda.lemme.dev/ja/play-with-friends/)にはGoogleアカウントかAppleアカウントが必要で、ほかの方法ではログインできません。Firebase Authenticationには、このゲーム用のアカウント記録が作られます。記録されるのは、ユーザーID、アカウントの作成日時と最終ログイン日時、そしてログインに使ったサービスから渡される次の情報です。

- **Google**：アカウントの基本的なプロフィール情報（メールアドレス、Googleアカウントの名前、プロフィール写真のリンク）
- **Apple**：Appleアカウントの識別子と、初回のログイン時に共有を選んだ場合の名前。メールアドレスが渡されることもあり、それはあなたのメールアドレスか、非公開を選んだ場合はAppleがこのゲーム用に作る転送用のアドレスです。写真は渡されません。

アカウントメニューの**ログイン方法**から、両方を同じプレイヤーにリンクできます。リンクすると、どちらでも同じプロフィール、戦績、対戦にログインでき、アカウント記録にはそれぞれから渡された情報が入ります。もう一方がリンクされていれば、片方のリンクを解除でき、解除したアカウントではこのプレイヤーにログインできなくなります。すでに自分のプレイヤーがあるGoogleアカウントやAppleアカウントを別のプレイヤーにリンクすることはできず、2人のプレイヤーを統合することもありません。

このうちゲームが使うのは、プレイヤーを区別するためのユーザーIDと、初回ログイン時に表示名の初期値として一度だけ使うGoogleまたはAppleの名前です。メールアドレスやGoogleのプロフィール写真をほかのプレイヤーに見せることはありません。連絡先、ファイル、メールなど、それ以外の情報をGoogleやAppleに求めることもありません。アカウント記録は、運営者がFirebaseの管理画面と管理ツールで確認できます。

## プロフィールとランキング

初めてログインしたときに、Firebaseのデータベース（Cloud Firestore）にプロフィールが作られます。内容は次のとおりです。

- 表示名（24文字まで）、アバターのシードと背景色
- オンライン対戦の戦績：対戦数、勝ち数、負け数、獲得した合計点、ひとつの回戦で得た最高得点
- プロフィールの作成日時、最後に利用した日時、最後に対戦が戦績に加わった日時

プロフィールは、ログイン中のほかのプレイヤーのゲームから読むことができます。ロビーに名前とアバターを表示したり、オンライン対戦の勝ち数・負け数・獲得した合計点をもとに上位10人をランキングに並べたりするためです。名前の横には、ユーザーIDから計算される「#A34E」のような4文字のタグが、誰にでも表示されます（タグ自体は保存しません）。アバターはシードをもとにブラウザ内で描くため、シードを外部のアバターサービスに送ることはありません。名前とアバターは、「プロフィールを編集」からいつでも変えられます。

戦績が変わるのは、オンライン対戦の結果に2人のゲームが同じ内容で署名したときだけです（部屋とオンライン対戦）。2つが一致することをデータベースが確かめ、1つの対戦を1回だけ加えます。加えた対戦ごとに、あなたのアカウントには目印（対戦、あなたの席、勝ち負け、加わった得点と最高得点）と、最後に加えた対戦の記録が残ります。読めるのはあなただけで、同じ対戦が2度数えられないよう、プロフィールがある限り保存します。運営者は管理ツールで戦績や表示名を修正したり、アカウントをランキングに表示しないようにしたりできます。ランキングから外したアカウントの一覧は、ランキングから除くために、ログイン中のプレイヤーのゲームから読めます。一方、運営者が理由を書いた短いメモは別に保存し、どのプレイヤーも読めません。また、起動してすぐに、オフラインでも自分のプロフィールを表示できるように、そのコピーをお使いの端末にも保存します。

プロフィールとアカウント記録は、アカウントがある限り保存します。しばらく使われていないアカウントを自動で削除することはありません（削除の方法は情報の変更と削除をご覧ください）。

## 部屋とオンライン対戦

部屋、参加リクエスト、対戦の状態は、FirebaseのRealtime Databaseを通じてやり取りします。ブラウザ同士が直接つながっていない間は、手もここを通ります（直接接続）。手をはじめ、対戦中に2人のゲームがやり取りするものはすべて、お使いのブラウザの中でエンドツーエンド暗号化して署名してから送信します。サーバーはそれを中継・保存しますが、中身を読むことはできません。下の表の情報は運営者もFirebaseの管理画面で見られますが、手の中身は読めません。

オンライン対戦で保存される情報

| 保存される情報 | 読めるのは | 保存期間 |
| --- | --- | --- |
| 部屋 · 部屋コード、ホストの名前とアバター、公開か非公開か、パスワードの有無、ゲームの設定、部屋を作ったゲームのバージョン、着席しているプレイヤー。あわせて、ホストのアカウントごとに、ホストしている部屋のコード | 部屋コードを知っている、ログイン中のプレイヤー（部屋の中身をすべて読めるのは対戦する2人だけ） | ホストが部屋を閉じるか、別の部屋を作るまで（対戦中は閉じられません）。閉じられないままの部屋を自動で削除する仕組みはありません。 |
| 部屋を作った時刻 · あなたのアカウントごとに、直近4つの部屋を作った時刻と、部屋の作成が最後に停止された時刻。20秒以内に5つの部屋を作ると、データベースは1分間、新しい部屋を受け付けません | あなただけ（セキュリティルールが確認に使います） | アカウントがある限り（部屋を作るたびに、いちばん古い時刻と入れ替わります） |
| ロビーの掲載（公開の部屋） · ホストの名前とアバター、回戦数、ゲームの設定 | ログイン中のすべてのプレイヤー | 部屋が対戦相手を待っていて、ホストが接続している間 |
| 参加リクエスト · 名前、アバター、ユーザーID。パスワード付きの部屋では、入力したパスワードから計算した照合用の値（パスワードそのものではありません） | 本人と部屋のホスト | 取り消すか、部屋が閉じられるまで。承認されたリクエストは、対戦後に席が空いた時点で削除 |
| 部屋のパスワード · 部屋コードをソルトにしてscryptで計算した照合用の値（パスワードそのものではありません） | どのプレイヤーも読めません（セキュリティルールの照合にだけ使います） | 部屋が閉じられるまで |
| 対戦の状態 · 各プレイヤーの接続状態とその時刻（サーバーの時計）、鍵交換のメッセージ（公開鍵だけ）、暗号化した接続情報と対戦の状況、対戦を終わらせたプレイヤーとその時刻・理由（投了、離席、「異議あり」での中止、最後まで対戦）、相手だけが読める暗号化されたメモ | 対戦する2人 | 対戦後に席が空くか、部屋が閉じられるまで。ホストが席を空けたときは、対戦の終わり方が、そのゲストだけが読める形で部屋に残り、次のゲストが入室するか部屋が閉じられると削除 |
| 手 · 1手ごとに暗号化・署名したデータと、相手の暗号化された応答。ブラウザ同士が直接つながっていない間だけ | 対戦する2人 | 2人が署名した時点でRealtime Databaseから削除。残ったものは、席が空くか部屋が閉じられるときに削除 |
| 対戦記録 · 部屋コード、両プレイヤーのユーザーIDと署名用の公開鍵、回戦数、暗号化されたままのすべての手 | 対戦した2人だけ（プレイヤーが変更・削除することはできません） | 書き込みから30日後に期限切れとなり、その後データベースから自動で削除 |
| 対戦の結果 · 各プレイヤーが署名した対戦の終わり方（最終の持ち点と最高得点、勝者、終わり方）、同じ内容を相手のために暗号化したもの。結果を確認しなかったプレイヤーからは、確認しなかったという記録と、相手のために暗号化したその理由（一語） | 対戦した2人だけ（プレイヤーが変更・削除することはできません） | 書き込みから30日後に期限切れとなり、その後データベースから自動で削除 |

対戦記録には、両者が署名したすべての手と、2人が署名した結果が残るため、あとから対戦を検証できます。ゲームの画面に表示するのは、結果が確認されたかどうかだけです。戦績が変わるのは、2人の署名した結果が同じときだけです（プロフィールとランキング）。また、ページの再読み込みやアプリの再起動のあとで対戦を続けられるように、必要な情報を暗号化してお使いの端末に保存します（お使いの端末に保存される情報）。

## 直接接続

オンライン対戦では、どの対戦でも2人のブラウザが直接つながります（WebRTC）。そのため、お互いのIPアドレスが相手に見えます。ゲームの「設定」で**自分のIPアドレスを隠す**をオンにすると（初期設定はオフ）、あなたの側はTURN中継サーバー経由でのみ、中継サーバーがない場合はゲームのサーバー経由でつながり、相手にIPアドレスは見えません。どちらになるかは、部屋の作成画面と招待ページに表示されます。

2つのブラウザをつなぐ経路を探すため、それぞれのブラウザは、GoogleとCloudflareが運営する公開STUNサーバーに自分のグローバルIPアドレスを問い合わせます。ネットワークの都合でそれでもつながらないときは、TURNの中継サービス（現在はMetered）を経由することがあります。中継サービスには双方のIPアドレスが見えますが、流れるのは暗号化されたデータだけです。接続に必要な情報は、その対戦の鍵で暗号化したうえで部屋を通じて交換するため、データベースにはその中のアドレスは見えません。直接の接続がつながっていない間は、手はRealtime Databaseを通ります（いつもどおり暗号化されています）。

## 対戦相手に見えるもの

オンライン対戦中、対戦相手のゲームには、あなたの表示名、アバター、タグ、ユーザーID、接続しているかどうかとその時刻、あなたが打った手（札は出したときに初めて見えます）、対戦の終わらせ方、あなたが署名した結果が見えます。**自分のIPアドレスを隠す**をオンにしていなければ、直接接続を通じてIPアドレスも見えます。メールアドレス、Googleのプロフィール写真、どのアカウントでログインしているか、ほかの対戦、あなたの設定が見えることはありません。

相手の端末も、あなたと同じように対戦を暗号化して最長7日間保存します。また、あなたが対戦を途中で抜けた場合（投了、勝ちを申告されるまでの離席、「異議あり」での中止）や、相手のゲームが確認しなかった勝ちを申告した場合は、相手のブラウザにあなたのユーザーIDとその時点の名前が記録されます（お使いの端末に保存される情報の`hanafuda:v1:moderation`を参照）。

## お使いの端末に保存される情報

ゲームは、次の情報をブラウザのローカルストレージに保存します。これらがどこかに送られることはなく、ブラウザでこのサイトのデータを削除するとすべて消えます。

**`hanafuda:v1:lang`**

選んだ言語（日本語または英語）。次からもその言語でページを開くためのものです。

**`hanafuda:v1:session`**

この端末でログインしていることを示す目印。ゲームを最初から適切な画面で開くために使い、ログアウトすると削除されます。

**`hanafuda:v1:profile:<ユーザーID>`**

自分のプロフィールのコピー（ユーザーID、名前、アバター、背景色）。起動を速くし、オフラインでも表示するためのものです。

**`hanafuda:v1:settings`**

端末ごとの設定：効果音のオン・オフと音量、IPアドレスを隠すかどうか。

**`hanafuda:v1:houseRules:room`、`hanafuda:v1:houseRules:practice`**

部屋を作るときと練習で、最後に選んだゲームの設定。

**`hanafuda:v1:rulesPanel`**

広い画面で、ルールのパネルを卓の横に開いたままにするかどうか。

**`hanafuda:v1:games-finished`、`hanafuda:v1:install-promo`**

この端末で終えた対戦の数と、アプリのインストールの案内を閉じた日時。

**`hanafuda:v6:match:<ユーザーID>:<部屋コード>:<セッション>`**

対戦中か、終わったばかりのオンライン対戦を暗号化したもの。対戦の鍵、2人が署名した手、勝ちの申告を裏付けたり退けたりするための時刻、結果の手続きの状況が入っています。再読み込みやアプリを閉じたあとでも対戦に戻れるように、また部屋を出たあとでも結果を確認できるように保存します。下の鍵がなければ読めません。結果が決まって部屋を出た時点で削除され、遅くとも最後の変更から7日後に削除されます。

**`hanafuda:v6:vault-key:<ユーザーID>`**

保存した対戦を暗号化する鍵。この鍵自体も、ブラウザが自身のデータベース（IndexedDBの`hanafuda-vault`）に保管し、どのページにも取り出させない鍵で暗号化しています。

**`hanafuda:v6:active-match`**

最後に遊んでいたオンライン対戦（部屋コード、あなたの席、対戦のセッション）とその日時。ゲームがその対戦に戻れるようにするためのものです。

**`hanafuda:v6:psk:<部屋コード>`**

入力した部屋のパスワードから計算した鍵（パスワードそのものではありません）。対戦が始まるまでの間に再読み込みしても接続を完了できるように、それまでの間だけ保存し、その後は保存した対戦の中に移します。

**`hanafuda:v6:seat:<ユーザーID>:<部屋コード>`**

Web Locksの機能がないブラウザでだけ使います。その部屋をどのタブで遊んでいるかを数秒ごとに更新しながら記録します。

**`hanafuda:v1:moderation:<自分のユーザーID>`**

ホストとしての記録：あなたとの対戦を途中で抜けたり、あなたのゲームが確認しなかった勝ちを申告したりしたプレイヤー（ユーザーID、その時点の名前、理由、日時）と、12時間の入室禁止にしたプレイヤー（禁止が解ける日時）。記録はブラウザの中にだけ保存します。入室禁止にすると、部屋のデータにはそのプレイヤーの参加リクエストを断ったことだけが記録されます。

**`hanafuda:v1:seenRounds`**

最近のオンライン対戦ごとに、結果を閉じた最後の回戦。再読み込みしても同じ結果を再表示しないためです。

**IndexedDB `hanafuda-debug`**

最近20件（30日以内）の対戦のデバッグログ：両者に見えていた手と各回の点数の記録です。対戦が終わった後に保存して、不具合の報告に添えられます。鍵、名前、ユーザーIDは含まず、ゲームがどこかへ送ることはなく、ログアウトすると削除されます。

ログアウトすると、保存した対戦とその鍵、最後に遊んでいた対戦の記録はこの端末から削除されます。タブを閉じるとブラウザが消去するセッションストレージには、次のものを保存します：上の対戦とその鍵を端末に残せないブラウザ（一部のプライベートウィンドウなど）で代わりに保存する対戦と鍵、ゲームがこのタブを未完了の対戦にすでに戻したかどうか、ログイン画面を開いている間の招待リンクとログイン先のサービス、リンクを待っているログイン（そのためのGoogleまたはAppleのトークン。ゲームが案内する方法でログインするか、リンクしないことを選ぶか、ログアウトするまで）、そのタブが最後に更新したバージョン、言語の案内を閉じたかどうか。ブラウザ内のデータベース（IndexedDB）には、保存した対戦の鍵を守る鍵と、Firebaseのソフトウェアが使うログイン状態、App Checkのトークン、利用した日付（バージョン情報とともにGoogleに送られます）を保存します。

サービスワーカーは、ゲームの起動と練習をオフラインでもできるように、このサイトのページ、プログラム、札の画像、アイコン、Google Fontsのフォントファイルをブラウザのキャッシュに保存します。内容は誰にとっても同じで、あなたに関する情報は含みません。

## 情報を受け取る外部サービス

「手合わせ」は、次のサービスのほかに独自のサーバーを持っていません。各サービスは、それぞれの利用規約とプライバシーポリシー（このページの末尾に掲載）に従って情報を扱います。

外部サービスと受け取る情報

| サービスと用途 | 受け取る情報 |
| --- | --- |
| Firebase（Google） · Hosting、Authentication、Realtime Database、Cloud Firestore：サイトの配信、ログイン、部屋・手・プロフィールの保存 | このページで説明している情報と、通信ごとのIPアドレスやブラウザの情報。Realtime DatabaseはGoogleのeurope-west1リージョン（ベルギー）にあります。 |
| Appleでサインイン（Apple） · Appleアカウントでのログイン（選んだ場合） | Appleのログイン画面に入力した内容と、IPアドレスやブラウザの情報。そのうえでAppleは、上の「GoogleまたはAppleでのログイン」で説明した情報をFirebaseに渡します。 |
| reCAPTCHA Enterprise（Google） · Firebase App Checkを通じて、通信がスクリプトではなく本物のゲームから来ていることを確認 | 端末とブラウザに関する情報。ゲームの画面を開いている間、分析のためGoogleに送られます。 |
| Google Fonts（Google） · ゲームとこのサイトの全ページのフォント | IPアドレスとブラウザの情報（通常のダウンロードと同じ） |
| Cloudflare · サイトの配信（このサイトのドメインはCloudflareのネットワークを通じて配信されています） | 通信ごとのIPアドレスとブラウザの情報 |
| STUNサーバー（Google、Cloudflare）、TURN中継サービス（Metered） · オンライン対戦の直接接続 | IPアドレス（中継サービスは暗号化されたデータも中継します） |

ゲームはreCAPTCHAで保護されており、Googleの[プライバシーポリシー](https://policies.google.com/privacy?hl=ja)と[利用規約](https://policies.google.com/terms?hl=ja)が適用されます。Googleは、その規約に従って、あなたのお住まいの国以外で情報を処理することがあります。

## 広告・アクセス解析・トラッキングは使いません

ゲームにもこのサイトにも、広告、アクセス解析、トラッキングのためのコードは入っておらず、独自のCookieも使っていません。情報を販売したり、広告のために第三者に提供したりすることもありません。GoogleとAppleのログイン画面、reCAPTCHA、Cloudflareはそれぞれの会社が運営しており、各社のポリシーに従って独自のCookieを使うことがあります。解説ページで動くのは、端末に保存した言語の選択とログインの目印（上の一覧を参照）を読む短いスクリプトと、一部のページの点数計算機のような小さなツールだけです。

## 情報の変更と削除

- **表示される情報を変える：**「プロフィールを編集」から、表示名とアバターを変更できます。
- **部屋を閉じる：**部屋の中またはロビーの「部屋を閉じる」で、部屋、ロビーの掲載、参加リクエスト、パスワードの照合用の値が削除されます。対戦中の部屋では、ロビーに代わりに「投了して閉じる」が表示されます。前回の対戦の相手が、対戦が終わったときに離れていて、まだ結果を確認していない場合、部屋の中の「部屋を閉じる」は相手のために部屋を対戦相手なしで残し、ロビーの「部屋を閉じる」は削除する前に確認します。
- **端末の情報を消す：**ログアウトし（保存した対戦とその鍵が削除されます）、ブラウザの設定でこのサイトのデータを削除する（またはアプリをアンインストールする）と、お使いの端末に保存される情報がすべて消えます。
- **ログイン方法を変える：**アカウントメニューの**ログイン方法**から、GoogleアカウントとAppleアカウントをリンクしたり、リンクを解除したりできます。
- **Googleアカウントとの連携を解除する：**Googleアカウントの[サードパーティ製のアプリとサービス](https://myaccount.google.com/connections)から、このゲームのアクセスを削除できます。以後のログインはできなくなりますが、すでに保存されている情報は削除されません。
- **Appleアカウントとの連携を解除する：**iPhone、iPad、Macの設定、または[account.apple.com](https://account.apple.com)のAppleアカウントの設定で、このゲームでの「Appleでサインイン」の使用を停止できます。こちらも以後のログインができなくなるだけで、すでに保存されている情報は削除されません。
- **情報の開示や削除を求める：**ゲームの中には、アカウントを削除する機能はありません。下記の連絡先までご連絡いただければ、あなたのアカウントについて保存している情報をお知らせするか、アカウント記録、プロフィール、戦績とそれに数えた対戦の目印、あなたがホストしている部屋を削除します。対戦記録と結果は、書き込みから30日後に自動で削除されます。

## お子さまの利用について

オンライン対戦にはGoogleアカウントかAppleアカウントが必要です。自分でアカウントを管理できる年齢は、国ごとにGoogleとAppleがそれぞれ定めています。このゲームは子ども向けに作ったものではありません（コンピュータとの練習は、アカウントなしで遊べます）。お子さまが保護者の同意なくログインしたと思われる場合はご連絡ください。そのアカウントを削除します。

## このポリシーの変更

ゲームが新しい情報を保存・共有するようになる場合は、その変更を公開する前にこのページを更新し、下記の日付とページ上部の更新日を改めます。

**施行日：** 2026年9月30日

## お問い合わせ

このポリシーについてのご質問や、ご自身の情報に関するご依頼は、次の連絡先までお寄せください：［TODO：連絡先を記入］。このサイトについては[クレジットのページの「このサイトについて」](https://hanafuda.lemme.dev/ja/credits/#about)を、ゲームについてのよくある質問は[よくある質問](https://hanafuda.lemme.dev/ja/faq/)のページをご覧ください。

## 利用しているサービスのポリシー

1. [プライバシーポリシー](https://policies.google.com/privacy?hl=ja)、Google
2. [利用規約](https://policies.google.com/terms?hl=ja)、Google
3. [Firebaseのプライバシーとセキュリティ](https://firebase.google.com/support/privacy?hl=ja)、Google
4. [Google Fonts: privacy questions](https://fonts.google.com/faq#privacy)、Google
5. [Privacy Policy](https://www.cloudflare.com/privacypolicy/)、Cloudflare
6. [プライバシーポリシー](https://www.apple.com/jp/legal/privacy/)、Apple
7. [サードパーティ製のアプリとサービス（Googleアカウント）](https://myaccount.google.com/connections)、Google、このゲームによるGoogleアカウントへのアクセスを解除できるページ
8. [Appleアカウント](https://account.apple.com)、Apple、このゲームでの「Appleでサインイン」の使用を停止できるページ
