| 読む人 | この文書で分かること |
|---|---|
| 先方(鶴見法人会) | 何を作り、何を作らないか。誰がどこまで責任を持つか |
| 技術レビュー | なぜこの構成になったか。判断の理由 |
| 来年、拡張する人(AIを含む) | なぜこのシステムが存在するのか。触ってはいけない前提は何か |
このシステムはAIを使って開発する。AIは「なぜ」を持っていない。
来年「トレハンの件を拡張して」と指示したとき、AIが読めるのは残っている文書だけである。
たとえば「§1.3 やってはいけないこと」が残っていなければ、
AIはチームランキング機能を良かれと思って提案する。 それは企画書で禁止されている。
この文書は、来年の自分とAIへの申し送りでもある。
このイベントの主旨は租税教育である。キャッシュレスはそのための手段にすぎない。
第19回の実行委員長が「キャッシュレスの仕組みを入れたい」と発案したことが起点。
新しい試みとして、下記を実現する。
**体験料を払うと、その中に消費税が含まれていることを、
子どもが「見て」実感できるようにする。**
去年までは、ブース横のボードに大きな丸を描き、体験のたびに受付の人が
「円」と手書きし、最後に全ブースから舞台へ持っていく、という方式だった。
このシステムは、その手書きの置きかえである。 求められている解像度はその水準。
企画書および打合せで明示された禁止事項。拡張時もこれを外さないこと。
| 禁止 | 理由 |
|---|---|
| チーム同士を競わせない(順位・ランキングを作らない) | 「競う」ではなく「みんなでまちを支える」が主旨 |
| 一定額に達したら次へ進む、という設計にしない | 納税額を達成条件にしない |
| 個人別の納税額を強調しない | 個人を目立たせない |
| 本物の決済処理をしない | 疑似決済に留める。実際のお金を動かすと資金決済法の領域になり、個人では受けられない案件になる |
| 氏名以外の個人情報を受け取らない | 住所・電話・学校名・学年・写真・保護者の連絡先は一切預からない |
| おみくじ等の運要素を入れない | 企画書に明記。学びと記念性を両立させる |
紙で絵を作って終わりでも、イベントとしては成立する。(先方の発言)
逃げ道が最初から確保されている。 よって過剰な冗長化に費用をかけず、
その分を「ブースの読み取りが確実に動くこと」に寄せる。
| 項目 | 弊方 | 鶴見法人会 | 印刷業者 | 舞台委員会 |
|---|---|---|---|---|
| 6画面の制作・記録と集計の仕組み | ● | |||
| カード用URL一覧(CSV)の作成・提供 | ● | |||
| 機材/カードの動作条件の提示(別紙) | ● | |||
| ホスティング先の作成・公開 | ● | |||
| 実機確認(10月・タブレット1台) | ● | 貸出 | ||
| 当日の設営・立ち上げ立ち会い | ● | |||
| タブレット・Wi-Fi・カード・NFCの手配と費用 | ● | |||
| カードのデザイン制作 | ● | |||
| カードの印刷・NFCへの書き込み | ● | |||
| 参加者名簿の管理(個人情報の管理責任者) | ● | |||
| 受付・当日運営・スタッフ配置 | ● | |||
| 画像・イラストの用意 | ● | |||
| 各業者間の調整・とりまとめ | ● | |||
| 会場装飾・舞台演出 | ● |
| 境界 | 弊方の範囲 |
|---|---|
| 機材 | 条件を書面で示すところまで。手配・台数・費用・設置は先方。 条件を満たす機材であれば読み取りの動作を保証する |
| NFC | URL一覧をCSVで渡すところまで。タグの購入・書き込み・貼付は印刷業者 |
| 会場モニター | 表示する画面の制作まで。モニター本体・PC・ケーブル・電源・配線は先方。 当日その機器で画面を開くところは弊方 |
| 舞台演出 | 連携しない。(「リンクは考えてない」)システム内で完結する |
| 画像 | 先方支給が前提。制作する場合は別途(1点2,000円〜・点数割引・応相談) |
| 集計の正確性 | 想定外の操作(人為的な誤操作・機種違い)による集計のずれは対象外。 先方より「気にしない」との確認を得ている |
| 語 | 意味 |
|---|---|
| トレハン | イベント内の架空通貨。実際のお金ではない |
| 体験料 | 1ブースの職業体験にかかる料金。税抜500トレハン |
| 消費税 | 体験料の10%。50トレハン。お支払いは合計550トレハン |
| チーム | 参加の単位。子ども3〜4名程度 |
| カード | トレハンパスポート。QR1つとNFCタグ1つを持つ |
| コード | カードに割り当てられたランダムな英数字(例 A7K2M)。チームを識別する |
| 復興率 | 会場モニターに出す、目標額に対する達成度 |
| # | 場面 | 起きること | 関与する画面 |
|---|---|---|---|
| 1 | 13:00 受付(入国) | チーム単位で来場。カードを配布 | — |
| 2 | ブース到着 | 30ブースのうち好きなところへ | — |
| 3 | 体験の前 | スタッフがタブレットでカードのQRを読む | P1 |
| 4 | 演出(3〜5秒) | 550トレハンのうち50が王国のたからばこへ | P1 |
| 5 | 体験 | 職業体験を受ける | — |
| 6 | 3〜5を繰り返す | 去年はMAX20ブースを回った子がいた | — |
| 7 | 随時 | 会場モニターに総額と復興のようす | P2 |
| 8 | 随時/帰宅後 | 保護者のスマホでチームの記録 | P3 |
| 9 | 帰宅後〜12/31 | 同じカードから納税証 → 税金図鑑 | P4 / P5 |
| — | 常時 | 本部で確認・修正・CSV出力 | P6 |
読み取りの想定量:仮に200名×平均8ブース=1,600件/3時間。ピーク20件/分程度。技術的には軽い。
| ID | 画面 | 使う人 | 端末 | 通信 |
|---|---|---|---|---|
| P1 | ブース決済演出(待機/演出/2回目/手入力の4状態) | ブーススタッフ | タブレット | 切れても止まらないこと |
| P2 | 会場モニター | 来場者全員 | TV+PC | 要(数分ごと更新) |
| P3 | チームページ | 保護者 | 各自のスマホ | 要 |
| P4 | 納税証(P3の上部に表示) | 保護者・子ども | 各自のスマホ | 要 |
| P5 | 税金図鑑 | 保護者・子ども | 各自のスマホ | ほぼ静的 |
| P6 | 本部管理画面 | 本部 | PC | 要 |
画面イメージ → https://trehan-preview.pages.dev
4つの状態を1画面で切り替える。別々の画面を作るのではない。
| 状態 | 内容 |
|---|---|
| 待機 | カメラが常時動作。「カードをかざしてください」。下に「よみとれないとき」ボタン |
| 演出 | 「ピッ!」→ 550トレハン → コインが500と50に分かれる → 50が王国のたからばこへ → 「ぜいきん50トレハンを王国におさめました!」 |
| 完了 | 「つぎの人へ」。5秒で自動的に待機へ戻る |
| 2回目 | 同一チーム×同一ブースの2回目。「もう おさめて くれたね!」+現在の合計。演出は流さない・加算しない |
| 手入力 | 「よみとれないとき」から。その日のチーム名を色つきの丸で一覧表示 → タップで通常と同じ記録 |
決めごと
カードからの入口は1つ。 QRもNFCも同じURL。
| いつ | 表示 |
|---|---|
| イベント中 | チーム名・回ったブース・納めた消費税 |
| イベント後 | 一番上に納税証(記録はその下に残る)+「税金図鑑へ」ボタン |
表記は漢字でよい(内部の人が見る画面。子ども向けのひらがなにしない)。
| 出すもの | |
|---|---|
| 数字 | 消費税合計/読み取り件数/稼働チーム/1チーム平均ブース数 |
| 会場モニターの調整 | 実測/調整分/モニター表示/復興率/目標額の変更 |
| ブース別 | 来場数(降順) |
| チーム一覧 | 金額の手動修正(+50/−50)/手入力の件数/記録を1件消す |
調整分の扱い(重要)
先方が「少なかったらいっぱい読み込むか」と発言したことへの対応。
会場モニターの表示 = 実測(チーム合計) + 調整分
やらないこと:リアルタイムのブース別ダッシュボード。分析はイベント後にCSVから資料にする。
手入力の件数を出す理由:特定のブースで手入力が続いていたら、その端末のカメラを疑い、予備機と交換する。当日いちばん役に立つ数字。
| 項目 | 例 | 備考 |
|---|---|---|
| コード | A7K2M | ランダム。連番にしない |
| チーム名 | あかチーム | |
| ブースID | B12 | 端末に設定 |
| 読み取り時刻 | 13:42:07 | |
| 入力種別 | QR/手入力 | 手入力の件数を管理画面に出すため |
| 体験料 | 500 | 全ブース一律(要確認 Q2) |
| 消費税額 | 50 | |
| 調整分 | 0 | チームに紐づかない。別に保持 |
受け取らないもの:氏名/住所/電話/学校名/学年/写真/保護者の連絡先
→ カードに印刷されている以上のことをシステムに入れない。
UNIQUE (チームコード, ブースID)
アプリで「有無を調べてから書く」形にしない。同時に来ると隙間ができるため、
データベース側の制約で弾き、2件目は静かに無視する。
テストが1ケースで済み、実装も1行で終わる。
| 分類 | 要件 |
|---|---|
| 通信 | 会場の通信を信用しない。読み取りはまず端末のローカルストレージに保存し、そこからSupabaseへ送る。会場全域のWi-Fiカバーは不要 ・通常は読み取りのたびに自動で送信を試みる ・失敗したらローカルに溜まり、次の読み取り時にまとめて送る ・保険として画面に「未送信◯件」と手動の送信ボタンを置く(自動再送に頼りきらない) |
| 同時利用 | 端末ごとに独立した記録のため、何台同時でも競合しない。ただし30台の実測試験は行わない |
| 端末 | 別紙「動作条件」による。背面カメラのオートフォーカス必須・同一機種・NFC非搭載またはOFF・自動ロックOFF・10インチ以上 |
| 個人情報 | 管理責任者は主催。弊方は委託先。この関係を文字で残す(要確認 Q15) |
| 保存期間 | 12月31日で公開停止、その後データ削除 |
| 公開範囲 | URLを知れば開ける。パスワードは付けない。①非連番 ②noindex ③期限 で守る |
| 落としたとき | カードには既に名前が印刷されている。ページに載せるのはカードに印刷されている以上のことをしないため、拾った人が新たに知る情報はない |
| フォールバック | 紙のスタンプ/紙の絵で代替可(先方了解済み) |
| 決定 | |
|---|---|
| ホスティング | Cloudflare Pages(商用OK・無料・帯域無制限) |
| データ | Supabase |
| 本番のサブドメイン | trehan263.pages.dev(取得済み) |
| モックの公開先 | trehan-preview.pages.dev |
| 専用ドメイン | 取らない |
| ソース管理 | プライベートGitHubリポジトリ + Cloudflare Pages連携(2人で触るため) |
| 鍵の置き場 | Cloudflareの環境変数。リポジトリに入れない |
| Supabaseへの接続 | ブラウザから直接(supabase-js)。サーバー関数は挟まない 個人情報を持たず、集計のずれも許容されるため。RLSで書き込みと読み取りを制限する |
ブラウザから直接つなぐため、anonキーは公開される前提で設計する。
| 操作 | 許可 |
|---|---|
| 読み取り記録の追加 | 許可(ただし §7 のユニーク制約で2件目は弾かれる) |
| 読み取り記録の更新・削除 | 不可(管理画面のみ。別の鍵で行う) |
| チームページの参照 | コードを指定した1件のみ。一覧の取得は不可(全チーム分が抜けるのを防ぐ) |
| 集計(総額) | 参照のみ |
割り切っている点:ブース端末のURLを知った人が、書き込みを増やすことは技術的に可能。
ただし個人情報を持たず、金銭も動かず、集計のずれは先方が「気にしない」と明言しているため、
ここに費用をかけない。守るべきものの価値に見合った守り方をする。
QRに入るURLの形
https://trehan263.pages.dev/s/A7K2M
| 時期 | やること |
|---|---|
| 8月上旬 | 見積・制作範囲・動作条件を提出 |
| 8月31日 | 仕様確定(動作にかかわる要望の締切) |
| 8月中 | 受注 → ホスティング先とコード体系の確定 → 仮の動くものを制作 |
| 8月下旬 | URL一覧(CSV)を印刷業者へ提出 ← 全体で最も早い締切 |
| 9月上旬 | 仮の動くものを先方に触ってもらう |
| 9月 | いただいた要望の反映・作り込み(P1・P6を優先) |
| 9月中 | カード入稿+NFC書き込み(印刷業者) |
| 10月 | タブレット1台(本番と同一機種)で実機確認/P2〜P5 |
| 10月20日 | 中身の差し替え(図鑑・イラスト・文言)の締切 |
| 10月末 | 完成・請求書送付 |
| 11月28日 | (可能なら)前日に会場・機材で通し確認 |
| 11月29日 | 本番。11:00より設営・立ち上げ立ち会い |
| 12月31日 | 公開終了・データ削除 |
設計の要点:コード体系を8月中に確定させ、印刷をソフトより先に走らせる。
物理物(カード・NFC)は納期を動かせない。
| # | 決定 | 理由 |
|---|---|---|
| 1 | 体験料は税抜500+消費税50=550 | 「500のうち50」だと10%の計算に合わない(500に含まれる消費税は約45)。税務署が協力する租税教育イベントなので数字を合わせる |
| 2 | チーム単位で管理。個人名を持たない | 先方が「個別でやろうとは思っていない」。氏名を持たなければ個人情報の管理義務がほぼ消え、費用とリスクが下がる |
| 3 | チーム内のカードは全部同じ | 誰が読んでも同じ記録になり、当日の順番間違いが構造的に起きない |
| 4 | 1チーム×1ブース=1回(DB制約) | モニターの数字が実際の体験回数と一致する。手入力とQRが両方通っても二重にならない |
| 5 | QRとNFCは同じURL。CSVは1列 | 印刷業者の取り違えが起こりえない。企画書にあった保護者用の別QRが不要になる |
| 6 | QRの中身をURLにする | NFC非対応端末(2018年より前のiPhone・安価なAndroid)でもカメラから同じページに行ける。費用ゼロの二重化 |
| 7 | 入口は1つ。イベント後は納税証を上に出す | カードのコードが1つなので行き先も1つ。かざした瞬間に賞状が見え、タップを増やさない |
| 8 | オフライン記録+後送 | 「当日Wi-Fiを借りる予定」と聞いたため。当日だけの機材は当日まで状態が分からないので、通信を前提にしない |
| 9 | タブレット必須。スマホは非常時のみ | キャッシュレス体験そのものが商品。チラシにも「トレハンカードでキャッシュレス決済」と載っている |
| 10 | タブレットのNFCは不要/OFF | 子どもがカードを画面に押し付けると、端末のNFCが反応して別画面が開き、記録できない |
| 11 | 演出は動画でなくアニメーション | 30台が毎回サーバーから動画を取ると会場の回線が死ぬ |
| 12 | 「よみとれないとき」の手入力を置く | 読めない時に本部へ走る運用は3時間1,600回では成立しない。カードを忘れた子も救えるので、再発行の仕組みが不要になる |
| 13 | 管理画面に調整分と復興率 | 先方が「少なかったらいっぱい読み込むか」と発言。ただし調整はチームに紐づけない(保護者が見る数字と食い違わせない) |
| 14 | ブース別来場数を残す | 19年やってきて数字で見たことがないはず(去年はボードに手書き)。来年の配置・人員・時間割を決められる資料になる |
| 15 | モニターに順位をつけない | 企画書の禁止事項(§1.3) |
| 16 | Cloudflare Pages + Supabase | Vercel無料は非商用でクライアント案件に使えない。DBは一発勝負の案件で初めての道具を使わないという理由でSupabase |
| 17 | 専用ドメインを取らない | 公開は12/31まで。来年はカードを作り直すのでURLが変わってよい。継続性の要件がない |
| 18 | サブドメインを短くする(trehan263) | QRに入る文字数が増えると模様が細かくなり読み取りにくくなる。trehan は既に取得済みだった |
| 19 | 会場下見をしない | 平日の空の会場で電波を測っても当日と別物。カードもタブレットも11月上旬には揃わない。行っても実装が変わらない |
| 20 | 前日に機材が使えるなら前日確認(無償) | 当日朝が唯一のリハーサルになるリスクを下げられる。こちらの得でもある |
| 21 | 画像は先方支給が前提 | 先方が「デザインにこだわりはない」「チラシベースでいい」と発言。制作する場合は別途 |
| # | 内容 | 影響 |
|---|---|---|
| Q8 | 申込は事前のみか。当日その場での参加もあるか | 当日受付があると、受付用の画面が1つ増える |
| # | 内容 |
|---|---|
| Q6 | チーム数と1チームの人数 |
| Q2 | 全ブース一律料金か |
| Q9 | モニターはチーム別も出すか/目標額をいくつにするか |
| Q14 | カードの入稿締切 |
| Q20 | 印刷業者へ渡すCSVの書式と提出期限 |
| Q13 | 会場のWi-Fi・電波の状況 |
| Q17 | 前日(11/28)に会場と機材を使えるか |
| Q15 | 個人情報の管理責任者と名簿の受け渡し方法 |
| — | 税金図鑑の項目リスト(先方が制作予定) |
| — | イラストの支給可否 |
| — | ブース事業者への事前説明の場があるか |
Q1(550で確定)/Q3・Q4(1チーム1ブース1回)/Q5(チーム名のみ)/Q7(30ブース)/
Q10・Q11(QRとNFCが同じURL)/Q12(12/31で削除)/Q16(印刷時にNFCへ書き込み)/
Q18(舞台と連携しない)/Q19(Cloudflare・専用ドメインなし)/Q22(画像は先方支給)
| リスク | 影響 | 対策 |
|---|---|---|
| 会場の通信が詰まる | P1が止まる=致命 | 端末内に記録して後送。モバイルルーター持参 |
| 安いタブレットでQRが読めない | 全ブースで止まる | 動作条件書+10月に本番と同一機種で実機確認 |
| カードが光沢でQRが読めない | 同上 | マット指定を入稿前に伝える |
| URL未確定のまま入稿される | カード全数が使えないURLを持つ。刷り直し不可 | 8月中にホスティング先と名前を確定 |
| 子どもがカードを画面に押し付ける | 端末のNFCが反応して画面が飛ぶ | タブレットのNFCをOFF |
| 画面が自動ロックする | カメラが止まり、スタッフが解除を繰り返す | 自動ロックをOFF |
| NFCが家で読めない | 納税証にたどり着けない | QRからも同じページが開く(費用ゼロ) |
| カード紛失・二重計上 | モニターに嘘の数字 | 手入力ボタン+管理画面で修正 |
| 当日の朝が唯一のリハになる | 準備不足のまま本番 | 前日に機材が使えるか確認(Q17) |
| 画像制作を無償で背負う | 工数が膨らむ | 見積の「含まないもの」に明記 |
| とりまとめ役を無償で背負う | 11月に破綻 | 窓口を先方に置いてもらう |
| 種類 | 定義 | 対応 |
|---|---|---|
| 不具合 | 本書 §6「画面ごとの要件」に記載した動作と異なる場合 | 回数の制限なく無償(本番当日まで) |
| 調整・差し替え | 記載どおりに動いているが、見え方・文言・素材を変えたい場合 (図鑑の文章・イラスト・文字の大きさ・色・言葉づかい) | 合計3時間まで無償。 超過分は1時間 5,000円(税抜) |
| 仕様の変更・追加 | 動作や条件が増える場合 (処理を足す・表示項目を増やす・新しい画面) | 別途お見積り |
「不具合」を定義せずに「無償で直します」と書くと、あとから言ったもの勝ちになる。
「思っていたのと違う」がすべて不具合として持ち込まれ、無償対応が無限に続く。
そこで、不具合の定義を本書 §6 に固定する。
§6 に書いてある動作と違う → 不具合(無償)
§6 に書いていない → 調整、または仕様変更
これは先方を縛るためではなく、両者が同じ基準で話せるようにするためである。
§6 を細かく書いておくほど、双方にとって判断が明確になる。
「2回まで無償」とすると、1回のなかに50件詰め込まれても1回と数えられてしまう。
実際にかかる手間は件数と量に比例するため、時間で区切るほうが実態に合う。
なぜ早く聞きたいのか:着手後に前提が変わると、実装と確認をやり直すことになる。
着手前なら費用をかけずに織り込める。同じ要望でも、いただく時期によって費用が変わる。
| 場所 | |
|---|---|
| 画面イメージ(動く) | https://trehan-preview.pages.dev |
| 制作範囲のご確認(A4 1枚) | docs/scope.html |
| 御見積書 | docs/estimate.html |
| 機材の動作条件(別紙) | docs/device-spec.html |
| 社内メモ(先方に出さない) | 社内メモ.md |
| 先方の企画書・チラシ | トレハンイベント/ |