cosense-grass は、Cosense (旧 Scrapbox) での活動量を可視化するツールです。 Cosense の公式サービスではありません。 運営元の株式会社 Helpfeel とは関係のない、個人のプロジェクトです。 ソースコードと設計は GitHub で公開しています。
| 項目 | 形 | 目的 |
|---|---|---|
| 利用者の識別子 | Google アカウントの sub をサーバ固有の秘密で HMAC した値 | 誰の記録かを区別する |
| デバイスの公開鍵 | 公開鍵そのもの | 記録の送信元が本人か検証する |
| デバイス登録用の使い捨ての符号 | 符号そのものではなく、そのハッシュ | サインインしたデバイスの鍵を登録する |
| プロジェクトの識別子 | 上記の識別子でソルトしたハッシュ | プロジェクトごとに集計する |
| 日ごとの活動量 | 分単位のビットマップと、1 日あたりの集計値 (書いた分数と読んだ分数、時間帯 (0〜9 時・9〜13 時・13〜18 時・18〜24 時) ごとの書いた分数と読んだ分数、書いた分のうち新しく作ったページと他の人が作ったページに書いた分数、編集したページ数、新しく作ったページ数、作ったリンクの件数) | 草と活動の概観、カードの図を描く |
sub (アカウントの
識別子) だけで、それも保存せず、サーバ固有の秘密で HMAC した結果だけを持ちますGoogle でのサインインは、複数の端末 (PC やブラウザ) の記録を、同じ 1 人の利用者の草にまとめるために使います。 サインインは最初の 1 回と、端末を追加するときだけ必要です。以降の記録の送信は各端末の鍵による署名で認証します。
openid スコープのみを要求し、受け取るのはアカウントの識別子 (sub) だけです。
メールアドレス、氏名、プロフィール画像は取得しませんsub からサーバ固有の秘密で HMAC した利用者の識別子を作り、同じ Google アカウントの端末を 1 人の記録にまとめます。
それ以外の目的 (広告、プロファイリング、機械学習など) には使いませんsub そのものと Google の ID トークンは保存せず、本人確認に使ったらすぐに捨てます。
保存するのは元に戻せない HMAC の結果だけです。サインインの後に画面に表示するコードは 5 分で使えなくなり、1 回しか使えませんGoogle API から受け取った情報の利用は、Limited Use の要件を含む Google API Services User Data Policy に従います。
認証の途中で、なりすましを防ぐための短命な Cookie を 1 つ使います (__Host-grass-auth、有効期間 10 分)。
中身は乱数と発行時刻だけで、利用者の識別子は含みません。サインインから戻った時点で、成功しても失敗しても削除します。
サインインに成功したときは、管理のページ (/account) を使うための Cookie を 30 分だけ発行します
(__Host-grass-session)。中身は利用者の識別子と発行時刻で、署名しています。
JavaScript からは読めず (HttpOnly)、ほかのサイトからの遷移では送られません (SameSite=Lax)。
管理のページ (端末の一覧と失効・共有 URL・データの削除) でだけ使い、活動の記録には使いません。
追跡目的の Cookie は使いません。
サーバのログには集計値だけを記録します。利用者の識別子はログに出しません。 記録するのは、書き込み量の概算、認証の失敗率、エラー率などの統計です。
| データ | 保持 |
|---|---|
| 分単位のビットマップ | 90 日 |
| 日ごとの集計値 | 削除しません |
| デバイスの公開鍵 | 失効させるか、データを削除するまで |
| デバイス登録用の符号のハッシュ | 使うまで (最長 5 分。使われなければその後の定期処理で削除) |
日ごとの集計値は、数年後に振り返れるように無期限で保持します。
不要になったら管理のページ (/account) からいつでも削除できます。
分単位のビットマップは、同じ記録が重複して届いたときに正しくまとめるための作業データです。 90 日で削除しますが、日ごとの集計値が残るのでグラフは変わりません。
活動量のグラフは、利用者が共有 URL を誰かに渡したときと、下の「プロフィールページへの書き込み」で貼った図を誰かが見たときだけ他人が見られます。 共有 URL は利用者の識別子から一方向に導出され、第三者が推測や計算で求めることはできません。
共有 URL の図には、日ごとの活動量 (と、書いたのと読んだのどちらが多いかの色) と、期間全体の活動の割合 (新しく作る・育てる・他の人のページに関わる・読む) が表れます。割合は期間全体のものだけで、日ごとの割合は表れません。
どの共有 URL からも、URL を少し変えるだけで同じ図を別の形で開けます。 期間は直近 26 週・直近 1 年・過去の各年から選べます。 1 日の表し方は 1 マスか、朝 (9〜13 時)・昼 (13〜18 時)・夜 (18 時〜翌 9 時) の 3 マスから選べ、3 マスの形では どの時間帯に活動しているかが分かります。
日ごとの数値の URL (JSON) は、草の URL とは別にあります。 管理のページに合算の分を、Cosense で開く草のダイアログに合算とプロジェクト別の分を表示します。 この URL を渡した相手には、日ごとの書いた分数・読んだ分数・編集したページ数・新しく作ったページ数、 新しく作ったページと他の人が作ったページに書いた分数、作ったリンクの件数、 朝 (9〜13 時)・昼 (13〜18 時)・夜 (18 時〜翌 9 時) ごとの書いた分数と読んだ分数が見えます。草の URL からこの URL を作ることはできないので、草を見せた相手に数値まで見せるかは別に選べます。 この URL も、利用者の識別子から一方向に導出され、第三者が推測や計算で求めることはできません。 検索エンジンには載せないよう指示しています。
プロジェクト別の共有 URL には、プロジェクト名が含まれます。 どの草がどのプロジェクトのものか
分かるようにするため、画像にも名前を描きます。サーバはこの名前を保存せず、画像を描くときに
受け取って使うだけです。名前を見せたくないときは、URL の末尾の ?l=... を削って渡してください
(名前のない草が表示されます)。全プロジェクトを合算した共有 URL にはプロジェクト名が含まれません。
共有 URL には、Cosense のユーザー名も含まれます (合算とプロジェクト別の両方)。誰の草か
分かるようにするため、画像にユーザー名を描きます。プロジェクト名と同じく、サーバはこの名前を
保存せず、画像を描くときに受け取って使うだけです。見せたくないときは、URL から u=... を
削ってください。
非公開プロジェクトの共有 URL には、アイコンの Gyazo の画像 ID (i=...) が含まれることがあります。 非公開プロジェクトのアイコンはサーバが Cosense から取得できないため、
UserScript が、ログイン中のブラウザで自分のユーザー名のページの画像から ID を取り出して URL に添えます (画像が Gyazo にあるときだけ)。サーバはこの ID も保存せず、
画像を描くときに受け取って使うだけです。Gyazo の画像は URL を知っていれば誰でも開けるので、共有 URL を受け取った人は、図に描かれた小さなアイコンのほかに、
元の大きさのアイコン画像も開けます。 見せたくないときは、URL から i=... を削ってください (図は、アイコンのない形で描かれます)。
UserScript は、導入したプロジェクトの自分のユーザー名のページ (プロフィールページ) に、そのプロジェクトのカードの図の行を自動で書き込みます。 書き込みはお使いのブラウザから、ログイン中の Cosense のアカウントで行い、サーバを経由しません。
code:script.js から UserScript の 1 行を外してくださいしません。広告も解析サービスも使いません。
インフラストラクチャとして Cloudflare (Workers と D1) を使い、認証に Google の OpenID Connect を 使います。それ以外にデータが渡ることはありません。
ただし、図にアイコンを描くときは、サーバが共有 URL のプロジェクト名とユーザー名で Cosense にアイコンを問い合わせ、
アイコンの画像を置いている先 (Gyazo など) から画像を取得します。共有 URL に Gyazo の画像 ID (i=) があるときは、その ID で Gyazo から直接取得します。
サーバのデータは、管理のページ (https://grass.soui.dev/account) からすべて削除できます。
Google でサインインすると、登録した端末の一覧・共有 URL・削除の操作ができます。
削除すると、日ごとの集計値・ビットマップ・共有 URL・登録した端末の鍵がすべて消え、
共有 URL の草も日ごとの数値も見られなくなります。端末ごとの失効も同じ画面からできます。
お使いのブラウザに残る記録は、Cosense のページメニュー「cosense-grass」→「設定」から消せます。 ブラウザの中にしかないので、サーバからは消せません。同じ画面から、その端末の登録だけを外すこともできます。
記録される活動量は利用者のブラウザからの自己申告で、サーバに検証する手段がありません。 評価や比較の根拠に使えるものではありません。
これは無償で提供される個人のプロジェクトです。可用性やデータの保全を保証しません。 サーバの無料枠の上限に達した日は記録が受け付けられず、翌日に再送されます。
GitHub の Issue から 連絡してください。
内容を変更した場合は、GitHub のリポジトリの履歴に残ります。 重要な変更があるときはリポジトリで告知します。
cosense-grass · 管理 · プライバシー · GitHub