Skip to content

dai/o-sumo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

531 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

o-sumo

DeepWiki

English README

o-sumo は、大相撲の番付と取組情報を配信する静的 Web アプリです。React 19 + TypeScript + Vite で構築し、Cloudflare Pages から静的サイトと静的 JSON API を公開しています。

ドキュメント一覧

  • README: README.md / README_en.md
  • 開発ガイド: DEVELOPMENT.md / DEVELOPMENT_en.md
  • Skills 一覧: SKILLS.md / SKILLS_en.md
  • API 仕様: docs/api/v1.md / docs/api/v1.en.md
  • API ポリシー: docs/api/policy.md / docs/api/policy.en.md
  • API 変更履歴: docs/api/changelog.md / docs/api/changelog.en.md

概要

  • Web ルート:
    • ホーム: /
    • 過去場所一覧: /archives
    • 力士一覧: /rikishi
    • 力士プロフィール: /rikishi/{id}
    • 番付: /{YYYYMM}-banduke
    • 結果ハブ: /{YYYYMM}-torikumi
    • 予定ハブ: /{YYYYMM}-yotei
    • 日別結果: /{YYYYMMDD}-torikumi
    • 日別予定: /{YYYYMMDD}-yotei
  • 現行ルート例:
    • /202605-banduke
    • /202605-torikumi
    • /20260524-yotei
  • 旧番付 URL /{YYYYMM}-o-sumo は現行の番付 URL にリダイレクトされます。
  • 公開 API:
    • /api/v1/banzuke.json
    • /api/v1/torikumi.json
    • /api/v1/rikishi.json
    • /api/v1/rikishi/{id}.json

関連ドキュメント:

  • docs/api/v1.md
  • docs/api/policy.md
  • docs/api/changelog.md
  • DEVELOPMENT.md

Skill 公開:

  • SKILLS.md
  • skills/osumo-api/SKILL.md

主な機能

  • ホームから 番付 / 取組予定 / 結果 / 力士プロフィール に直接遷移
  • 番付ページで幕内・十両の番付と成績を表示し、MiniMax I2I Generation で加工した力士プロフィール画像とあわせて力士プロフィールへ遷移
  • 月別ハブで 15 日分の日別ページを一覧表示
  • 日別ページで幕内・十両の取組を表示し、取組力士名からプロフィールへ遷移
  • 番付・月別ハブ・日別ページで 昇順 / 降順 を切り替え可能
  • 未更新日は pending として URL を先出しし、空状態メッセージを表示
  • 月キーは app/lib/torikumi-data.ts の生成データから動的に決まります

技術スタック

  • フロントエンド: React 19, TypeScript, React Router, Vite
  • テスト: Vitest, Testing Library, jsdom
  • データ生成: Python (scripts/update_sumo_data.py)
  • 配信: Cloudflare Pages
  • データ取得元: 日本相撲協会の Ajax エンドポイント
  • 力士画像: 日本相撲協会プロフィール写真をベースに MiniMax I2I Generation で加工したローカル PNG

ローカル開発

前提:

  • Node.js 18 以上
  • npm 9 以上
  • Python 3.10 以上

セットアップ:

git clone https://github.com/dai/o-sumo.git
cd o-sumo
npm install

補足:

  • package-lock.json は commit します
  • 初回セットアップは npm install
  • 再現性重視の再構築や CI は npm ci

主要コマンド:

# 開発サーバー
npm run dev

# 型チェック
npm run typecheck

# テスト
npm test

# 本番ビルド
npm run build

# ビルド結果のローカル確認
npm run preview

ローカル確認先:

  • http://localhost:3001/
  • http://localhost:3001/archives
  • http://localhost:3001/rikishi
  • http://localhost:3001/rikishi/{id}
  • http://localhost:3001/{YYYYMM}-banduke
  • http://localhost:3001/{YYYYMM}-torikumi
  • http://localhost:3001/{YYYYMM}-yotei
  • http://localhost:3001/{YYYYMMDD}-torikumi
  • http://localhost:3001/{YYYYMMDD}-yotei

データ更新

フル更新(番付 + 取組 + 力士プロファイル):

python scripts/update_sumo_data.py

力士プロファイルのみを更新:

python scripts/update_sumo_data.py --rikishi-only

力士プロファイル取得を最初の10人に限定(テスト用):

python scripts/update_sumo_data.py --rikishi-only --profile-limit 10

取組だけを更新:

python scripts/update_sumo_data.py --torikumi-only

結果のみ / 予定のみを更新:

python scripts/update_sumo_data.py --torikumi-scope result
python scripts/update_sumo_data.py --torikumi-scope schedule

取組だけを対象に結果または予定だけを更新:

python scripts/update_sumo_data.py --torikumi-only --torikumi-scope result
python scripts/update_sumo_data.py --torikumi-only --torikumi-scope schedule

2026年4月27日の五月場所番付発表時は、取得元が五月場所を返すことを確認してから次を実行します。

git pull --ff-only origin main
python scripts/update_sumo_data.py --torikumi-scope schedule
npm run typecheck
npm test
npm run build

banzuke.jsonbashoName: "五月場所"year: "令和八年"、幕内42人、十両28人になっていることを確認してから main に反映します。

生成・更新対象:

  • app/lib/sumo-data.ts
  • app/lib/torikumi-data.ts
  • public/api/v1/banzuke.json
  • public/api/v1/torikumi.json
  • public/api/v1/rikishi.json
  • public/api/v1/rikishi/{id}.json(全力士分、name / yomi / currentRank / sourceUrl / updatedAt を含む)
  • public/images/rikishi/{id}.png(全力士分の加工済みプロフィールイラスト、個別ページと番付ページで恒久的に使用)

主な検証内容:

  • 幕内 42 人
  • 十両 28 人
  • 結果 / 予定アーカイブを 15 日分生成
  • 公開済み日は取得済みデータで埋める
  • 未更新日は pending のプレースホルダーとして残す

自動更新

GitHub Actions で日次更新と結果更新を分けています。

  • 日次更新: .github/workflows/daily-data-update.yml
    • 状態: 2026-07-01 JST まで自動実行停止(workflow_dispatch のみ)
    • 実行内容: 取組予定のみ更新(--torikumi-only --torikumi-scope schedule
    • 変更がある場合は main に直接 commit / push
    • 手動実行: GitHub Actions の Run workflow または gh workflow run daily-data-update.yml -R dai/o-sumo --ref main
  • 結果更新: .github/workflows/realtime-torikumi-update.yml
    • 状態: 2026-07-01 JST まで自動実行停止(workflow_dispatch のみ)
    • 実行内容: 取組結果 + 番付を更新(--torikumi-scope result --skip-rikishi-fetch
    • 変更がある場合は main に直接 commit / push
    • 手動実行: GitHub Actions の Run workflow または gh workflow run realtime-torikumi-update.yml -R dai/o-sumo --ref main
    • ログ: github.event.schedule / JST 現在時刻 / resultUpdatedAt / scheduleUpdatedAt を必ず出力

GitHub Mobile + Copilot 運用

  • 事前準備:
    • リポジトリ指示: .github/copilot-instructions.md
  • 週末の最短フロー:
    • GitHub Mobile で Issue を作成し、Copilot cloud agent に割り当てる
    • Agent session で差分と説明を確認する
    • 作成された PR で test.ymltypecheck / test / build)通過を確認する
    • GitHub Mobile 上でレビューして merge する

テスト

  • test runner: Vitest
  • component test: Testing Library
  • workflow: .github/workflows/test.yml

現在の主な対象:

  • app/lib/torikumi-routes.ts のルーティング helper
  • app/lib/sorting.ts の並び替え helper
  • ホームの主要導線
  • 番付ページのソート
  • 月別ハブの 15 日表示とソート
  • 日別取組ページのソートと未更新表示

GitHub Actions では PR と main / codex/** への push で以下を実行します。

  • npm ci
  • npm run typecheck
  • npm test
  • npm run build

Cloudflare Pages

  • 本番 URL: https://osada.us
  • SPA fallback: public/_redirects(アプリルートのみ。/api/v1/* は静的 JSON をそのまま配信)
  • 日付ベースの URL を直接開いても index.html にフォールバックします

運用ポリシー(2026年5月場所向け)

  • GitHub Actions の日次更新/結果更新は、2026-07-01 JST まで自動実行を停止し、手動実行(workflow_dispatch)のみ運用します。
  • 明日以降に手動実行する場合は GitHub Actions の Run workflow から Daily Sumo Data Update または Realtime Torikumi Updatemain に対して起動します。
  • CLI では gh workflow run daily-data-update.yml -R dai/o-sumo --ref main / gh workflow run realtime-torikumi-update.yml -R dai/o-sumo --ref main を使えます。
  • 結果更新 workflow は --torikumi-scope result --skip-rikishi-fetch を使い、番付の星取表を結果更新枠で同期します。
  • 「結果未更新」を確認した場合は、run履歴runログ(event.schedule, JST, updatedAt系)供給元 judge の順で切り分けます。
  • Cloudflare の従量抑制のため、public/_headers でキャッシュ方針を固定します。
  • /assets/*: public, max-age=31536000, immutable
  • /manifest.webmanifest: public, max-age=3600
  • /sw.js: public, max-age=0, must-revalidate
  • /: public, max-age=300
  • PWA の Service Worker 更新は registerType: "autoUpdate" で運用し、更新を自動反映します。

主要ファイル

  • app/main.tsx: ルーティング定義
  • app/page.tsx: ホーム
  • app/archives/page.tsx: 過去場所一覧ページ
  • app/banzuke/page.tsx: 番付ページ
  • app/torikumi/page.tsx: 取組結果 / 取組予定の月別ハブ
  • app/components/TorikumiDayPage.tsx: 日別の結果 / 予定ページ
  • app/components/BanzukeTable.tsx: 番付テーブルコンポーネント
  • app/lib/archives-data.ts: 過去場所データ
  • app/lib/torikumi-routes.ts: 月キー付き URL とナビゲーション解決
  • app/lib/sumo-data.ts: 番付データ(力士型定義を含む)
  • app/lib/torikumi-data.ts: 取組アーカイブデータ
  • scripts/update_sumo_data.py: データ生成スクリプト

連絡先

ライセンス

MIT

ダウンロード

About

大相撲APIs, Skillsを公開します(番付|星取|取組予定|取組結果)令和8年3月場所から -- Sumo data, Shikona dictionaries, and scores. since 2026

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

  •  

Packages

 
 
 

Contributors