REDCLIFF FAN PLATFORM — 技術実装方針 v0.1

技術アーキテクチャ・開発順序メモ

構想提案(Proposal v0.1)の内容を「誰が・どの順番で・どこまでを自作するか」に落とし込むための実装検討資料。対象読者は実際に開発するエンジニア/外部委託先。

この資料の位置づけ:構想提案は意思決定者向けの事業判断材料であり、これはPilot着手が決まった後の実装検討材料。ここに書かれた難易度・順序・期間は現時点の見積りであり、実際のチーム構成や委託先の技術選定によって変わる。

SYSTEM ARCHITECTURE

一人開発を前提にした6ブロック構成

全部を自社で組み上げるのではなく、枯れた外部サービスに任せられる部分は任せ、REDCLIFF固有のロジック(Stamp・Passport・Sponsor向け集計)だけを自作する。

インタラクティブな構成図を開く(パン・ズーム・依存関係トレース対応)
PWA フロントエンド
  • 活動ページ/地図/日程
  • Sky Passport 画面
  • Sky Memory 表示・共有
身元確認システム
  • LINE Login(OAuth / PKCE)
  • メール Magic Link
  • アカウント統合ルール
業務管理バックエンド
  • 活動の作成・編集
  • NFC/QRの有効化・無効化
  • Stamp手動補発・取消
  • スタッフ権限・操作ログ
データベース
  • ユーザー・アイデンティティ
  • 活動・参加記録
  • 分析イベント(訪問・登録・参加・共有)
非同期ジョブ
  • Sky Memory 画像生成(キュー処理)
  • 通知の送信
  • 集計バッチ
基盤・監視
  • CDN(静的ページ・地図)
  • ログ・エラー監視
  • データベースバックアップ

BUILD vs BUY

自作しない部分を先に決める

一人(または少人数)開発を現実的にする一番の判断は、「枯れた領域を自作しない」こと。

✕ 自作しない

  • パスワード認証の仕組み
  • メール送信サーバー
  • 画像・動画ストレージ基盤
  • 動画トランスコード基盤
  • プッシュ通知サーバー
  • 決済・チケット販売基盤
  • 汎用アクセス解析基盤

◯ REDCLIFF固有ロジックとして自作

  • Sky Passport のデータ構造
  • Stamp付与・重複防止のルール
  • Sky Memory 画像テンプレート合成
  • Confirmed/Estimatedを分けた集計
  • Sponsor向け実績まとめ

DIFFICULTY MAP

機能別・技術難易度

「難しいから無理」ではなく、「難易度が高いものはPhase 1に入れない」ための判断材料。

機能難易度判断
PWA活動ページ・静的地図・日程個人開発に十分向く。天気は外部APIで済む
LINE LoginOAuth・PKCE・コールバックを正しく実装する必要あり
メール Magic Link自前パスワード方式にはしない
QR流入パラメータ枯れた手法
Sky Passport データ構造先にスキーマ設計が必要
NFCでStampページを開くWeb NFC APIは不要(詳細は次項)
一人・一場一枚のStamp制御DBのユニーク制約で対応可
静的Sky Memory生成同期処理にせず非同期キューにする
業務管理バックエンド地味だがMVPに必須。後回しにしない
現場オフライン同期Pilotでは「ページの閲覧」だけオフライン対応し、Stamp発行はオンライン限定にする
PWA Push通知iOSはホーム画面追加+許可が前提。主導線にしない
個人化CRM非常に高Phase 1では不要。Phase 2以降
Sponsor Dashboard非常に高権限・データ分離の設計が重い。手動作成のレポート(開発不要)はPhase 1、ログイン型Dashboardの開発はPhase 3以降に分離する
チケットAPI連携非常に高チケット会社ごとに仕様が異なる。個別協議が前提
モバイルオーダー・仮想待ち列非常に高事実上別プロダクト。単独では推奨しない
Native App非常に高必要性が確認できるまで着手しない

NFC — TECHNICAL NOTE

NFCの技術的な位置づけ

「3D NFC Stamp」は特別なアプリ開発を必要としない、技術的難易度の低い実装で成立する。ただし提案書側の最新方針では、NFCはPilotの上線条件ではなく、自主興行1〜2件に限定した小規模な検証と位置づけている。参加記録そのものはURL/QR経由でも成立するため、以下の実装は「対応できれば加点」の扱いとし、他の機能のブロッカーにはしない。

  1. 既存のチケットシステムで入場確認を行う
  2. 来場者が会場エリアに入る
  3. スタッフが管理する実体NFCスタンプに、来場者がスマホをかざす
  4. NFCタグ内のHTTPSリンクをスマホが読み取り、そのままブラウザで開く(Web NFC APIは不要)
  5. ページ上でログイン/ユーザー識別
  6. サーバー側でその公演のデジタルStampを付与する(user_id + event_id を一意制約)

ただし、複数Stamp到達で無料チケットなど高価値な報酬に変わる設計である以上、固定リンクは転送・共有されうる。これはNFC自体の欠陥ではなく、報酬設計の問題として段階的に対処する。

PILOT

スタッフ管理+活動時間内のみ開放+一人一場一枚の制御で十分

正式報酬運用

スタッフが発行する短期有効コード、または検票後の引換券と紐付ける

高額報酬時

チケット購入記録との突合、またはワンタイムトークンを検討(Phase 1では不要)

BUILD ORDER

Phase区分ではなく、依存関係で並べた開発順序

事業側のPhase 1〜3は「何を先に見せるか」の区分。ここでは「何が何より先に作られていなければ動かないか」で並べ直す。

インタラクティブな依存関係図を開く(コアパス/並行トラック/NFCの位置づけを可視化)
  1. データモデルと身元確認の基本設計

    Users / Identities / Events の3テーブルと、LINE・メールのアカウント統合ルールを最初に固める。ここが曖昧なまま先に進むと、後から全機能を作り直すことになる。

  2. 業務管理バックエンドの最小版

    活動の作成、NFC/QRの有効化、Stamp手動補発。地味だが、これがないとPilot当日にスタッフが対応できない。

    依存:データモデル
  3. 身元確認(LINE Login/メールMagic Link)

    枯れたホスティングサービスの利用を前提に実装。

    依存:データモデル
  4. Sky Passport(活動ページ・登録・URL/QR Stamp)

    MVPの中核。一人・一場一枚の制御をここで確定する。実体NFCは並行する小規模検証であり、これをブロックしない

    依存:身元確認、業務管理バックエンド
  5. Basic Analytics(訪問・登録・参加・共有の計測)

    匿名IDとログイン後ユーザーIDの紐付けを含めて設計する。後回しにすると数字が合わなくなる。

    依存:Sky Passport
  6. 静的Sky Memory(非同期生成)

    同期処理にせず、生成をキューに乗せる。終演直後のアクセス集中を前提に設計する。

    依存:Sky Passport
  7. 現場演練・負荷確認

    実機・実NFCタグでのリハーサルと、エンディングQR直後を想定した簡易的な負荷確認。

    依存:上記すべて

UNVALIDATED ASSUMPTIONS

Pilotで検証すべき、まだ解けていない技術仮説

構想提案の中では「できる」と書いているが、技術的にはまだ検証されていない前提。断定はせず、この5つをPilotの検証項目として明示する。

1
現場のオフライン同期

回線混雑時の一時保存と復旧後の同期は、重複送信・多重取得・時刻ズレなど考慮すべき論点が多い。Pilotでは「ページ閲覧のみオフライン対応、Stamp発行はオンライン限定」に絞って検証する。

2
通知の到達率

PWA Pushは、ホーム画面に追加し通知を許可したユーザーにしか届かない。QRを一度開いただけの来場者への到達率は未検証。

3
複数アカウントの統合

同一人物がメール登録後にLINEで再登録するなど、複数アカウントが発生しうる。統合ルールをPilot後に運用しながら固める。

4
共有ボタンの計測

計測できるのは「共有ボタンをタップした数」までで、実際に外部SNSへ投稿されたかどうかは通常把握できない。Pilot Scorecardの「共有・反応」はこの前提で読む。

5
エンディングQR直後の同時アクセス

数万人規模の来場者のうち、終演直後の数十秒に閲覧・ログイン・画像生成リクエストが集中する。静的ページのCDNキャッシュ、画像生成の非同期化、DB書き込みの冪等性が前提になる。

MISSING MODULES

構想提案にはほぼ出てこないが、本番運用には必要なもの

特に「Stampの手動補発」は優先度が高い。スマホの電池切れ・回線不通・NFC読み取り不良は、現場では必ず起こる前提で設計する。

DATA MODEL

最低限必要なエンティティ

Usersアプリ上のアカウント本体
IdentitiesLINE/メールなど認証手段の紐付け
Events公演・活動の単位
Campaign Sources流入チャネル・QRパラメータ
Visitsページ訪問ログ
Attendance Claims参加申告・NFC/QR読み取り記録
Stamps正式Stamp・Experience記録
Sky Memories生成された空の記憶データ
Share Intents共有ボタンのタップ記録
Consent Records個人情報・通知許可の同意記録
Admin Audit Logsスタッフによる操作履歴

TIMELINE

現実的な開発期間の目安

一定の技術力を持つ開発者が、AIを補助的に使い、枯れた外部サービスを組み合わせる前提。初めてのプロダクト開発でゼロから積み上げる場合は、これより長くなる。

フェーズ期間目安
クリック可能な試作+データ構造設計1〜2週
身元確認・活動ページ・Passport2〜3週
NFC/QR Stamp1〜2週
静的Sky Memory1〜2週
業務管理バックエンド2〜3週
Analytics・レポート1〜2週
実機テスト・現場演練2〜3週

合計でおよそ10〜14週でPilotに使える版を目指す。この期間・体制はチーム構成が決まった段階で改めて見積もり直す。

TEAM SIZE

人員を増やすと、どこまで短縮できるか

BUILD ORDERの依存関係には、もともと2箇所の並行できる分岐がある——②業務管理バックエンドと③身元確認は①にしか依存せず、⑤Analyticsと⑥Sky Memoryは④にしか依存しない。1人開発だとこの並行機会がすべて順番待ちになって流れる。人を増やす価値は、この2箇所を実際に並行させられるかどうかにある。

体制期間目安担当の考え方
1人10〜14週全ステップを1人で順番に進める。並行できる分岐も順番待ちになる
2人8〜11週Aが①③④⑤⑦の主線を担当。Bが①の後②→⑥に回り、③・⑤の期間に並行して進める
3人7〜10週Aが①→④(統合)→⑦の主線。Bが②→⑥。Cが③→⑤。2箇所の並行分岐を両方とも同時に埋められる

分担がこの形になっている理由は、依存関係そのものに沿っているから。②と③はどちらも①だけに依存し、互いには依存しないため、別の人が同時に進めても手戻りが起きない。⑤と⑥も同じ理由で④の後に並行できる。担当をこの依存構造と無関係に割り振ると、待ち時間や手戻りが増えて人数を増やした分の効果が出ない。

4人以上に増やしても、④(Sky Passportの統合)と⑦(現場演練、全員が実機で立ち会う必要がある)はこれ以上分割できないボトルネックのため、短縮効果は頭打ちになる。まずは2〜3人体制を検討すれば、並行できる分岐の恩恵はほぼ受けられる。