Skip to content

Latest commit

 

History

History
627 lines (483 loc) · 31.7 KB

File metadata and controls

627 lines (483 loc) · 31.7 KB

ZoneBoard — 実装仕様(SPEC)

ステータス: 実装中(最小構成)· 市場調査・U1–U9 確定済
更新: 2026-07-04
正本方針: PRODUCT_NOTE.md
調査入力: Gemini / Claude / ChatGPT による日・欧・アルゼンチン市場調査(2026-07-04)
OSS: OSS_SURVEY.md — フォーク可能な本命リポなし(自前実装継続)
実装: 本 SPEC の提督承認後に着手。承認前の本実装・本番デプロイは禁止。

PRODUCT_NOTE と矛盾する場合は本ファイルで「変更提案」と明示する。勝手に方針を覆さない。


0. ポジショニング(調査合意 · 全画面スクショ反映)

分析ソフトではなく、配信・講習・戦術教育のための「キャンバス最大化 Web 戦術ボード」。登録不要・ローカル完結・ユーザー自身のブランドで発信できることを核価値とする。

0-0. TACTICALista 全画面との差(samples Dashboard019/020)

日本語圏の主競合 TACTICALista には全画面表示がある(019=通常、020=全画面)。
「全画面が無いから勝てる」は 誤り。差は次のとおり。

TACTICALista 全画面(020) ZoneBoard 配信モード
ピッチ面積 大きい(目視で大半) 契約として ≥80%(計測・受け入れ条件)
ツールバー 残る(左ツール列+右上ユーティリティ) 消す(解除・極小インジケータのみ)
ピッチ上ロゴ 運営ロゴ強制(TACTICALista) ユーザーロゴ(運営ロゴなし)
アカウント Google/クラウド前提 登録不要・ローカル
目的語 編集の最大化 OBS/画面共有の見た目(配信・講習)

楔の言い方を更新する:

  • ❌「全画面がない市場」
  • ✅「配信用に chrome を消せるボード」+「自分のロゴ」+「登録不要」

日本語圏は専用 Web ボードが少なく、実質 TACTICALista 一強+ Google スライド。競合が少ないのは事実だが、一強が全画面まで持っているので「空白市場」ではない。差は全画面の有無ではなく、配信契約(chrome ゼロ級)とブランディング主権。

競合 ZoneBoard との差
TACTICALista(日本一強) 全画面はあるが ツールバー残存・運営ロゴ・クラウド前提。配信契約なし
AthletePath / renderfoot / tactical-board.com 登録不要・無料だが配信最適化・ユーザロゴなし・戦術記号が薄い
TacticalPad / Hudl / Coach Paint 多機能・高価・分析寄り。個人の配信机ではない

「chrome を消した配信モード」と「ユーザーロゴ透かし」をセットで売るツールは調査範囲で 未確認 → 楔。全画面単体では楔にならない。

0-1. 調査からの仕様裁定(3社突き合わせ)

項目 Gemini Claude ChatGPT ZoneBoard 裁定
配信モード ≥80% Must Must Must Must(v1)
ユーザーロゴ透かし Must Must Must Must(v1)
登録不要・ローカル保存 Must Must Must(個人) Must(v1)
PNG Export Must Must Must Must(v1)
5レーン ON/OFF Must Later Must Must(v1)·既定 ON(デファクト。OFF 可)
3大線種(実線/破線/波線) Must Should パス・ラン必須 Must(v1) 実線=パス、破線=ラン、波線=ドリブル
駒の向き — — ◎ Must(v1) サンプル UseCase でも必須
home+away 両チーム — — — Must(v1) 解説ユースで両軍必須(旧 U3 を覆す)
ハーフピッチ 標準 Should 必須 Must(サッカー v1)
バスケ・バレー Should 早期 Later Should Must(v1) PRODUCT_NOTE 維持。レーンはサッカーのみ
視野角(扇形) Should — ○ 出さない(概念は認識。PRODUCT_NOTE.md 決定ログ 2026-08-25)
アニメ / GIF Later Should(v1.1) Later Later(v1.1) 配信は手で駒を動かす運用が主流
クラウド同期 Should Should Later Later
動画解析・Webcam・運営ロゴ Avoid Avoid Avoid Avoid
es UI — — Should Later(v1.1) v1 は ja/en

収益メモ(v1 では未実装): Pro = Local Library Entitlement(選手セット・画角テンプレ・上限緩和)+ BYO Portability。Board JSON Export は無料楔(Storage full Recovery の Primary)。マルチデバイスは BYO(ユーザの Online Storage を指す)。ZB 預かりクラウド/ User Account ログインは本線にしない(Purchase Identity = Checkout email + Restore)。価格は年額 or 一回買いを本線仮説。詳細は PRODUCT_NOTE.md §6 · STRIPE_PRO_ARCHITECTURE.md。無料でコア体験(描画・Broadcast・ロゴ・PNG)。

  • カラムは先に固定: number(必須)· label · preferredFoot · セットの defaultColor
  • 中身の作成はユーザ任せ(貼り付け・手入力・ボードから保存)
  • 公式データのライブ取込・スクレイピングはしない。参考用の空テンプレ(番号枠だけ)は可
  • Later: 同じスキーマでセットをやり取りするコミュニティ流通(運営 DB ではなくユーザ作成データの共有)。流通場所は自ドメイン外。FAQ+既存 SNS への軽い種まき。Reddit は EN 向けのみ(JP 主戦場にしない)
  • 詳細は PRODUCT_NOTE.md 収益節

1. ゴール / Non-goals(v1)

ゴール

競技コート俯瞰の戦術ボード Web アプリ。解説・配信・部活・講習で ピッチを大きく見せたまま 駒・矢印・ゾーンを編集できる。

ID ゴール
G1 配信モードでキャンバス(コート+駒+描画)がビューポート面積の ≥80%
G2 ユーザーロゴ透かし(運営ロゴ強制なし)。配信モードでも常時表示
G3 競技プリセット: サッカー / バスケ / バレーのみ(SPORTS_SCOPE.md)
G4 駒(両チーム・向き)・世界基準3線種・ゾーン・タイトル帯・ローカル保存・PNG Export
G5 登録不要。データはブラウザ localStorage。ボードは 最大3枚(競合横並び)
G6 i18n 基盤: /ja /en(UI 文言のみ。キャンバスは言語非依存)

UX 指針

使いこなしたい人が最小学習コストでいける。 ホットキー・自由曲線・局面・ズームは任意。使わない人は駒の移動だけで足りる、と割り切る。chrome・設定・パネルの型は UI_UX.md(クリエイターツール型。パネル=試合、設定=自分)。

Non-goals(v1)

§12 と同一。要約: 選手 DB、予想スタメン専用機能、動画解析、クラウド同期、アニメ/GIF、ボード内 Webcam、運営ウォーターマーク、国別 DNS、SUGUDASU ブランド、es UI。


2. ペルソナと主要シナリオ

調査で補強したペルソナ。v1 の第一ターゲットは P1 / P1b。P2・P3 も同一ボードで満たす。

P1 — 解説系 YouTuber / SNS アナリスト(日・欧・AR)

項目 内容
痛み スライドでコート比が崩れる。既存ボードはツールバーが厚く配信でピッチが小さい。運営ロゴでオリジナル感が出ない
成功 OBS / Zoom / Meet で画面共有。配信モードでピッチ最大化+自分のロゴ。両チーム配置で試合レビュー

シナリオ S1(配信画面共有)

  1. zoneboard.app/ja を開く(登録なし)
  2. サッカー・フルピッチ。5レーンは既定 ON
  3. home/away 配置・向き・背番号・名前。パス/ラン/ドリブル線
  4. ロゴ PNG を設定
  5. 配信モード ON → ツールバー消失、ピッチ ≥80%
  6. OBS キャプチャ。ホットキーで UNDO / ツール切替 / 駒移動
  7. PNG Export(透かし焼き込み ON)→ SNS・サムネ

P1b — VTuber(W杯同時視聴・実況)

項目 内容
痛み 俯瞰ボードを画面の主役にしたいが、既存ツールは chrome が厚い/運営ロゴが残る。アバターやスコアは別レイヤで重ねたい
成功 ZoneBoard を全画面キャプチャ。OBS でアバター・スコア帯・チャットを合成。駒は番号+名前、チーム色、ロゴでチャンネル色を出す

シナリオ S1b(同時視聴)

  1. 試合前に名簿(番号+分かる範囲の名前)を取り込み、スタメン配置
  2. チーム色を両軍で設定。ユーザロゴをセンター付近に
  3. 配信モード ON。OBS でブラウザソース/ウィンドウキャプチャ
  4. アバター・スコア・テロップは OBS 側(ボードに埋め込まない)
  5. 試合中は駒移動・ボール吸着・局面/ズームで解説
  6. ハイライトは縦プリセットで PNG → X / IG

境界(やらない): アバター表示、スコア/タイマー UI、スパチャ、アンケート、同時視聴用の映像プレイヤー。

P2 — 部活・アマ・育成指導者

項目 内容
痛み ホワイトボードか紙。共有は写真。月額 SaaS は個人財布に重い(特に南米)
成功 登録なしで即描画。PNG を LINE / チャット / 印刷

シナリオ S2(ホワイトボード代替) — バスケでも可。フォーメ → 矢印・ゾーン → Export。

P3 — 講習・ライセンス資料作成(欧州寄り・副次)

項目 内容
痛み PowerPoint はコート専用挙動がない。TacticalPad は重い
成功 ハーフピッチ+5レーン+記号体系で教本用 PNG

3. 画面一覧

画面 ID 名前 説明
SCR-EDIT 編集モード 既定。キャンバス+右 Notion 風ドロワー
SCR-BROADCAST 配信モード ドロワー強制クローズ。最小 UI のみ。ピッチ最大化
SCR-SETTINGS 設定オーバーレイ Esc またはボタンで開閉。保存・Export・透かし・競技・オーバーレイ・言語
SCR-LP ランディング(薄い) /ja /en の入口。短い LP+「ボードを開く」

SCR-EDIT 構成

┌──────────────────────────────────────────────┬────────────┐
│ [配信] [設定] […]     タイトル帯(編集可)     │            │
├──────────────────────────────────────────────┤  右ドロワー │
│                                              │  (Notion風)│
│              キャンバス(コート)               │  ツール    │
│                                              │  プロパティ │
│                                              │  オブジェクト│
└──────────────────────────────────────────────┴────────────┘
  • ツール/プロパティは 右ドロワー(Notion 風)。開閉可能。閉じるとキャンバスが全幅
  • ドロワー幅の目安: 280–320px(固定)。オーバーレイではなくメインを押し縮める(push)でも、キャンバス上に被せる(overlay)でも可。実装は push 推奨(キャンバス座標が安定)
  • 右端に細い開閉ハンドル(またはヘッダのパネルアイコン)
  • 編集モード・ドロワー開時でもキャンバス面積は目安 ≥55%。ドロワー閉時は ≥80% に近づく
  • 配信モードではドロワーを強制クローズ(ツール UI を残さない)

SCR-SETTINGS(オーバーレイ)

セクション 内容
競技 サッカー / バスケ / バレー(切替時確認: 駒配置リセット)
ピッチ(サッカー) フル / ハーフ、5レーン ON/OFF
透かし 画像・位置・サイズ・不透明度・表示 ON/OFF
Export PNG(透かし焼き込み ON/OFF)
データ ボードリセット / 全クリア
言語 ja / en
バージョン アプリバージョン

4. 配信モードのレイアウト契約

黒帯・16:9 フレーム・緑(芝/余白)・リサイズ時の画角の 現行仕様は BROADCAST_LAYOUT.md。

4-1. 面積比(受け入れ必須)

指標 契約
キャンバス可視領域 ビューポートの ≥80%
測定対象 コート+駒・描画・タイトル帯・透かしを含む「ボード面」
除外 最小 UI(§4-2)は面積計算から除外可(合計 ≤20%)
余白 装飾余白禁止(0〜8px)

検証: 1280×720 および 1920×1080 で面積比 ≥0.80。

4-2. 残す最小 UI

UI 必須 備考
現在ツールの小さなインジケータ 推奨 アイコンのみ・端・半透明
UNDO 任意 Ctrl+Z があればボタン不要
配信モード解除 必須 端に小さく。Esc でも解除
ユーザーロゴ透かし 必須 ツールバー非表示でも残す
タイトル帯 任意 表示維持。編集は配信モード外推奨

4-3. ホットキー(v1)

キー 動作
B 配信モード トグル
Esc オーバーレイ閉じる / 配信モード解除(オーバーレイ優先)
V 選択
1 パス線(実線矢印)
2 ラン線(破線矢印)
3 ドリブル線(波線)
Z ゾーン(矩形)
P フリーハンド
T テキスト
R 選択駒の向きを 45° 回転(選択中のみ)
Ctrl+Z / Cmd+Z UNDO
Ctrl+Shift+Z / Cmd+Shift+Z REDO
Delete / Backspace 選択削除
Ctrl+S / Cmd+S localStorage 即時 flush(preventDefault)

<input> / <textarea> フォーカス中は文字キー無効。


5. ロゴ透かし

項目 仕様
入力 image/png, image/jpeg, image/webp。透過 PNG 推奨
送信 サーバーへ送らない
表示 キャンバス最前面。pointer-events: none
位置 ピッチ上の自由座標 (x,y) 0–1(既定センター 0.5,0.5)。ドラッグで移動。四隅ショートカット可
サイズ ボード短辺比 5–25%(既定 12%)
不透明度 10–100%(既定 40%)
配信モード 設定 ON なら常時表示
PNG 焼き込み Export 時 ON/OFF(既定 ON)
永続化 zoneboard:v1:watermark。data URL ≤ 500KB
やらない 運営強制ウォーターマーク

6. 競技プリセット・オーバーレイ

単位: コート外接矩形の論理座標。幅 W・高さ H(横長既定)。縦ボード(Later · B-072) は VERTICAL_PITCH.md — 比入替、横局面との座標切替なし。

競技 ID 表示名 (ja/en) 公式寸法(参考) 論理比 W:H
soccer サッカー / Soccer 105m × 68m(FIFA推奨・Jリーグ解説) 105:68
basketball バスケ / Basketball 28m × 15m(FIBA) 28:15
volleyball バレー / Volleyball 18m × 9m(FIVB) 18:9

サッカー専用(v1 Must)

項目 仕様
ピッチビュー full(全面)/ half(攻撃側ハーフ。反転トグルあり)
5レーン タッチライン方向を5等分(LW / 左HS / 中央 / 右HS / RW)。ハーフスペース帯を薄く着色。ON/OFF(既定 ON)。OFF で配信ノイズ除去可
ピッチ寸法(正確) ペナ16.5m・ゴールエリア5.5m・PK点11m・センター円半径9.15m・コーナー弧1m(Jリーグ/FIFA)。実装定数: src/presets/soccerPitch.ts
駒サイズ pieceScale 0.5–1.6。プリセット: 戦術(大) / 標準 / 精密(小)。Match Piece Size=ユーザ意図。 ズーム密度補正は乗算のみで値を書き換えない(PRODUCT_NOTE 決定ログ 2026-08-25)
駒の向き ドラッグ移動方向に追従。ドラッグ中は拡大+影(配信フィール)
サブ ピッチ外帯。大会カテゴリ別最大控え: 小9 / 中7 / 高7 / 大9 / 社会人12
ロゴ 自由配置。サイズ最大55%(短辺比)。レイヤ: 5レーン→ロゴ→ピッチ線→描画→駒→ボール。白背景PNGは白を透過扱い
局面(Scene) 配置の差し替え。最大8。[ ] で切替。UNIQUE は scene.id
画角(Viewport) 同じ配置のままズーム。ホイール/プリセット(CK・スローイン・ペナ)。駒は消さない。寄せたとき駒の画面サイズはフル画角相当を維持(密度優先・上記と整合)
ハーフ非表示 レガシー。左右の空間カット。セットプレーは画角ズーム推奨。使い所は制作会社次第(PRODUCT_NOTE 決定ログ 2026-08-25)
チーム表示 teamFocus: both / home / away。試合前・試合後の準備。Scenes。駒は消さず描画フィルタ。実況 chrome 本線にしない
名簿・スタメン 背番号が本体、名前は任意(地方大会・州選手権など名前不明を想定)。発表後にスタメン番号だけで一括配置
利き足 任意。L/R/B を駒に小さく表示(解説・VTuber)。未設定は非表示。名簿は 10,久保,R 形式可
ボール 競技別グラフィック(サカ/バス/バレ)。選択・ドラッグ時は駒と同様に拡大アニメ
thirds v1.1(横3分割ガイド)

コート描画(最小)

競技 描く線・領域
soccer 外枠、ハーフウェイ、センターサークル、ペナルティエリア、ゴールエリア、ペナルティスポット、コーナーアーク(簡易可)
basketball 外枠、ハーフ、スリーポイント(FIBA 簡易)、フリースローレーン、センターサークル
volleyball 外枠、センターライン、アタックライン(両側)

色(決定 U6): v1 は全競技とも コート面白一色・線は黒(または濃灰)。TACTICALista 全画面に近い高コントラスト。競技ごとの緑/橙/青やユーザー独自色は v1.1 以降。

寸法比は公式標準の実装用固定値。大会固有ピッチは対象外。

記号体系(世界基準・v1 Must)

指導者教本でデファクトとされる3線種。ドラッグ自由曲線(制御点なし。ダイアゴナルラン・スクリーンの弧など):

lineKind 見た目 意味
pass 実線矢印(自由曲線可) ボール移動(パス)
run 破線矢印(自由曲線可) 選手の移動(ランニング)
dribble 実線矢印(自由曲線可) ドリブル軌道(ユーザが弧を描く)

UI ラベル(i18n): ja「パス / ラン / ドリブル」、en「Pass / Run / Dribble」。Illustrator 型の制御点は使わない。

駒(v1 Must)

属性 仕様
team home / away(両チーム配置可)
number 背番号文字列
label 名前(長文は省略表示可。フルはツールチップ or 編集パネル)
color チーム既定色を上書き可
facing 向き(度: 0=右、反時計)。駒縁の小さな三角矢印で表示。体の向き=視線の代理。扇は出さない(PRODUCT_NOTE 決定ログ)

7. データモデル

7-1. ボード JSON(BoardDocument)

type SportId = "soccer" | "basketball" | "volleyball";
type LineKind = "pass" | "run" | "dribble";
type PitchView = "full" | "half";

interface BoardDocument {
  schemaVersion: 1;
  id: string;                    // uuid
  sport: SportId;
  title: string;
  pitchView: PitchView;          // soccer 以外は常に "full"
  pitchFlipped: boolean;         // half 時の左右反転
  showLanes5: boolean;           // soccer のみ。新規ボード既定 true
  pieces: Piece[];
  objects: DrawObject[];
  updatedAt: string;             // ISO-8601
}

/** localStorage 上のボード一覧。最大 MAX_BOARDS = 3 */
interface BoardStore {
  boards: BoardDocument[];       // length 0–3
  activeBoardId: string | null;
}

interface Piece {
  id: string;
  x: number;                     // 正規化 0–1(左上原点)
  y: number;
  number: string;
  label: string;
  color: string;
  team: "home" | "away";
  facing: number;                // degrees 0–360
}

type DrawObject =
  | LineObject
  | ZoneObject
  | PenObject
  | TextObject;

interface LineObject {
  id: string;
  type: "line";
  kind: LineKind;                // pass | run | dribble
  x1: number; y1: number; x2: number; y2: number;
  color: string;
  strokeWidth: number;
}

interface ZoneObject {
  id: string;
  type: "zone";
  x: number; y: number; w: number; h: number;
  color: string;
  strokeColor: string;
}

interface PenObject {
  id: string;
  type: "pen";
  points: { x: number; y: number }[];
  color: string;
  strokeWidth: number;
}

interface TextObject {
  id: string;
  type: "text";
  x: number; y: number;
  text: string;
  color: string;
  fontSize: number;
}

interface WatermarkSettings {
  enabled: boolean;
  imageDataUrl: string | null;
  position: "top-left" | "top-right" | "bottom-left" | "bottom-right";
  sizePercent: number;
  opacity: number;
}

7-2. localStorage キー

キー 値
zoneboard:v1:store BoardStore JSON(最大3ボード)
zoneboard:v1:watermark WatermarkSettings
zoneboard:v1:prefs { locale?: "ja"|"en", lastSport?: SportId }

ボード数制限(U9 · 競合横並び)

項目 仕様
上限 3枚(TACTICALista Starter 等と同規模)
新規作成 boards.length < 3 のときのみ。3枚時はボタン無効+「上限に達しています」
削除 可。最後の1枚を消した場合は空の既定ボードを1枚自動生成
切替 ヘッダまたは右ドロワーにボード一覧(タイトル・競技)。クリックで activeBoardId 切替
月次リセット しない(枚数上限のみ。月あたり作成数制限は設けない)
  • デバウンス 300ms + Ctrl+S 即時(アクティブボードを store に反映)
  • 破損時は空の既定ボード1枚へフォールバック
  • QuotaExceededError 時は透かし画像を落として再試行

7-3. フォーメーションプリセット(v1)

競技 プリセット
soccer home: 4-4-2, 4-3-3, 3-5-2 / away: 同型のミラー配置(対戦セットとして一括配置可)
basketball home 5人 / away 5人
volleyball home 6人 / away 6人(簡易)

色既定: home #e74c3c、away #3498db。


8. Export(PNG)· SNS 逆算

正本の考え方: SOCIAL_OUTPUT.md

項目 仕様
形式 image/png(UI なし)
プリセット 正方形 1080 / 16:9 1920×1080 / 4:5 / 9:16 Story / ピッチ比ネイティブ
レターボックス ピッチは歪めない。余白 #f4f4f4
透かし 焼き込み ON/OFF
キャプション 試合名 · 局面名を下部バーに焼く(任意・単体投稿用)
画角 いまのズーム / 全体 / ファイナルサード(左・右)
ファイル名 zoneboard-{sport}-{preset}-{yyyyMMdd-HHmm}.png

映えの原則: 配信は横・投稿は縦(別ステージ)。高コントラスト・ロゴ帰属・文脈テキスト・セットプレーはズームのまま縦プリセットで書き出し。API 直投稿はしない。


9. i18n

正本の市場判断: LOCALE_MARKETS.md。

項目 仕様
ドメイン zoneboard.app のみ
公開デフォルト 英語。/ と静的ドキュメントは EN。Accept-Language で JA に振らない
あとで足すパス /ja/ /es/ /pt/ /fr/ など 面を分ける。同一 URL に複数言語を積まない
対象 メニュー、設定、線種ラベル、エラー、LP、How-to、法務
対象外 コート、背番号・ユーザー入力、ホットキー文字
次の UI 流入を見て es → pt-BR。その次の候補は fr。独・伊はデータ次第
5大リーグ キット・フォーメ(中身)。chrome の5言語化ではない

ブランド名 ZoneBoard は言語共通。SUGUDASU は出さない。


10. 技術方針

層 選択
ビルド Vite
UI React + TypeScript(現行は React 19)
キャンバス HTML Canvas 2D(薄い自前レイヤ)
ルーティング react-router(英語=/ · 他=/{locale}/ · /en は / へ。Board は /board)
永続化 localStorage(将来 IndexedDB 移行可。v1 は localStorage で足りる)
ホスト Cloudflare Pages(SUGUDASU と別プロジェクト)

デプロイ・env・二層ルーティング・Functions の正本: INFRASTRUCTURE.md(本表より詳細・新しい)。
Football 多言語読み物(未実装): FOOTBALL_CONTENT_ARCHITECTURE.md。

見送り: Next.js、Konva/Fabric、バックエンド。

zoneboard/
  docs/
  samples/          # 参考スクショ(実装非依存)
  src/
    app/
    canvas/
    components/
    i18n/
    models/
    storage/
    presets/
  public/
  package.json

11. 受け入れ条件

配信・レイアウト

  • AC1: 配信モードでボード面 ≥80%(1280×720, 1920×1080)
  • AC2: ツールバー非表示。解除ボタン or Esc
  • AC3: ユーザー透かしが表示される(ON 時)
  • AC4: 装飾の大きな余白なし

透かし

  • AC5–AC8: ローカル画像設定・四隅/サイズ/不透明度・リロード復元・サーバー非送信

競技・編集

  • AC9: サッカー / バスケ / バレー切替、寸法比 §6 どおり。コート面は白・線は黒/濃灰
  • AC9b: サッカーでフル/ハーフ切替、5レーン ON/OFF(新規ボードはレーン既定 ON)
  • AC10: home/away 駒の追加・移動・背番号・名前・色・向き
  • AC11: パス(実線)/ ラン(破線)/ ドリブル(波線)/ ゾーン / ペン / テキスト
  • AC12: タイトル帯編集
  • AC13: UNDO/REDO(最低 UNDO)
  • AC14: 各競技でフォーメプリセット1つ以上(soccer は対戦セット可)

保存・Export・i18n

  • AC15: リロードでボード復元(最大3枚・アクティブ維持)
  • AC15b: 4枚目を作れない。3枚時に上限メッセージが出る
  • AC16: PNG Export、透かし焼き込み ON/OFF
  • AC17: /ja /en で UI 切替
  • AC18: SUGUDASU / 運営ロゴ強制なし

品質

  • AC19: 登録・ログインなし
  • AC20: §4-3 ホットキーで主要操作可能

12. やらないこと(v1)

項目 理由
選手 DB / スクレイピング 範囲外
予想スタメン専用機能 やらない。 名簿+スタメン背番号+フォーメ配置で足りる。独自色はロゴ・局面名・解説側。他競技展開でも語彙がサッカー寄りになるため専用モードは持たない
動画解析・テロストレーション Hudl/Coach Paint 領域。ボードに徹する
クラウド同期・アカウント 個人入口はローカル。クラブ向けは後続
アニメ / GIF / MP4 v1.1。配信は手動かしが主流
ボード内 Webcam OBS 側
運営強制ウォーターマーク 差別化の逆
視野角扇形 出さない(2026-08-25。概念は認識のうえ敢えて非採用)
thirds ガイド v1.1
フットサル / ビーチサッカー v1.1(サッカー派生のピッチプリセット。ボール・記号は流用)
ジュニアピッチ v1.1
v1 対象外競技(ラグビー、アメフト、野球、テニス、F1、eSports 等) SPORTS_SCOPE.md。長方形・中密度・配信文化でサカ/バス/バレに固定
コート色カスタム(競技色・ユーザー色) v1.1(v1 は白地+黒線のみ)。VTuber のピンクピッチ等はここで
VTuber アバター埋め込み・スコアボード・スパチャ UI OBS 側。ボードはピッチに徹する
es UI v1.1
zoneboard.com / 国別 DNS 却下済
SUGUDASU ブランド 別プロダクト
SNS 投稿連携・共同編集 範囲外
ピッチ上の広告 / 配信モードの広告 絶対にやらない(2026-08-24)。 運営広告もユーザ設定広告も、配信キャプチャ面に出さない。LP 等のサイト面とは切り離す

13. 決定事項(旧未決 · 提督回答 2026-07-04)

旧 U3(away)は調査反映時に v1 両チームで確定済み。

# 項目 決定
U1 ルート / の既定言語 Accept-Language、なければ ja
U2 ツール UI 右 Notion 風ドロワー(開閉可。配信モードでは強制クローズ)
U4 JSON ファイル入出力 v1.1
U5 LP 短い LP+「ボードを開く」
U6 コート色 v1 は白一色(線は黒/濃灰)。ユーザー独自色は v1.1 以降
U7 タッチ タブレット・大型タッチ対応(1本指ドラッグ、ピンチズーム、2本指パン、当たり拡大)。ホットキーは PC 任意加速
U8 5レーン既定 ON(現代戦術のデファクト。OFF 切替は可)
U9 ボード数制限 最大3枚(競合横並び。月次リセットなし)

14. 承認

項目 状態
SPEC ドラフト 本ファイル(市場調査・U 決定反映)
未決 U1–U9 確定
提督承認(実装着手) 済(2026-07-04 · 最小構成で着手)

承認後の実装順:

  1. Vite + React + TS 足場・i18n・短い LP
  2. レイアウト(薄いヘッダ+右ドロワー+キャンバス)
  3. サッカーコート(白地・フル/ハーフ)+5レーン+正規化座標
  4. 駒(home/away・向き)・3線種・ゾーン・ペン・テキスト・UNDO
  5. BoardStore(最大3枚・切替・新規/削除)
  6. ユーザーロゴ透かし
  7. 配信モード(ドロワー強制クローズ・面積計測付き)
  8. PNG Export
  9. バスケ・バレープリセット(白地のまま)
  10. Cloudflare Pages(別プロジェクト)

End of SPEC