Skip to content

Jupyter Notebook 版のレート比較機能を GitHub Pages へ移行 - #40

Merged
hiramekun merged 5 commits into
masterfrom
feature/migrate-to-github-pages
Aug 15, 2026
Merged

Jupyter Notebook 版のレート比較機能を GitHub Pages へ移行#40
hiramekun merged 5 commits into
masterfrom
feature/migrate-to-github-pages

Conversation

@hiramekun

Copy link
Copy Markdown
Owner

概要

compare_rating.ipynb で行っていた「複数ユーザーの AtCoder レーティング推移の比較」を、TypeScript + React + Next.js の静的サイトとして再実装し、GitHub Pages で公開できるようにしました。

変更内容

Web アプリ

  • Next.js 16 (App Router) / React 19 / TypeScript、output: 'export' による静的書き出し
  • AtCoder ID を複数入力して「比較する」を押すと、各ユーザーのレーティング推移を 1 つのグラフに重ねて表示
  • 開始日・終了日、または「全期間 / 直近1年 / 直近3年 / 直近5年」で表示期間を絞り込み
  • 取得に失敗したユーザーはエラーとして表示し、他のユーザーのグラフはそのまま描画

グラフのデザイン

AtCoder 公式のレーティンググラフ (https://atcoder.jp/users/hiramekun) の canvas を実際に読み取って配色を合わせました。

  • レート帯は公式と同じ色(各レート色を不透明度 0.3 で白に重ねた値。notebook の定数と同一)
  • Y 軸の目盛りはレート帯の境界に合わせた 400 刻み、罫線・軸も公式に合わせた淡い実線
  • 公式は単一ユーザーのため線が灰色だが、複数ユーザーを判別する必要があるため、線とマーカーはユーザーごとの色にした
  • マーカーは白い縁線付き。さらにグラフ幅と点数から間隔を見積もり、密集するほど小さく、間隔がほとんど無い場合は描画しない

デプロイ

  • master への push で GitHub Pages へ自動デプロイする workflow を追加
  • Pull Request では lint / typecheck / build のみ実行し、デプロイはしない
  • プロジェクトページ配信のため、CI では NEXT_PUBLIC_BASE_PATH にリポジトリ名を渡して basePath を設定

レビュー時に見てほしい点

  • データ取得先: atcoder.jp の /users/<user>/history/json は CORS ヘッダを返さずブラウザから直接取得できないため、AtCoder Problems (kenkoooo.com) が公開しているプロキシを経由しています。この依存を許容するかどうか。
  • 旧実装の扱い: compare_rating.ipynbrequirements.txt は削除せず残しています(README に旧実装として記載)。不要であれば削除します。

マージ後に必要な手動設定

リポジトリの Settings → Pages → Build and deployment → SourceGitHub Actions に設定する必要があります。

動作確認

  • dev サーバーと、basePath 込みの静的ビルドを /AtCoderRatingGraph/ 配下で配信した状態の両方で確認
  • 実データ(hiramekun / sykwer / gasugesu / ijm / veqcc)でグラフ描画・期間絞り込み・存在しない ID のエラー表示を確認、コンソールエラーなし
  • デスクトップ幅・モバイル幅(375px)でマーカーの見え方を確認
  • npm run lint / npm run typecheck / npm run build がすべて成功

🤖 Generated with Claude Code

hiramekun and others added 5 commits August 15, 2026 17:56
Notebook 版と同じ「複数ユーザーのレーティング推移をレート帯の背景色つきで
比較する」機能を、TypeScript + React + Next.js (App Router / static export)
の Web アプリとして再実装した。

- 複数の AtCoder ID を入力して比較でき、期間(開始日・終了日 / プリセット)で絞り込める
- atcoder.jp は CORS ヘッダを返さないため、AtCoder Problems のプロキシ経由で履歴を取得する
- master への push で GitHub Pages へ自動デプロイする workflow を追加
- 旧実装の compare_rating.ipynb はそのまま残している

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Recharts の既定のマーカーは中が白抜きで見づらいため、線と同じ色で塗りつぶす。
凡例も同じ理由でマーカー無しの線表示にした。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
点が密集したときに 1 つの塊に見えないよう、マーカーに白い縁線を付けた。
さらにグラフ幅と点数から間隔を見積もり、詰まっているほどマーカーを小さく、
間隔がほとんど無い場合はマーカーを描かないようにした。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
AtCoder 公式のレーティンググラフ (canvas) の配色を実際に読み取り、それに合わせた。

- レート帯は公式と同じ色(各レート色 + 不透明度 0.3 相当)を不透明で描画
- Y 軸の目盛りをレート帯の境界(400 刻み)に合わせ、罫線・軸を公式同様の淡い実線に
- 公式は単一ユーザーのため線が灰色だが、ここでは複数ユーザーを判別する必要があるので
  線とマーカーはユーザーごとの色にし、淡い帯の上でも沈まない色に調整した

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
サプライチェーン対策として、ワークフローで使うアクションをタグ指定から
コミットハッシュ指定に変更した。あわせて Dependabot を設定し、ハッシュと
バージョンコメントの更新を自動化する。

- actions/checkout v7.0.1, actions/setup-node v7.0.0,
  actions/upload-pages-artifact v5.0.0, actions/deploy-pages v5.0.0 の
  各リリースタグが指すコミットへ固定(入力・出力の互換性は確認済み)
- Dependabot は github-actions と npm を週次で更新。npm は minor/patch を
  1 PR にまとめ、major のみ個別に上げる

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@hiramekun
hiramekun merged commit 5f374d7 into master Aug 15, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant