Skip to content

キーワード設定数の上限拡張(店舗別設定対応)

概要

項目内容
ステータス🔵 提案中
Issue-
担当-

1ロケーションあたりのキーワード登録上限を 店舗ごと/契約ごとに可変 にし、システム全体のハードリミットを 15件 に拡張する。PlacesAPI 連携とキーワード追加課金のビジネス検討を踏まえた設計。

提案内容

背景・課題

  • 現状のキーワード件数上限は 8 件(DB 制約は無いが、UI / Export / JSON 構造が 8 件前提)
  • 顧客から 10 件以上のキーワード追跡 の要望が増加
  • キーワード追加課金の検討:「1 件追加で月額◯◯円」のようなオプション課金にしたいビジネス意向
  • 採用率は店舗ごとに変動見込み:全店舗が一律に増件するわけではない
  • スクレイピング処理は約 33 店舗、PlacesAPI 連携は約 1,921 店舗で稼働中

→ 必要なのは「店舗ごと/契約ごとに上限可変」+「システム全体のハードリミット = 15」

提案するソリューション

主な特徴:

  • システム全体のハードリミット = 15 件、最小 = 8 件(既存契約据え置き)
  • 店舗単位 or 契約単位どちらでも追加課金できるデータモデル(後から販売粒度を変えても DB を直さなくて済む)
  • PlacesAPI / スクレイピング / Laravel エクスポートの JSON 構造を 15 件枠で統一
  • 管理画面に店舗別上限設定 UI を新設、ActivityLog で課金根拠の監査ログを残す
  • 課金プラットフォーム連携は本案件範囲外(手動設定でリリース → 連携は後続案件)

機能一覧

#機能名説明優先度
1上限設定テーブル新設店舗/契約単位で max_keywords を保持(fallback ロジック付き)
2管理者UI(営業/CS向け)店舗別キーワード上限設定 + ActivityLog 連携
3顧客UI改修上限を API から取得し、可変入力欄を動的生成
4バックエンドバリデーションFormRequest で店舗別上限と照合
5PlacesAPI export_data 改修[:8] 切り捨てを 15 件枠に拡張
6スクレイピング側改修fill_export_data / error array / slice の 3 箇所
7CSV 仕様統一「以前のキーワード9〜N」分岐の整理
8ランキング表示改修チャート・テーブル等の可変対応
9PlacesAPI レート確認現3キー構成(QPM 1800)で 15件化を吸収可能確認のみ

画面モック

キーワード管理

登録キーワード8 / 8件
1MEO対策
2美容室 渋谷
3ヘアサロン
4カット 安い
5縮毛矯正
6トリートメント
7ヘッドスパ
8カラー 渋谷
上限に達しています。上限撤廃モードを有効にしてください。

変更内容

項目現行変更後
キーワード上限8件無制限(推奨10件以上)
スクレイピング8件固定登録数に応じて動的
表示固定レイアウトスクロール対応

※ 管理者向けの店舗別上限設定画面のモックは別途追加予定。

設計検討事項

データモデル

契約/店舗どちらの単位でも課金できるよう、上限値を持つテーブルを新設:

mappy_keyword_limit_settings
├─ id              BIGINT PK
├─ scope_type      ENUM('contract','location')   -- 適用範囲
├─ scope_id        BIGINT                        -- user_id or gbp_location_id
├─ system_id       BIGINT
├─ max_keywords    TINYINT UNSIGNED (8〜15)
├─ effective_from  DATE
├─ effective_to    DATE NULLABLE
├─ memo            VARCHAR(255)                  -- 営業メモ
└─ created_at / updated_at

判定ロジック:location 設定 → contract 設定 → デフォルト 8 のフォールバック。

PlacesAPI 側の影響

  • 1ロケーションあたり 8→15 件で API 呼び出し +87%
  • 現在の 3 GCP プロジェクトキー構成(QPM 1800 容量)で 必要 QPM 940 → 余裕あり(プロジェクト増設不要)
  • 利用料は Basic SKU で 無料
  • 所要時間:200秒 → ~375秒(夜間バッチで吸収可能)

スクレイピング側の影響

課金システム連携の方針

mappy は外部プラットフォーム(KUCHIKOMIONE / G-COR / pipit)からの支払い通知を受け取る構造で、課金エンジンは持たない。本案件は 「管理画面で手動設定可能」までを範囲とし、課金プラットフォーム側の商品マスタ追加・通知 payload 拡張は別建ての後続案件とする。

概算工数(AI前提)

体制

役割人数担当内容
設計者1名要件確認 → AIに設計書作成指示 → レビュー → 製造へ指示
製造者1名ISSUEを元にAIに作成指示 → コードレビュー → テスト実施 → デプロイ

工数内訳

#作業項目AIリテイクレビュー工数(人日)担当
1要件確認・設計書作成2回0.5日/回1.0設計者
2DB・API設計(上限テーブル含む)2回0.5日/回1.0設計者
3上限テーブル新設・migration1回0.5日/回0.5製造者
4管理者UI(店舗別上限設定)3回0.5日/回2.0製造者
5顧客UI改修(API取得化・可変入力欄)2回0.5日/回1.0製造者
6バリデーション・モデル改修1回0.5日/回0.5製造者
7PlacesAPI export_data 改修1回0.5日/回0.5製造者
8スクレイピング側改修1回0.5日/回0.5製造者
9CSV ラベル統一 + 出力テスト2回0.5日/回1.0製造者
10ランキング表示改修2回0.5日/回1.0製造者
11結合テスト2回0.5日/回1.5製造者
12デプロイ・動作確認1回0.5日/回0.5製造者
合計11.0

前提条件・制約

  • ハードリミット = 15、最小 = 8(既存契約据え置き)
  • 課金プラットフォーム連携は本案件範囲外(手動設定でリリース、連携は後続案件で対応)
  • PlacesAPI 既存 3 キー構成で 15件化のリクエスト増を吸収(追加プロジェクト不要)
  • CSV「以前のキーワード9〜N」ラベルの真意は要確認(typo 説 / 履歴用途説)

スケジュール

タスク担当日数5/255/265/275/285/295/305/316/16/26/36/46/56/66/76/86/96/10
要件確認・設計書作成設計者1d
DB・API設計設計者1d
上限テーブル新設製造者1d
設計レビュー・製造指示設計者1d
管理者UI製造者2d
顧客UI改修製造者1d
バリデーション・モデル改修製造者1d
PlacesAPI/スクレイピング改修製造者1d
CSV・ランキング表示改修製造者2d
結合テスト製造者2d
デプロイ・動作確認製造者1d