feat: 対人戦の記録・集計と大会掲示を接続する - #2
Merged
Merged
Conversation
得点と終了条件を別々に保存し、大会別の判定、予選順位、本戦への進出と再戦を共通のモデルで扱う。画面の切り替えまでは既存の公開型と集計関数を残す。 検証: このコミットのツリーで3パッケージの型検査と29件のテストに成功。
得点入力や訂正を共通のコマンドとして処理し、更新競合の検出と履歴保存を行う。JSONで再起動後も記録を保持し、CSVとJSONで持ち出せるようにする。 検証: このコミットのツリーで3パッケージの型検査と29件のテストに成功。
案内、対戦、結果、予選順位、本戦表、幕間ロゴを同じ大会状態から表示する。大きな表をページに分け、会場投影と運営プレビューで共有できる部品にする。 検証: このコミットのツリーで3パッケージの型検査と29件のテストに成功。
参加者、2戦の記録、訂正理由、本戦生成を運営画面で扱う。掲示のボタン切り替えと事前に並べた進行表を用意し、APIの競合エラーも操作側に伝える。 検証: このコミットのツリーで3パッケージの型検査と29件のテストに成功。
運営ページと会場掲示を共通の保存状態に接続し、試合終了後の得点と表示操作を別画面へ反映する。移行に合わせて旧ダミー集計・配信型・画面を削除し、共通の見た目と予選から決勝までのAPI検証を追加する。 検証: このコミットのツリーで3パッケージの型検査と29件のテストに成功。
JSON保存先を環境変数と永続化ボリュームで指定できるようにし、大会データをビルド対象から除外する。未使用のDB起動とPrisma生成を必須の起動経路から外す。 検証: このコミットのツリーで3パッケージの型検査と29件のテストに成功。Dockerでのビルド・起動は未検証。
公開大会ルール、依頼者からの運用説明、実装者の判断を区別して記録する。現在動く試作の設計と確認手順を明示し、将来の拡張案は別資料へ移す。 検証: このコミットのツリーで3パッケージの型検査と29件のテストに成功。
Prettierの設定と整形チェックを追加し、JSX、計算処理、スキーマ、CSS、テストの改行と字下げを統一する。処理の分割は後続コミットに分離する。型検査と29件のテストが通過。
勝敗と順位を分離し、試合記録・参加者・予選生成・本戦生成を専用の処理へ移す。複雑な条件を名前付きの判定にし、履歴の組み立ても分離する。既存29テストと型検査、修正前後705ケースの結果・履歴・エラー比較に成功。
運営、掲示、参加者、試合、設定を用途ごとの部品へ分割する。長いイベント処理には名前を付け、状態別の表示は早期リターンとswitchで整理する。型検査・未使用コード検査と、6シーン90状態のHTML・ページ分割の修正前後比較に成功。
CSVの列構成・試行履歴・セルのエスケープをHTTP応答から分離する。保存と通信の変数名を具体化し、SSEの送信処理を早期リターンで整理する。型検査と修正前後24ケースのCSVバイト列比較に成功。
Zennの記事を参考に命名、責務の分割、早期リターン、理由に絞るコメントの基準を整理。PRで整形、未使用変数を含む型検査、テストを確認する。ブラウザー操作の再検証結果も更新。
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.
変更内容
従来はダミーの得点計算と画面切り替えが中心で、対戦の記録から順位・掲示までを一続きに操作できませんでした。このPRで、各戦の得点と勝因を記録すると、2戦の試合判定、予選順位、本戦への勝ち上がり、会場掲示まで反映される対人戦の試作を追加します。
可読性の改善
採点・大会進行・保存・画面描画を役割ごとに整理し、短縮した名前や深い条件分岐を改めました。大きな画面から、得点入力・参加者管理・掲示内容などのまとまりを分け、複数段階の操作には名前付きのハンドラーを用意しています。採点規則、保存形式、画面の振る舞いは維持しています。
コメントは、コードだけでは分からない理由や制約に絞っています。Prettierで書式を統一し、PRで整形・型・テストを自動検査します。命名や分割の良し悪しは自動検査だけで判断できないため、開発ガイドにレビュー時の基準と実装の入口を記載しました。
可読性改善の差分は、以下の5コミットの順に確認できます。整形だけの変更を先に分けています。
Zenn「可読性の低いコードはAIも読めない」の命名・処理のまとまり・書式・コメントの考え方と、Zenn「早期リターンを書こう」の条件分岐を浅くする方針を参考にしました。
初回実装のレビュー順序
コミットごとに目的を分け、依存する順序に並べています。各コミットのツリーを別ディレクトリに展開し、アプリ・shared・scoringの型検査と29件のテストが通ることを確認しました。新しい画面を接続する5番目までは、旧実装の公開型と関数を残しています。
分割方針は、Zenn「レビューが爆速になる!レビュアーに優しいPull Requestの極意」の「変更目的の単位・理解しやすい順序」と、Qiita「おれおれレビューしやすいプルリクエスト」の「コミット単位で段階的にレビューできる構成」を参考にしました。デバッグの作業順ではなく、判定→保存→表示・操作→接続の順に再構成しています。
特に確認してほしい判断
試作提案の判断記録 D01〜D13に、根拠と確認点をまとめています。特に次の3点は試作として採用した判断であり、公式ルールとして確定した扱いにはしていません。
検証
API結合テストは
scripts/smoke-prototype.mjsに収録しています。大会を切り替えるため、別のCHROS_DATA_DIRとポートを使ったテスト用サーバーで実行します。試し方と範囲
Node.js 22以降で
pnpm install→pnpm devを実行し、/consoleと/displayを開きます。初回は架空の参加者8名のサンプル大会です。5分で試す手順から確認できます。今回の対象は会場LAN内・単一サーバーでの対人戦です。試合サーバーとの自動連携、Bot戦、全国固有の採点方式、複数コートの割当、汎用規則エディターは含みません。既存の将来構想は
docs/technical-roadmap.mdに残しています。