製品版 設計レビュー · NFC/QR 迷子ドッグタグ

「拾った人が、いちばん迷わない」を製品の芯に置き直す

不満がないのは自然です。まだ本物の迷子事故で使われていないから。ただ現状のコードを通しで追うと、 この製品の核 ―「拾った人 → 飼い主に連絡が届く」― が本番で繋がっていません。 見た目や機能追加の前に、まずこの一本の線を通すことが「製品版として恥ずかしくない」の最短路です。 以下、QR・書き込み専用アプリ・拾い主UX・卸し対応・料金を、優先度つきで整理しました。

Web本体 · dogtag.nextcode.ltd iOS · NfcDogTag LP · nfc-dog-tag.nextcode.ltd 調査: 現状コード + 拾い主行動 + 卸し要件
更新 2026-07-06

命綱は開通しました ― Sprint 1 実装・実機導入・本番デプロイ完了

下の「命綱が3か所で切れている」は着手前の診断です。以下はすべて解決し、迷子札が初めてエンドツーエンドで機能する状態になりました。

  • iOS匿名同期を実装:ペット情報を自動でSupabaseへ同期。NFC書込URLを dogtag.../t/<tagId> に変更。ビルド成功→実機(15 Pro Max)インストール済み
  • Web命綱コードを本番デプロイ:スキャン記録配線/飼い主の公開電話・通知設定UI/profile API が dogtag.nextcode.ltd で稼働(/api/profile 存在確認済み)。
  • E2Eをサーバで実証:匿名認証→タグ発行→拾い主ページに実名表示→スキャン通知トリガー を本番でcurl確認。メール通知キーも設定済み。
  • 残タスク:① 既存タグは古いURLが焼かれたままなのでアプリで1度焼き直しが必要(新規書込は自動で新URL)。② 価格統一 ¥300/¥3,000(Square+iOS+ASC+表示)。
最優先 P0

今、本番で「命綱」が3か所で切れている

この3つが直るまで、QRや書き込み専用アプリを足しても「死んだページへ導く経路」が増えるだけ。最初のスプリントはここに全振りすべきです。

タグをかざす/QR 拾い主ページ スキャン記録 飼い主へ通知
実在の犬をかざしても、他人のデモ犬「Choco」が表示される

iOSアプリのペットデータは端末内 UserDefaults だけに存在し、Supabase へ同期していない。拾い主ページ t/[tagId]/page.tsxfetchPet() はハードコードのデモ犬を返すスタブのまま。=あなたの犬の情報がどこにも出ない。

「位置つき通知が届く」は、配線されていない(LPの表記は実質うそ)

スキャン記録 /api/scans と通知 /api/notify はどこからも呼ばれない孤立コード。拾い主が自分でボタンを押さない限り、飼い主には何も届かない。スキャン履歴も永久に空=Premiumの目玉も成立しない。

多くの場合「連絡先が登録されていません」で詰む

飼い主の電話番号を入力するUIが無く、公開フラグ show_phone は既定 false で後から変える画面も無い。店頭で事前登録すると拾い主は連絡手段ゼロに。

✅ 完了・本番反映済み: スキャン配線(着地の瞬間に /api/scans をPOST→位置つき通知が自動発火)/飼い主の公開電話・通知設定の編集UI+保存APIをデプロイ済み。iOSは匿名同期+/t/<tagId>書込に変更し実機導入済み。E2E契約は本番でcurl実証済み。
01

土台:3つに割れた設計を「タグ基点」で1本化する

今は iOS・LP・Web でタグに焼くURLとID体系がバラバラ。製品版はこれを統一しないと、卸したタグごとに挙動が変わってしまう。決定済: /t/<tagId> 基点に統一。

現状 併存する2つのURL

  • iOS が焼く: nfc-dog-tag…/p/<uuid>(サーバ登録なし・再割当不可)
  • Web が想定: dogtag…/t/<tagId>(サーバ権威・差し替え可)
  • テーブル名も dt_ / nfcdogtag_ の三重不整合

あるべき タグ基点 (dynamic redirect)

  • タグには短い不透明ID /t/<tagId> だけを焼く
  • 飼い主情報はサーバ側で差し替え=再書込不要・解析可能
  • 出荷済み /p/<uuid> は永久エイリアスで後方互換
  • テーブルは app_nfc_dog_tag_* に統一
02

拾い主ファーストUX:知らない人が「1〜2タップ」で飼い主へ

リサーチ結論:QRは標準カメラでほぼ全機種アプリ不要。NFCは古いiPhone・オフのAndroidで失敗しやすい。拾い主は「不審ドメイン・面倒・個人情報が怖い」で離脱する。

  • 連絡導線を第一画面の最上部へ。今は写真ヒーローの末尾に連絡ボタンがあり、別ページへ飛ばす。1枚に統合する。
  • 既定は「拾い主が何もしなくても飼い主に届く」匿名リレー通知。スキャンした瞬間に飼い主へメール/プッシュ。位置は明示同意で1回きり・保存しない。飼い主の生電話は既定で見せず、opt-in時だけ通話ボタン。
  • 感情コピーを最上段に。「迷子です。おうちに帰してください」「連絡してくださりありがとうございます」で “虐待/遺棄では?自分で飼おうか” という誤解バリアを下げる。
  • 三重フォールバック。NFC+QR+人間可読コード DOG-7K2Q9 を併記し、読めない人はページ上部でコード手入力→照会。
  • 未有効化タグを拾った時と多言語(自動判定)まで、一枚で破綻なく。
03

QR表示機能:ポスターの飾りから「主役の読み取り経路」へ昇格

今 QR は迷子ポスターの中でしか使っていない。NFCと同一URLを指す “共primary” に格上げし、物理タグが無くても始められる入口にする。

  • iOSに「QR表示・印刷」画面を新設。大きなQR+写真+名前+短縮URL。表示時に画面輝度を自動最大化し「相手のカメラで読み取ってください」。
  • PDF出力(AirPrint/共有)。①首輪カード ②ステッカーシート(首輪/リード/キャリーに冗長貼付=単一障害点回避)③迷子ポスター。
  • 「QRのみモード」を既定サポート。NFCタグ未所持でも、印刷QRを首輪に付けるだけで運用開始。壁のある別モードにせず「全ペットにQRがあり、NFCは任意の追加」という統一メンタルモデルに。
  • QRは飼い主の生電話やvCardを絶対に埋めない。必ずWebのfound-page経由リレー(APPI配慮+差し替え可能性の担保)。
  • QRが指すURLは NFC・ポスター・共有リンクと完全同一のcanonicalに固定。
04

書き込み専用iOSアプリ:飼い主アプリに足さず、B2B「タグ・エンコーダー」を分離新設

今の NfcDogTag は5タブ+ワクチン+ポスター+課金の多機能アプリで、書き込みは1タブに埋もれている。店員が使う道具は、利用者も端末も認証もKPIも別物。混ぜると肥大・審査摩擦・誤操作を招く。

連続書き込みの1件フロー(レジ横で画面を見ずに回せる設計)

かざす 実UID読取 NDEF書込 検証(バイト一致) サーバ束ね 恒久ロック ✓ 次のタグ

  • 焼くのはURL1件 dogtag…/t/<tagId>。生ID・vCardは書かない(背景NFCでSafari自動起動&差し替え可能に)。
  • 店頭ではペット情報を紐付けない(unclaimed出荷)。買った人が後日 /activate で claim。=店で個人情報を扱わない・転売にも対応。
  • 検証成功後だけ writeLock で恒久ロックし、第三者の偽URL上書き乗っ取りを封じる。※現行の NFCNDEFReaderSession では実UID取得もロックも不可 → NFCTagReaderSession(.miFare) へ。
  • ロット発行はサーバ権威POST /api/tags/batch で未割当プールを予約取得)。オフライン時はローカルキューで書込継続→復帰時に一括同期。
  • 配布は Apple Business Manager カスタムApp / TestFlight。一般公開不要=審査摩擦を回避。
  • 共有コード(NFCWriter / tag-id / Models)は Swift Package に切り出し、飼い主アプリと二重管理しない。
05

製品版・卸し対応:セキュリティ / 個人情報 / 信頼 / 物理

「ペットショップに卸せる」水準にする非機能要件。ここは店舗・動物病院が最も厳しく見るところ。方針: 本気で卸しをやる。

P0 — セキュリティ & 個人情報(APPI)

  • タグ乗っ取り脆弱性を塞ぐ。今は activate に秘密コード検証が無く、tag_id を推測/列挙して第三者が先取りclaimできる。パッケージ内側/スクラッチに claim_code(別8桁)を印字し必須化。
  • 無認証スクレイピングを止める。/t/api/tags/[tagId] は検証もレート制限も無く、電話番号や写真を大量収集可能。既定リレー通知(生電話を出さない)+レート制限。
  • 出荷時 write-lock(read-only)で中身の上書きを不可に。宛先変更はサーバ側リダイレクトで完結。
  • 個人情報取扱事業者としてプライバシーポリシー・利用目的・安全管理・第三者提供の整理をDay1。

P1 — 信頼担保 & 物理仕様

  • 電池不要パッシブNFC(NTAG213)+QRデュアル、IP67防水・耐噛み・長期データ保持を製品仕様として明記。
  • 運営会社名・特商法表記・サポート窓口・返品ポリシーを LP / found / パッケージに明記(病院・店は「怪しくないか」を強く見る)。
  • 返品ルール:未activatedなら可/activated後は個人情報が絡むため不可、を明文化。
  • マイクロチップ補完ポジション(不可視・専用リーダー要 vs 誰でも即読める可視ID)を正直に訴求。GPS常時追跡ではない“受動リカバリー”と明記。

P1 — 卸しオペレーション

  • ロット発行・在庫・活性化率を見る管理画面 /admin/lots、卸先アカウント(店名/特商法/レベニューシェア)。
  • LPの虚偽表示を是正(通知を実配線してから「届く」と書く)+ dead link(App Store/Amazon のプレースホルダ)を実URLに。
  • 法人導線 /business(店舗名・業態・数量・連絡先フォーム、什器/POP/サンプル/MOQ)。
06

料金設計:月¥300 / 年¥3,000 ― 決定(ただし条件が1つ)

安全・安心は「保険」。¥980 は “高い” を招き、¥300 は「愛犬の命を月300円で」という強いコピーになる。卸しで物理タグ自体が収益源になるので、サブスクは薄く広くが正解。

FREE
¥0
命を守る核は、ここに置く
  • ペット1匹+NFC/QRタグ対応
  • 拾い主ページ表示
  • スキャン→飼い主にメール/プッシュ通知
  • メッセージフォーム
決定
PREMIUM
¥300 /月
または 年 ¥3,000(実質 ¥250/月 · 年払いが得=解約が減る)
  • ペット無制限
  • SMS即時通知/電話直通(opt-in)
  • スキャン履歴・GPSマップ
  • 医療情報表示・複数緊急連絡先
  • 家族共有・PDF出力・優先サポート
条件(ここだけは譲れない): 命を守る核=「スキャン→飼い主に通知」は必ず Free に置く。 ここを有料の壁にすると Apple 3.1.1 違反+信頼崩壊、そもそも製品の意味が消えます。Premium は “便利さ”(複数ペット・SMS即時・地図・履歴・家族共有)で回収。
  • まず3つの価格を1本化。今 Web(Square)=¥980/月、iOS=¥490/月・¥2,980/年とバラバラ。これ自体が製品版として恥ずかしい。Web+iOSを ¥300 / ¥3,000 に統一。
  • 年¥3,000は現行の年¥2,980とほぼ同額。変えるのは月額(¥490/¥980→¥300)だけ=実装も価格ロジックも軽い。App Store の ¥300/月・¥3,000/年 はどちらも有効なtierで技術的障害なし。
  • HIROKI Studio 統一価格 ¥490 からの意図的な例外。安全×卸し×大量普及を狙うこの製品なら妥当。表示だけ先行させず Square/ASC の価格ポイントと一括で変更する(表示¥300・請求¥980の不一致事故を防ぐ)。
  • 収益は2本立て。物理タグ(卸・小売keystone)=一時収益、サブスク=継続の“長い尾”。だからサブスクは低価格で普及優先が噛み合う。
07

推奨ロードマップ:直す順番

飾りより配線が先。命綱→信頼→製品化→卸し、の順で積む。

1

命綱を通す ✅ 完了

Web側(スキャン配線/飼い主電話・通知UI/profile API)を本番デプロイ済み。iOSは匿名同期+NFC書込URLを /t/<tagId> へ変更し実機導入済み。E2E契約は本番でcurl実証済み。価格 ¥300 / ¥3,000 への統一は次スプリントで実施。

2

信頼と安全 P0

claim_code 乗っ取り対策/無認証スクレイピング封じ/既定リレー通知・APPI整備/found第一画面の統合・感情コピー・多言語。アーキを /t 基点に一本化+/p 永久エイリアス。

3

製品化 P1

QR表示・印刷(カード/ステッカー/ポスターPDF)+QRのみモード/出荷時 write-lock/LP虚偽表示是正+dead link修正+法人導線 /business

4

卸し P1

書き込み専用アプリ(B2B Writer)/ロット・在庫・活性化率の /admin/lots/パッケージ&claim_code印字/物理OEM(NTAG213・IP67・耐噛み・ロック対応)選定。

5

仕上げ P2

中古転売の所有権移譲フロー/東京リージョン(hnd1)固定/獣医による代理登録(assisted activation)。

08

決定事項(このレビューで確定)

主要な分岐はすべて確定済み。あとは実装するだけ。

  1. 物理タグの卸し(BtoB物販)→ 本気でやる。書き込み専用アプリ/ロット管理/在庫を作る前提でロードマップに載せる。
  2. タグに焼くURL → dogtag.nextcode.ltd/t/<tagId> に統一。タグ基点の dynamic redirect を正、/p/<uuid> は永久エイリアス。
  3. 料金 → 月¥300 / 年¥3,000 でGO。Studio¥490 の意図的な例外。命を守る核は Free 据え置き。
  4. iOS同期の認証 → 匿名同期→後でApple連携。ログイン壁なしで今すぐE2E開通。後で機種変更対策にApple連携を任意提案。
迷子ドッグタグ · 製品版設計レビュー · 更新 2026-07-06 次アクション: 既存タグの焼き直しテスト → 価格統一 ¥300/¥3,000