データと保持期間 / Data and retention
このプラットフォームはデータ削除の依頼を受け付ける窓口を公開していません。訪問者が自分でできる削除は、各項目の「削除」に記した操作だけです。 This platform publishes no channel for deletion requests. The only deletions a visitor can perform are the ones listed per item above.
- 訪問者識別 Cookie `mw_actor_id` Visitor identifier cookie `mw_actor_id`
保存項目: ランダムに生成した 32 文字の識別子 1 つ。氏名・連絡先・端末・回線・位置の情報は含まれません。Cookie 属性は `Max-Age=31536000`(1 年)/ `Path=/` / `HttpOnly` / `SameSite=Lax`、HTTPS 通信時のみ `Secure` です。 One randomly generated 32-character identifier. It carries no name, contact, device, network or location data. Cookie attributes: `Max-Age=31536000` (1 year) / `Path=/` / `HttpOnly` / `SameSite=Lax`, plus `Secure` on HTTPS requests.
保持期間: ブラウザ側は 1 年。リアクションを追加した訪問者の場合、同じ値がサーバーのデータベース(`reactions.actor_id`)にも保存され、そのリアクションの行が削除されるまで残ります。 One year in the browser. For a visitor who adds a reaction the same value is also stored server-side (`reactions.actor_id`) and stays until that reaction row is deleted.
削除: 訪問者がリアクションの表示を切り替えると、その訪問者の行は `DELETE /api/v1/reactions` で削除されます。ブラウザの Cookie を削除しても、データベースの行は自動的に削除されません(このプラットフォームに一括削除機能はありません)。 Toggling a reaction issues `DELETE /api/v1/reactions` and removes that visitor’s row. Deleting the browser cookie does not delete the stored row — this platform has no bulk erasure feature.
外部送信: この識別子の送信先は、このプラットフォーム自身(自オリジン)だけです。 This identifier travels only to this deployment’s own origin.
公開範囲: 公開ページ・公開 API・閲覧解析のいずれにも、この識別子の値そのものは現れません。 The identifier value appears in no public page, no public API response and no analytics payload.
- リアクション記録(データベース `reactions`) Reaction records (database table `reactions`)
保存項目: 対象キー / 訪問者識別子(上記の Cookie の値)/ API キー ID / 種類 / 値 / 記録時刻。 Target key / visitor identifier (the cookie value above) / API key id / kind / value / created_at.
保持期間: 自動失効はありません。有効期限列も定期削除ジョブも実装していません。訪問者本人の削除、または運用者による手動削除まで残ります。 No automatic expiry: this platform ships neither an expiry column nor a purge job. A row stays until the visitor deletes it or an operator removes it by hand.
削除: 訪問者自身のリアクションは表示の切り替えで削除できます。それ以外の行(訪問者が Cookie を消えた後など)は削除操作の入口がありません。 A visitor can delete their own reaction by toggling it. No affordance exists for other rows (for example one left behind after the cookie was cleared).
外部送信: 送信は自オリジンへの内部呼び出しだけです。 Transmission is the self-call to its own origin only.
公開範囲: 公開されるのは種類ごとの件数(集計)だけで、行の内容や訪問者識別子は公開されません。 Only the per-kind counts are published. Row contents and visitor identifiers are not.
- アクセスカウンター(`access_counters` / `access_dedup`) Access counter (`access_counters` / `access_dedup`)
保存項目: `access_counters`: キー / API キー ID / 件数 / 初訪問・最終訪問時刻(訪問者を識別しない集計値だけ)。`access_dedup`: キー / API キー ID / リクエストごとに発行する一時 UUID / 失効時刻。 `access_counters`: key / API key id / count / first and last hit (aggregate values only — no visitor identifier). `access_dedup`: key / API key id / a per-request UUID / expiry.
保持期間: 重複排除行は記録から 60 分で失効します。ただし失効行の削除は同じリクエスト識別子の再訪時にしか実行されず、このプラットフォームには定期削除ジョブ(`wrangler.jsonc` に Cron 宣言なし)がありません。したがって再訪のない行はデータベースに残ります。集計行は手動削除されるまで残ります。 A dedup row expires 60 minutes after it is written. Expired rows are only deleted when the same request identifier returns, and this platform ships no scheduled purge job (no Cron trigger is declared in `wrangler.jsonc`). A row whose visitor never returns therefore stays in the database. Aggregate rows stay until deleted by hand.
削除: 公開されている削除依頼窓口はありません。運用者がデータベースを手動で操作することだけが経路です。 No deletion-request channel is published. Manually operating the database is the only path.
外部送信: ホームの記録・取得は自オリジンへの内部呼び出しだけです。 Recording and reading happen through self-calls to the same origin.
公開範囲: 公開されるのは件数と初・最終訪問時刻だけです。一時 UUID も失効時刻も公開されません。 Only the count and the first / last hit timestamps are published. Neither the UUID nor the expiry is.
- 閲覧解析(Google Analytics 4) Web analytics (Google Analytics 4)
保存項目: このプラットフォームのコードが明示的に Google へ送る値(測定 ID とパス情報)と、GA4 自身が収集する値は、それぞれ別の項目として下に示します。このプラットフォームは閲覧データを保存しません。 What this platform’s own code sends to Google explicitly (the measurement id and the path information) and what GA4 collects on its own are listed separately below. This platform stores no browsing data.
保持期間: 保持期間と削除は Google 側のプロパティ設定に従います。このプラットフォームからは設定も確認もできません。 Retention and deletion follow the Google property settings. This platform can neither configure nor verify them.
削除: このプラットフォームからは削除できません。Google 側の操作が必要です。依頼窓口は公開していません。 Deletion cannot be performed from this platform; it requires action inside Google. No request channel is published.
外部送信: 公開ページを読み込んだときのみ、ブラウザから Google の解析プロパティへ送信されます。測定 ID の secret が未設定なら解析タグは描画されないので、その secret を外すことが唯一の停止手段です。 Sent from the visitor’s browser to the Google analytics property only when a public page is loaded. If the measurement-id secret is unset, no analytics tag is rendered at all, so unsetting that secret is the only off switch.
送信者:- このプラットフォームのコード This platform’s own code: 測定 ID と、パス情報(`page_path` / `page_location` / `page_title`)を送ります。アプリ内の画面遷移で記録する `page_view` だけはクエリ文字列を除去してパスだけを送ります。ただし最初の読み込みで記録される `page_view` は GA 自身が `document.location` を読むため、このプラットフォームのコードではクエリ文字列を除去できていません。`/admin/**` は送信対象外です。`mw_actor_id` のようなサイト発行の識別子を明示的に送ることはありませんが、URL に書かれたクエリ文字列はそのまま届きます。 It sends the measurement id and the path information (`page_path` / `page_location` / `page_title`). The `page_view` recorded on an in-app route change has its query string stripped, so only the path is sent. The `page_view` recorded on the first page load is different: GA reads `document.location` itself, so this platform’s code cannot strip the query string there. `/admin/**` is excluded, and no site-issued identifier such as `mw_actor_id` is sent explicitly — but a query string written into the URL reaches GA unchanged.
- GA4 自身の自動収集 GA4’s own automatic collection: GA4 は、参照元やブラウザや端末の情報などを、GA 自身が読み取って送ります。これはこのプラットフォームのコードが明示的に送る値には含まれません。 GA4 reads the referrer, the browser and the device information itself and sends them on its own. They are not among the values this platform’s code sends explicitly.
公開範囲: 測定 ID 自体は HTML に出ますが、保存された閲覧データはこのプラットフォームのどこにも残りません。 The measurement id itself is present in the HTML; the collected browsing data is not stored anywhere in this platform.
- 管理者の認証情報(`/admin/**`)— 運営者自身のデータ Administrator credentials (`/admin/**`) — the operator’s own data
保存項目: 運営者自身のメールアドレスとパスワードハッシュ、セッション(有効期間 30 日 / 24 時間ごとに更新。セッション行には接続元 IP アドレスとユーザーエージェント文字列も保存されます)、招待行(メールアドレス・トークンハッシュ・有効期限・受理時刻)。 The operator’s own email address and password hash, sessions (30-day expiry, refreshed every 24 hours; a session row also stores the client IP address and the user-agent string), and invitation rows (email, token hash, expiry, consumed-at).
保持期間: セッションは 30 日で失効します。招待行は有効期限を過ぎると受理できず、未消費の招待は管理画面から削除できます。 Sessions expire after 30 days. An invitation past its expiry can no longer be accepted, and an unconsumed invitation can be deleted from the admin surface.
削除: 運営者自身の管理画面とデータベース操作のみです。訪問者のデータではありません。 Only the operator’s own admin surface and direct database operations. It is not visitor data.
外部送信: 外部への送信はありません。閲覧解析も `/admin/**` には送りません。 Nothing is sent outward; web analytics is not loaded on `/admin/**` either.
公開範囲: パスワードハッシュとセッショントークンは公開面には現れません。招待したメールアドレスだけは、招待トークンを保持している人が開く `/admin/invitations/accept?token=…` のページで、招待が有効なあいだだけ表示されます。 The password hash and the session token never reach a public surface. The invited email address does: it is shown on `/admin/invitations/accept?token=…`, the page a holder of the invitation token opens, and only while the invitation is still valid.
- 問い合わせ(`/contact`) Contact (`/contact`)
保存項目: 保存されるものはありません。このページに入力フォームはなく、掲載しているのは公開済みの連絡先リンクだけです。メッセージは送信されません。 Nothing is stored. The page has no input form; it lists already-published contact links. No message is sent.
保持期間: 保存データがないため保持期間もありません。 No stored data means no retention period.
削除: 削除対象がないので操作は不要です。 Nothing to delete.
外部送信: リンク先への移動だけです。フォームからの送信はありません。 Only a link navigation. There is no form submission.
公開範囲: 掲載先は `src/contact/channels.json` で、所有者は公開済みのリンクのみです。 The listed targets come from `src/contact/channels.json`, which contains only already-published links.