Appearance
LiGA DiVeRTiDA リニューアル — 技術方針
1. プロジェクト概要
| プロジェクト名 | LiGA DiVeRTiDA リニューアル |
|---|---|
| 現行サイト | https://www.ligad-genius.jp/ |
| 概要 | フットサル・ソサイチ大会マッチングプラットフォームのフルリプレイス |
| MVPリリース目標 | 2026/6/14 |
| Ver.2 | 2026年秋以降 |
現行サイトの課題
| 課題 | 影響 | 誰が困るか |
|---|---|---|
| スマホ非対応 | ユーザーの大半がスマホ利用。申込完了率の低下に直結 | ユーザー |
| 決済エラー多発 | 申込途中で離脱 → 売上機会損失・問い合わせ対応コスト | ユーザー / 運営 |
| 大会が探しにくい | フィルタ・検索が貧弱。日程・エリア・レベルで絞れない | ユーザー |
| スプレッドシートで手動管理 | 受注・スケジュール・収支を全て手作業で転記。ミスと工数の温床 | 運営 |
| データのリアルタイム把握不可 | 売上・申込状況の把握にタイムラグ。経営判断が遅れる | 経営 |
2. 技術スタック
アプリケーション
フロントエンド
Next.js 15
SSR/SSG/ISRの柔軟性、SEO対応、Turbopackによる開発速度向上
バックエンド
NestJS
TypeScript統一、構造化されたAPI設計、決済・枠ロック等の複雑なロジックに適する
ORM
Drizzle
型安全、SQLに近いクエリ記述、オーバーヘッドほぼゼロ
認証
BetterAuth
Google / LINE等のOAuthビルトイン、ロール管理プラグイン内蔵
フロントエンド周辺
UIコンポーネント
shadcn/ui + Tailwind v4
依存最小化、管理画面の高速実装
フォーム
React Hook Form + Zod
型安全なバリデーション、フロント/バック共通スキーマ
状態管理
Zustand
軽量、申込フォームの状態管理
リッチテキスト
Tiptap
お知らせ等のエディタ
外部サービス
決済
Stripe
カード/コンビニ/PayPay/銀行振込に一括対応(後述)
メール
Resend + React Email
高い到達率、Reactでテンプレート記述可能
開発基盤
モノレポ
Turborepo
型・スキーマ共有、CI高速化
テスト
Vitest + Playwright
ユニット/統合 + E2E
CI/CD
GitHub Actions
プッシュ・PR単位で自動テスト・デプロイ
LINE連携ログインとLINE通知は別物
| LINE連携ログイン(OAuth) | LINE通知(Messaging API) | |
|---|---|---|
| 仕組み | LINEアカウントでログインする機能。ユーザーのプロフィール情報を取得するだけ | LINE公式アカウントからメッセージを送信する機能。友だち追加が必要 |
| ユーザーの操作 | ログイン画面で「LINEでログイン」を選択 | LINE公式アカウントを友だち追加 |
| 通知は送れるか | 送れない | 送れる |
| 認証基盤との関係 | Google OAuth / LINE OAuthは選択肢の一つ | 認証方式に依存しない。Google OAuthでログインしていても後から追加可能 |
MVPではGoogle OAuthでログイン + メールで通知。LINE通知が必要になった場合は、認証方式を変えずにLINE公式アカウント連携(友だち追加フロー + Messaging API)を追加するだけで対応可能。
3. 決済(Stripe)
Stripeひとつで以下の決済手段を全てカバー。別サービスの契約や個別実装は不要。
クレジットカード
Visa / Master / Amex / JCB
手数料 3.6%
コンビニ決済
ファミマ / ローソン 等
手数料 3.6%
PayPay
QRコード決済
手数料 3.6%
銀行振込
仮想口座で自動照合
手数料 1.5%
Apple Pay
iPhone / Safari
手数料 3.6%
Google Pay
Android / Chrome
手数料 3.6%
初期費用・月額固定費なし。決済が発生した分だけ手数料がかかる従量課金。
4. インフラ構成
ユーザー ──→ Vercel (Next.js) ──→ Cloud Run (NestJS) ──→ Cloud SQL (PostgreSQL)
│ │
│ ├──→ Stripe(決済)
│ ├──→ Resend(メール送信)
│ └──→ Cloudflare R2(画像等)
│
└──→ Sentry(エラー監視)| レイヤー | サービス | 選定理由 |
|---|---|---|
| フロント | Vercel | Next.js開発元。プレビューデプロイ自動 |
| バックエンド | Cloud Run | コンテナ置くだけ。ゼロスケール対応、自動SSL |
| DB | Cloud SQL (PostgreSQL) | マネージド、自動バックアップ |
| ストレージ | Cloudflare R2 | S3互換、転送料無料 |
| 監視 | Sentry + Vercel Analytics | エラー監視 + パフォーマンス |
なぜこの構成でシンプルに済むのか
AWS自前構築で必要になるインフラ要件の大半が、マネージドサービスに組み込み済み。
| 要件 | AWS自前構築の場合 | 今回の構成 |
|---|---|---|
| ロードバランサ | ALB設定・ターゲットグループ管理 | Cloud Run / Vercel が自動で負荷分散 |
| オートスケール | ECS Service Auto Scaling設定 | Cloud Run がリクエスト単位で自動スケール(ゼロスケール対応) |
| CDN | CloudFront設定・キャッシュポリシー | Vercel Edge Network が標準搭載(全世界エッジ配信) |
| SSL証明書 | ACM発行 + ALB紐付け + 更新管理 | Vercel / Cloud Run が自動発行・自動更新 |
| マルチリージョン | 複数リージョンに手動で構築 | Vercelは自動エッジ配信。Cloud Runは東京リージョン単一で十分(MVP規模) |
| DDoS防御 | AWS Shield / WAF設定 | Vercel自動保護 + Cloud Armor(必要時に有効化) |
| DB高可用性 | RDS Multi-AZ設定 | Cloud SQL HA構成(フェイルオーバーレプリカ、必要時に有効化) |
④シートではAWS(ECS/Fargate/RDS/ALB/WAF等)前提でインフラ構築に13人日を見積もっている。マネージドサービス採用により、同等以上の信頼性を1人日で実現。
インフラコスト(MVP初期)
| サービス | 月額目安 |
|---|---|
| Vercel (Pro) | 約 ¥3,000〜 |
| Cloud Run | 約 ¥500〜2,000 |
| Cloud SQL (db-g1-small, SSD 20GB) | 約 ¥4,500 |
| Cloudflare R2 | 約 ¥200〜500 |
| Resend | ¥0〜3,000 |
| Sentry | ¥0〜 |
| 合計 | 月 ¥8,000〜10,000 程度 |
ステージング環境
本番とは完全に分離されたステージング環境を開発初期から用意する。
| サービス | 分離方法 | 追加コスト |
|---|---|---|
| Vercel | Git連携で自動。PRごとにプレビューURLが発行される。追加設定不要 | ¥0 |
| Cloud Run | サービスを2つ作成(api-staging / api-prod) | ¥0(ゼロスケール) |
| Cloud SQL | ステージング用に小インスタンスを追加 | 約 ¥2,000/月 |
| Cloudflare R2 | バケットを2つ作成(staging / prod) | ¥0 |
| Stripe | 標準でテストモード / 本番モードが分離済み。APIキー切替のみ | ¥0 |
| Resend | 環境変数でAPIキー切替。テスト時はサンドボックスドメイン | ¥0 |
コードは同一で、環境変数のセットだけでステージング/本番を切り替える構成。
なぜ開発初期からステージングが必要か
| 場面 | ステージングなしの場合 | ステージングありの場合 |
|---|---|---|
| Stripe決済テスト | ローカルではWebhookが受け取れず、「決済→DB反映→メール送信」の一連フローが検証できない。リリース直前に初めて結合して問題発覚 → 手戻り | Week 3からテストモードで実際のフローを通せる。問題を早期に潰せる |
| クライアント確認 | 「画面できました」→ スクショやデモ動画で共有 → 実機で触れない → 認識ズレが後半で発覚 | URLを渡すだけでスマホ実機で触ってもらえる。「ここ違う」を即修正 |
| 本番リリース時 | リリース直前にステージング構築 → 環境差異でバグ → 本番に持ち込むか、リリース延期か | 本番と同じ構成で数週間動かしているため、環境起因の問題はゼロ |
| 本番データ保護 | 本番DBで開発中のコードを動かすと、決済・ポイントデータを壊すリスクがある。壊したら取り返しがつかない | ステージングDBは壊しても本番に影響なし。安全に試行錯誤できる |
追加コストは月 ¥2,000 程度(Cloud SQLステージング用インスタンスのみ)。「リリース直前に作る」と手戻りコストの方が遥かに大きい。
5. 開発方針
基本方針
- 速度重視 — モノができることを最優先
- 開発効率の最大化 — コード生成にAIツールを一部活用し、開発速度を向上
- モバイルファースト — ユーザー向けはシングルカラム・モバイルファーストで設計し、PCでも自然に見えるようブレイクポイントで調整。管理画面はデスクトップ前提
進め方
- 設計書・仕様書は作らない — 動くコードとGitHub上のIssue / PRをソースオブトゥルースとする
- やりとりはGitHub Issueで行う — 要望・質問・仕様確認はすべてIssueに起票。議論がそのまま開発タスクになり、経緯もコードと同じ場所に残る
- 会話→実装→確認の短サイクル — Issueで要件を固め、すぐ実装してフィードバックを得る
- 認識合わせは実画面で行う — ステージング環境にデプロイした実画面を見ながら確認。ワイヤーフレームやモックアップのやり取りは最小限にする
- 進捗はGitHub Projectsで共有 — Issueをカンバン(Todo → In Progress → Done)で可視化。クライアントがリアルタイムで進捗を確認でき、進捗報告ミーティングが不要になる(無料)
- PRごとにプレビューURLが自動生成 — Vercelが各PRに対して確認用URLを自動発行。画面確認のたびにデプロイ待ちやミーティングを挟む必要がなく、IssueにURLを貼るだけでフィードバックを受けられる
GitHub Issue — やりとりの場
要望 → 議論 → PR → プレビュー確認がIssue内で完結
GitHub Projects — 進捗の可視化
カンバン形式で進捗がリアルタイムに見える(無料)
モノレポ構成
フロント(Next.js)・バック(NestJS)・DB定義・共通型を1つのリポジトリで管理。型やバリデーションの二重実装をなくす。
liga/ ├── packages/ │ ├── shared/ ← 型・バリデーションスキーマ・定数(フロント/バック共通) │ ├── web/ ← Next.js 15(ユーザー向け + 管理画面) │ ├── api/ ← NestJS(決済・定員管理・スケジュール等のAPI) │ └── db/ ← Drizzle スキーマ・マイグレーション・seedデータ ├── .github/workflows/ ← CI/CD └── docker-compose.yml ← ローカル開発環境
シングルカラムレイアウト
ユーザー向け画面はモバイルファーストのシングルカラムで設計。PCではコンテンツ幅を広げ、余白やカードサイズを調整して自然な見た目にする。
UIトーン: カジュアル × ワクワク × シンプルでかっこいい。直感的に操作できるUI。
スマホ(基本設計)
9:41
シングルカラム / 全幅
PC(ブレイクポイントで調整)
liga-new.jp
max-width: 768px / ナビ横並び・フィルタ展開・カード3列化
スマホを最優先で設計し、PCではブレイクポイント(768px〜)で余白・カード配置等を調整する最小限のレスポンシブ対応。管理画面はデスクトップ前提(shadcn/uiのData Table等をそのまま使用)。
テスト方針
全てにテストを書くのではなく、金銭・安全に直結する箇所に集中する。
P0
決済フロー(Stripe連携)
バグ=金銭事故
P0
枠ロック・排他制御
バグ=オーバーブッキング
P1
認証・認可
セキュリティ直結
P1
キャンセル・返金ロジック
金銭に関わる
P2
スケジュール自動生成
ロジック複雑
6. 開発体制
| 役割 | 担当範囲 | 人数 |
|---|---|---|
| テックリード / PM | 技術選定・アーキテクチャ設計・進捗管理・クライアント窓口 | 1名 |
| フロントエンドエンジニア | ユーザー向けUI(トップ・検索・詳細・申込フォーム)・レスポンシブ対応・デザインシステム構築 | 1名 |
| バックエンドエンジニア | API設計・Stripe決済・枠ロック・ポイント管理・スケジュール自動生成・管理画面 | 1名 |
| QA / インフラ | テスト設計・E2E / 統合テスト・CI/CD構築・ステージング / 本番環境管理・セキュリティ対応 | 1名 |
| 合計 | 4名 |
コード生成にAIツールを一部活用し、定型的な実装(CRUD・テストコード・設定ファイル等)を効率化。人間はレビュー・動作確認・ビジネス判断に集中する。
7. MVP開発スケジュール
前提
- 体制: 4名
- 期間: 約7週間
- リリース目標: 2026/6/14(土)
- 開発開始: 2026/4/28(月)
W1
4/28W2
5/5W3
5/12W4
5/19W5
5/26W6
6/2W7
6/9
4/28W2
5/5W3
5/12W4
5/19W5
5/26W6
6/2W7
6/9
基盤構築
ユーザー向けUI
申込・決済
管理
テスト・仕上げ
| 期間 | 日付 | 内容 |
|---|---|---|
| Week 1 | 4/28 〜 5/2 | モノレポ初期化 / DBスキーマ全テーブル設計 / 認証基盤(Google OAuth)/ CI/CD / ステージング環境構築 / デザインシステム |
| Week 2 | 5/5 〜 5/9 | トップページ / 大会検索・一覧(フィルタ全種) / 大会詳細ページ / 会場一覧・詳細 / お知らせ / タイムセール表示 |
| Week 3 | 5/12 〜 5/16 | 申込フォーム / Stripe決済(テストモード結合) / 枠ロック / ポイント・クーポン適用 / ポイント有効期限 |
| Week 4 | 5/19 〜 5/23 | メール送信 / マイページ / キャンセル・返金 / 事前払い・当日払い分岐 / 問い合わせ・法的ページ |
| Week 5 | 5/26 〜 5/30 | 管理(施設・大会CRUD / 受注管理 / スケジュール自動生成 / キャンペーン・クーポン / ユーザー・ポイント管理) |
| Week 6 | 6/2 〜 6/6 | 管理(収支管理・レポート / 現場スタッフ5画面 / 試合結果管理) / E2Eテスト(決済・申込フロー)/ 統合テスト(枠ロック) |
| Week 7 | 6/9 〜 6/13 | 本番環境構築・DNS設定 / 負荷テスト / SEO対策 / バグ修正・最終調整 / クライアント最終確認 |
| 6/14(土) | MVPリリース |
GW(5/3〜5/6)に注意。Week 1の後半がGWにかかる。クライアント側のアカウント準備(Stripe本番申請・GCP OAuth同意画面設定・GCP請求設定)はGW前の4/28週中に依頼しておくこと。
8. 要件シート未記載だがMVPに組み込み済みの機能
ユースケース検証・現行サイト調査により発見し、全てMVP工数表に計上済み:
競技種別フィルタ
現行サイトの主要フィルタ
タイムセール機能(ポイントバック表示含む)
現行サイトの主要機能
事前払い / 当日払い料金分岐
現行の料金体系(22,500円 vs 24,500円)
大会参加の流れページ
初回ユーザー離脱防止(現行はNotionで代用)
雨天中止・開催変更の一斉通知
現行は開催2時間前にメール通知
ポイント有効期限・失効処理
現行は30日期限あり
賞品選択機能
申込時に3択から選ぶ(申込フォームに統合)
SNSシェア・OGP設定
集客導線
404・エラーページ
基本的なUX
問い合わせフォーム
現行サイトに存在
法的ページ(特商法・プライバシーポリシー)
法的要件
インドア / 屋外フィルタ
現行サイトの施設属性
大会ルール・レギュレーション表示 + 管理入力UI
大会詳細ページ + 大会・企画CRUDに統合
旧サイト(ligad.jp)リダイレクト
SEO・ユーザー導線維持
PayPay・銀行振込・コンビニ決済はStripe標準機能で対応可能(設定のみ)。
9. Ver.2(秋以降)スコープ
以下はMVPには含めず、Ver.2以降で対応する。
ユーザー向け
レコメンド機能(過去参加履歴ベース)
割り勘決済(メンバー間で参加費分割)
過去参加試合結果・スコア確認
ランキング表示(個人・チーム)
チーム登録・メンバー招待・離脱
チーム内チャット
助っ人参加・募集機能
管理
詳細分析ダッシュボード(KPI可視化)
スタッフ登録・シフト表・評価
給与計算(GMOあおぞらネット銀行連携)
外部連携
LaBOLA連携(試合結果・ランキング)
ラボーラ自動連携bot(コート予約自動取得)
LINE公式アカウント連携(友だち追加 → Messaging API)
メルマガ配信機能
10. クライアント確認事項
1
ドメインは既存(ligad-genius.jp)を継続か、新規取得か
現行ドメインの検索順位は低く、SEO資産は限定的。新規ドメインの方がリダイレクト対応が少なくシンプル
2
ログイン方式の選定 — LINE連携ログインでも対応可能だが、Google OAuthなど他の選択肢もある。どの方式をメインにするか
どの方式を選んでも実装工数はほぼ同じ(BetterAuthがビルトイン対応)。なお、LINE通知(リマインド・中止連絡等)はログイン方式とは無関係で、別途LINE公式アカウント連携が必要(前述)。通知が必要な場合のタイミング(MVPかVer.2か)も要確認