週間・月間ランキングを追加 - #212
Merged
Merged
Conversation
トータルに加えて暦週・暦月(JST、週は月曜始まり)のランキングを出す。 - ぽいんと: sanpai_logs をコレクショングループで横断し add_point を期間合計。 ログは2021年から残っているので遡って正確な値が出る - せんとうりょく: 現在値しか保存が無く過去を復元できないため、期間開始時点の スナップショット(cache_data/battle_baseline)との差分=伸び幅でランキング。 基準値の無い新規ユーザーは現在値で初期化して差分0にし、現在値まるごとで 1位になる事故を防ぐ - 実行は rankingUpdateGo に相乗り(usersの追加スキャンなし)。せんとうりょくは 毎時、ぽいんとの横断読み取りは3時間ごとに間引く(JST0時は集計回なので 週明け・月初は待たずに反映)。期間集計が失敗してもトータルの更新は続行する - キャッシュは上位100件(表示情報つき)+全員分の軽量順位リストの2本立てにし、 ドキュメントの1MiB上限を圧迫しないようにする - sanpai_logs.timestamp にコレクショングループスコープのインデックスを追加 - Ranking.vue に指標×期間の2段セグメント。初期表示は週間×せんとうりょくで、 記録が溜まるまではトータルにフォールバックして注記を出す。トップページは タブを出さず週間のみ Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DwkB6Hj2JggoKcy7FoxNcU
Contributor
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
kojira
pushed a commit
that referenced
this pull request
Jul 25, 2026
kojira
pushed a commit
that referenced
this pull request
Aug 2, 2026
8 tasks
kojira
pushed a commit
that referenced
this pull request
Aug 2, 2026
base_at は締め機能と同時に足したフィールドで、期間ランキング自体は それより前(#212)から動いている。既存の基準値ドキュメントはこの フィールドを持たないため、ゼロ値を「途中から集計を始めた」と見なすと、 頭から記録できている最初の週・月に赤い注意書きが出てしまう。 ゼロ値は「フィールドを持つ前に作られた基準値」であって途中開始では ないので、partial としない。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DwkB6Hj2JggoKcy7FoxNcU
kojira
added a commit
that referenced
this pull request
Aug 2, 2026
base_at は締め機能と同時に足したフィールドで、期間ランキング自体は #212 から動いている。既存の基準値ドキュメントはこのフィールドを持たないため、ゼロ値を「途中から集計を始めた」と見なすと、頭から記録できている最初の週・月に誤った注意書きが出る。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #211
トータルに加えて**暦週・暦月(JST、週は月曜0:00始まり)**のランキングを追加します。
指標ごとの作り方
ぽいんと —
users/{id}/sanpai_logsをコレクショングループで横断し、add_pointを期間合計。週初と月初の早い方を下限にした1クエリで週間・月間の両方を賄う(週が月をまたぐケースに対応)。ログは2021年から残っているので遡って正確な値が出る。せんとうりょく —
status.totalは現在値しか保存が無く過去を復元できないため、期間開始時点のスナップショットcache_data/battle_baselineとの差分=伸び幅でランキング。実行とコスト
rankingUpdateGo(毎時)に相乗り。usersの追加スキャンは発生しない(既存スキャンから表示情報を引く)。JST 0時は集計回に当たるので、週明け・月初の切り替わりは待たずに反映されます。期間集計が失敗しても(インデックス未作成・一時エラー等)ログを残してトータルの更新は続行します。
キャッシュの持ち方(1MiB対策)
ranking_cacheは全ユーザーを表示情報つきで持っており上限が N≒2,000〜3,500。期間別で同じ持ち方をすると余裕が一気に縮むため:*_top: 上位100件(display_name / image_path つき)*_ranks: 全ユーザー分の{screen_name, value, rank}のみ「あなたの順位」カードは順位と値しか使わないので、圏外でも自分の順位が出せます。
フロント
Ranking.vueに指標×期間の2段セグメント。初期表示は週間×せんとうりょく:show-tabs="false"でタブを出さず、週間(空ならトータル)のみインデックス
sanpai_logs.timestampに COLLECTION_GROUP スコープのインデックスを追加。fieldOverrides は自動の単一フィールドインデックスを置き換えるため、既存のsanpaiHistoryGoが使う COLLECTION スコープの昇順・降順も併記しています。デプロイは既存のfirebase deploy --forceが拾います。検証
go test ./...全パス。新規テスト: 期間境界(月曜/日曜/月初が週の途中/UTC入力)、3時間間引きの判定、同点同順位・上位100件キャップと全件順位リスト、基準値の初期化・ロールオーバー・伸び幅・不在ユーザーの剪定、コレクショングループ集計、レスポンスの periods と圏外 my_rankyarn generate成功🤖 Generated with Claude Code
https://claude.ai/code/session_01DwkB6Hj2JggoKcy7FoxNcU
Generated by Claude Code