作成日: 2026-09-18。対人戦の得点・勝因を入力すると、2戦の勝敗、予選順位、本戦への 勝ち上がり、会場の掲示までつながる試作です。画面のモックだけでなく、保存と集計まで実装しています。
今回の確認用サーバーは 運営画面 と 会場掲示 で起動します。 サーバーを停止した場合の再起動方法は下記を参照してください。
初期サンプルは、架空の参加者8名・A/Bの2グループです。 予選12試合のうち10試合が終了し、「B-05」の第1戦まで記録された状態から始まります。
- 運営画面と会場掲示を別タブ、または別のモニターで開きます。
- 運営画面の下側にある第2戦で、大地れん 15点、高原ゆう 18点、勝因「得点比較」を保存します。 大地れん 54点、高原ゆう 42点となり、試合の勝者は大地れんになります。
- 「試合結果」ボタンを押すと、会場に勝者を掲示します。「予選順位」では順位が更新されています。
- 「掲示対象の試合」をB-06に変え、じゃんけんで決めた先攻を選んで開始します。 第1戦を若葉ひなた 12点/高原ゆう 20点、PUTで若葉ひなた勝利、 第2戦を 5点/35点、得点比較として保存すると、合計17対55でも特殊P1対0で若葉ひなたが勝ちます。 この例が、特殊ポイントの優先順位を確認していただくための例です。
- 「対戦・記録 → 順位・トーナメント」で進出者とシード順を確認し、本戦を作ります。 A1-B2、B1-A2の準決勝と、その勝者を受け取る決勝ができます。
- 「コントロール」の進行表で「本戦の組み合わせ」を選び、本戦表を掲示します。 「次へ」で本戦の対戦表示へ進みます。対戦用の表示は、選択中の掲示対象を使います。
確認が終わったら「設定・履歴 → サンプルに戻す」で初期状態を再作成できます。 それまでの大会はサーバー内に退避されます。実データを入力する場合は「空の大会を作成」を選びます。
| 操作場所 | 実装した内容 |
|---|---|
| コントロール | 会場のプレビュー、6画面の切替、進行区分、掲示対象の選択、得点入力 |
| 表示の進行表 | 項目の追加・編集・並べ替え・削除、任意項目の表示、「次へ」 |
| 対戦・記録 | 全試合と状態、各戦の得点・勝因・先後、訂正理由、再試合、勝者・順位、本戦作成 |
| 参加者 | 氏名・所属・グループ、総当たりの組み合わせ生成 |
| 設定・履歴 | 大会名、計算方式、各組の進出人数、幕間ロゴ、操作履歴、CSV・JSON出力 |
| 会場掲示 | 開会式等の案内、対戦途中の確定値、勝者、予選順位、本戦表、幕間ロゴ |
得点はゲーム終了時に更新します。画面の切り替えは運営が行い、結果保存だけで自動切り替えはしません。 全結果はサーバーに保存し、ブラウザーを閉じても残ります。
「未確定だから実装を止める」のではなく、以下の判断で試作しました。 ユーザーから明示された要件、一次資料、自主判断を混同しないように分けています。
| ID | 採用した判断 | 根拠・理由 | 確認時の見どころ |
|---|---|---|---|
| D01 | 特殊勝利1回を1特殊Pとし、2戦の特殊P→得点で試合判定。PUT・切断等に種類別の重みは付けない | 特殊Pが勝因の抽象化であることは依頼者の明示。1Pの付与と合計の比較順は実装者の判断 | 上記17対55でも特殊Pで勝つ例が、実際の運用と一致するか |
| D02 | 釧路の予選順位は試合勝数→特殊P→合計得点 | 予選順位の詳細は未指定のため自主判断。確定試合だけで順位を計算 | 順位基準に直接対決等を加える必要があるか |
| D03 | 全比較が同じ試合は新マップで2戦とも再試合。予選の完全同順位は主催者が理由を付けて進出を裁定 | 再試合の運用資料と、勝者を推測しない記録設計 | じゃんけん・抽選・再試合など裁定の実際の手順が記録しやすいか |
| D04 | 先攻の選択は手入力。第2戦は自動反転。A/Bの入力欄の人物は固定 | じゃんけん・先後交代は依頼者の明示。入力欄を移動させないのは取り違えを防ぐ判断 | COOL/HOT表示と実機側の運用が対応しているか |
| D05 | 2グループの上位2名ならA1-B2/B1-A2。不足枠は上位シード側の不戦進出 | 本戦の具体的な配置が未指定のため標準的なシード配置を採用 | 組み合わせ抽選や同組の再戦回避に別のルールが必要か |
| D06 | 画面切替は手動。表示順も手動の「次へ」。進行区分・掲示対象・表示内容を別々に選べる | OBS型操作と事前の順番という依頼者の希望。入力途中の意図しない掲示を避ける | ボタンの数と操作順が大会当日の担当者に合うか |
| D07 | 表示順の対戦画面は現在の掲示対象を参照。時刻指定や項目ごとの試合固定は今回含めない | 同じ対戦画面を何試合にも再利用する基本形を優先 | 試合単位の細かな台本を事前登録する必要があるか |
| D08 | 得点訂正は理由必須。本戦確定後の予選修正、後続試合開始後の進出者変更は拒否 | 進行済みの対戦表を黙って書き換えないための自主判断 | 実運用で必要な取消・巻き戻しの範囲が足りるか |
| D09 | PostgreSQL・任意式のノード編集を今回の試作から外し、計算方式2つとJSONファイル保存を使う | 基本操作を一続きに評価できる成果物を優先。既存のNext.jsは継続 | 操作評価後にDB・規則編集のどちらを先に広げるか |
| D10 | 旭川向けは対人戦の計算のみ。Botなし。総当たり順位は試合勝数→換算得点 | 北海道v3.1.0の対人ルールと、対人限定という依頼者の明示。旭川の総当たり順位は試作判断 | 大会全体の正式再現ではないことを前提に、方式の差し替えが役立つか |
| D11 | 通信切断は「参加者に起因する敗北」の裁定後に選ぶ。タイムアウトやサーバー障害は手動で仕切り直す | 自動連携はまだないため、運営判断を勝手に代行しない | 勝因の選択肢に足りないものがあるか |
| D12 | 会場LAN・単一サーバー・認証なし。外部フォント等を使わず動作する | 既存のネットワーク要件を継続。公開ホスティングは行わない | 実際の会場接続にこの運用形態が合うか |
| D13 | 大きな順位表・本戦表はページ切替。自動巡回は行わない | 投影時に文字を過度に小さくしないため | 全体図と個別ページの使い分けが足りるか |
最初に確認していただきたいのは D01の試合判定、D02の予選順位、D05の本戦配置 です。 決定後はこの表に採否を記録し、計算方式の規則版を更新して実装へ反映します。
- ダミーの足し算を、素点・特殊P・勝因・各戦勝数を区別する計算に置き換えました。
- 第1戦だけで試合勝者を確定することや、再試合待ちの得点が順位に混ざることを防ぎました。
- 入力欄は空欄から始め、未入力のまま0対0として保存しにくくしました。
- 記録を訂正すると順位も再計算され、後続の試合が変わる危険な修正は拒否します。
- 入力と別タブの掲示が連動すること、画面選択と表示順が保存されることを確認しました。
- ブラウザー標準の確認ダイアログがアプリ内ブラウザーで停止したため、画面内の確認ダイアログに置き換えました。
- 長い表はページ化し、CSVでは文字列が数式として解釈されないようにしています。
- 外部Google Fontsへの依存を取り除き、会場LANでの動作を優先しました。
2026-09-23に可読性改善後の型検査・テスト・本番ビルド・API結合テスト・ブラウザー操作を再確認しました。 書き方と実装の入口は 開発ガイド にまとめています。
| 検証 | 結果 |
|---|---|
| 計算・進行のユニットテスト | 29件通過。通常得点、特殊勝利、旭川換算、左右反転、訂正、再試合、同順位、勝ち上がり、不戦枠等 |
| TypeScript | アプリ・shared・scoringで型検査と未使用変数・引数の検査を通過 |
| 整形 | Prettierで書式を統一し、整形・型・テストのPR自動検査を追加 |
| 可読性改善前後の比較 | 採点・大会操作705件、掲示HTMLとページ分割90件、CSV24件を一時検証スクリプトで比較し、一致を確認 |
| Next.js本番ビルド | 成功 |
| API結合テスト | 参加者6名→2組の予選6試合→本戦3試合→決勝まで通過 |
| SSE | 初期状態、更新通知、別掲示画面への得点・結果・順位・表示順反映を確認 |
| ブラウザー操作 | 得点入力、先後交代、特殊勝利、別画面への結果反映、設定保存、順位表示、表示順の編集・再生・「次へ」を確認。画面内確認のキャンセル・実行と本戦生成も確認済み |
| 更新競合 | 古い更新番号の保存を409で拒否し、最新状態を返すことを確認 |
| エクスポート | CSVの各戦結果・数式対策、JSONの全記録・履歴を確認 |
| 永続化 | 別のテスト用サーバーを停止・再起動し、更新番号40・決勝2戦・結果掲示状態の保持を確認 |
| Docker | 永続化volumeを設定。Dockerでのビルド・起動は未検証 |
API結合テストは scripts/smoke-prototype.mjs に残しています。
対象サーバーの大会を切り替えるテストのため、必ず別の CHROS_DATA_DIR とポートで実行してください。
通常の開発:
pnpm install
pnpm dev本番形式:
pnpm build
pnpm startこの環境で用意した3100番ポートの試作を再起動する場合:
cd chros
./node_modules/.bin/next start --hostname 0.0.0.0 --port 3100既に依存関係が入っている環境では上記の直接起動が可能です。
Node.js 22以降を使います。ファイル保存は chros/.chros、または CHROS_DATA_DIR の指定先です。
各種の詳細は 技術要件 にまとめています。
- 試合サーバーとの連携、Bot戦、マップ管理、全国固有の採点方式は実装していません。
- 会場で複数コートを同時進行する割当や対戦順の最適化は含みません。掲示対象は一度に1試合です。
- 参加者は最大128名。負荷・数十端末での連続運転・実際のプロジェクターでの視認性は未検証です。
- 任意の規則エディター、複数サーバー運用、DB連携、復元専用の画面はありません。
- 一般公開用の認証や個人情報の公開範囲管理はありません。従来要件どおり会場LAN内の試作です。
- データ退避からの復元は、サーバー停止中にJSONを戻す手順です。大会の切替画面で過去大会を選ぶ機能は今後の対象です。
サンプルの数値・名前・所属は実際の大会記録ではありません。 公開資料と現行運用の区別は 大会ルール調査 に残しています。