← 一覧に戻る

Phase 2: みんなが使えるようにする(電話番号登録 + 使いすぎ防止)

2026年3月14日 18:12 更新
MD から自動変換されたページです。内容について質問があれば右下の ? ボタンからどうぞ。

今の問題

今のBotは「あなた専用」。電話番号がコードに直書きされてて、友達が使おうとしても全部あなたの電話にかかっちゃう。友達に試してもらうには:

  1. ユーザーごとに電話番号を登録できるようにする
  2. 使いすぎを防ぐ仕組みを入れる(1回の電話で約20〜30円かかるから、無制限だと破産する)

Codex(GPT-5.4)にレビューしてもらって見つかった危険な穴

プランの初版をCodexにチェックしてもらったら、「このまま作ると危険なものがきれいにできあがるだけ」と3つの致命的な問題を指摘された:

穴1: 電話番号を再送信するだけで無料枠がリセットされる

穴2: 誰でも好きな番号に電話をかけられる

穴3: 月初に100件まとめて予約すると制限を突破できる

やること(6ステップで順番に実装)

ステップ1: 電話番号かどうかを見分ける機能を作る

LINEに「09012345678」と送ったら電話番号として扱い、「明日9時に歯医者」はリマインダーとして扱う。この判定をする関数(プログラムの部品)を作る。

チェックするパターン:


ステップ2: 電話番号の登録 + 招待制の仕組み

LINEに電話番号を送ると、データベース(情報を保存する倉庫)に登録される。 ただし許可されたユーザーだけが使える。

動き:


ステップ3: 電話番号未登録の人にはリマインダーを受け付けない

電話番号を登録してない人が「明日9時に歯医者」と送っても、電話先がわからないから受け付けない。

動き:


ステップ4: 電話をかける時に、ユーザーごとの電話番号を使う

今はコードに書かれた固定の番号にしか電話できない。これを「登録された番号に電話する」に変える。

動き:

デプロイ前にやること:


ステップ5: 電話が成功したら回数をカウントする

月ごとに「何回電話したか」を数える。月が変わったらカウントをリセット。

動き:


ステップ6: 月10回の使用制限

月10回を超えたらリマインダーを受け付けない。

動き:


今回は対応しないこと(Phase 3以降)

作り方の方針

  1. 各ステップでテストを先に書く(RED: テストが失敗する状態)
  2. テストを通す実装は Codex(GPT-5.4)に任せる(GREEN: テストが通る状態)→ コンテキスト温存
  3. 実装後に私がレビューして整理(REFACTOR)
  4. 各ステップ完了後に tsc --noEmit(型チェック)→ pnpm test(テスト実行)→ コミット&プッシュ

最終確認(全ステップ完了後)

  1. 許可されてないユーザーでメッセージ送信 → 「β版で招待制」と返ってくる
  2. 許可ユーザーで 09012345678 を送信 → 「電話番号を登録したよ!」と返ってくる
  3. 明日9時に歯医者 を送信 → リマインダーが登録される
  4. 時間が来たら → 登録した番号に電話がかかる
  5. 月10回使った後にリマインダー送信 → 「無料枠を使い切った」と返ってくる

変更するファイル

ファイル 何をするか
schema.sql ユーザー情報を保存するテーブルを追加
src/index.ts メインのプログラム全体に変更を入れる
src/index.test.ts webhookのテストを更新・追加
src/cron.test.ts 電話発信のテストを更新・追加
wrangler.toml 許可ユーザーリストの設定を追加
src/phone.ts(新規) 電話番号の判定・変換の関数
src/phone.test.ts(新規) 上記のテスト
📝 質問モード — テキストを選択してね
✓ 質問を送信しました