リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: カスタムマッピング
ピンのコレクション(グループ保存)機能の追加
## 1. 目的
現在、フィルター条件(カテゴリ・タグ・評価・日付範囲など)はページを離れるとリセットされる。よく使うフィルター組み合わせや、特定の目的でまとめたピン群を「コレクション」として名前付き保存し、ワンクリックで再現できるようにする。チームでの現地調査・巡回ルート計画・報告書作成など、繰り返し同じ絞り込みを行うユースケースに対応する。
## 2. 具体的な仕様
### 2-1. DBスキーマ追加
```sql
CREATE TABLE collections (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
description TEXT,
filter_snapshot JSON NOT NULL, -- 保存時のフィルター条件をJSON化
pin_ids JSON, -- 手動選択ピンIDの配列(任意)
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
```
### 2-2. フィルター条件の保存
- 既存の検索・フィルターUIに「現在の条件を保存」ボタンを追加(フィルターパネル下部)
- クリックするとモーダルが開き、コレクション名(必須)と説明(任意)を入力して保存
- `filter_snapshot` には現在適用中の `{ keyword, categories, tags, rating_min, date_from, date_to, layer }` をJSONで記録
### 2-3. 手動ピン選択モード
- 地図上に「選択モード」トグルボタンを追加(既存ボタン群の隣)
- 選択モードON時、ピンクリックでチェックマーク表示(選択済みを視覚的に強調)
- 選択したピンIDを `pin_ids` に記録してコレクション保存可能
- フィルター保存と手動選択は併用可(どちらか一方だけでも保存可)
### 2-4. コレクション一覧・適用UI
- サイドパネルに「コレクション」タブを追加(既存の「カテゴリ」「タグ」タブと並列)
- 一覧表示:コレクション名・説明・保存日・ピン件数
- 「適用」ボタン:保存したフィルター条件を即座にUIに反映し地図を再描画
- `pin_ids` がある場合はフィルター結果とのOR表示(明示的に選んだピンは常に表示)
- 「削除」ボタン:確認ダイアログ後にDB削除
- 「編集」ボタン:名前・説明のみ変更可(フィルター条件の上書きは再保存で対応)
### 2-5. APIエンドポイント(PHP)
- `POST /api/collections/save` — 新規保存
- `GET /api/collections/list` — 一覧取得
- `GET /api/collections/apply?id=X` — フィルターJSON返却
- `DELETE /api/collections/delete?id=X` — 削除
- `PATCH /api/collections/update?id=X` — 名前・説明更新
### 2-6. スマホ対応
- コレクションタブはハンバーガーメニュー内に格納し、スマホでも操作可能にする
- 選択モードのチェックマークはタップ操作でも確実に反応するよう44px以上のタッチ領域を確保
## 3. 既存機能との整合
- 既存のフィルターロジック(JS側)はそのまま流用し、コレクション適用時は `applyFilters(filterSnapshot)` を呼ぶだけで完結
- ピン・カテゴリ・タグのCRUDには一切手を加えない
- CSV/JSONエクスポートはコレクション適用後のフィルター済み状態でも動作(既存の「現在の表示ピンをエクスポート」フローを継承)
- 合言葉認証セッションが切れた場合はコレクション操作も無効化(既存の認証チェック関数を再利用)
- コレクションテーブルはアプリ初期化スクリプト(`install.php` または `migrate.php`)に `CREATE TABLE IF NOT EXISTS` で追記し、既存DBを破壊しない
現在、フィルター条件(カテゴリ・タグ・評価・日付範囲など)はページを離れるとリセットされる。よく使うフィルター組み合わせや、特定の目的でまとめたピン群を「コレクション」として名前付き保存し、ワンクリックで再現できるようにする。チームでの現地調査・巡回ルート計画・報告書作成など、繰り返し同じ絞り込みを行うユースケースに対応する。
## 2. 具体的な仕様
### 2-1. DBスキーマ追加
```sql
CREATE TABLE collections (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
description TEXT,
filter_snapshot JSON NOT NULL, -- 保存時のフィルター条件をJSON化
pin_ids JSON, -- 手動選択ピンIDの配列(任意)
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
```
### 2-2. フィルター条件の保存
- 既存の検索・フィルターUIに「現在の条件を保存」ボタンを追加(フィルターパネル下部)
- クリックするとモーダルが開き、コレクション名(必須)と説明(任意)を入力して保存
- `filter_snapshot` には現在適用中の `{ keyword, categories, tags, rating_min, date_from, date_to, layer }` をJSONで記録
### 2-3. 手動ピン選択モード
- 地図上に「選択モード」トグルボタンを追加(既存ボタン群の隣)
- 選択モードON時、ピンクリックでチェックマーク表示(選択済みを視覚的に強調)
- 選択したピンIDを `pin_ids` に記録してコレクション保存可能
- フィルター保存と手動選択は併用可(どちらか一方だけでも保存可)
### 2-4. コレクション一覧・適用UI
- サイドパネルに「コレクション」タブを追加(既存の「カテゴリ」「タグ」タブと並列)
- 一覧表示:コレクション名・説明・保存日・ピン件数
- 「適用」ボタン:保存したフィルター条件を即座にUIに反映し地図を再描画
- `pin_ids` がある場合はフィルター結果とのOR表示(明示的に選んだピンは常に表示)
- 「削除」ボタン:確認ダイアログ後にDB削除
- 「編集」ボタン:名前・説明のみ変更可(フィルター条件の上書きは再保存で対応)
### 2-5. APIエンドポイント(PHP)
- `POST /api/collections/save` — 新規保存
- `GET /api/collections/list` — 一覧取得
- `GET /api/collections/apply?id=X` — フィルターJSON返却
- `DELETE /api/collections/delete?id=X` — 削除
- `PATCH /api/collections/update?id=X` — 名前・説明更新
### 2-6. スマホ対応
- コレクションタブはハンバーガーメニュー内に格納し、スマホでも操作可能にする
- 選択モードのチェックマークはタップ操作でも確実に反応するよう44px以上のタッチ領域を確保
## 3. 既存機能との整合
- 既存のフィルターロジック(JS側)はそのまま流用し、コレクション適用時は `applyFilters(filterSnapshot)` を呼ぶだけで完結
- ピン・カテゴリ・タグのCRUDには一切手を加えない
- CSV/JSONエクスポートはコレクション適用後のフィルター済み状態でも動作(既存の「現在の表示ピンをエクスポート」フローを継承)
- 合言葉認証セッションが切れた場合はコレクション操作も無効化(既存の認証チェック関数を再利用)
- コレクションテーブルはアプリ初期化スクリプト(`install.php` または `migrate.php`)に `CREATE TABLE IF NOT EXISTS` で追記し、既存DBを破壊しない
💬 返信 (3)
🛠 開発を開始しました (機能追加 custom-mapping)
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
📝 開発が完了しました
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
✅ リリース完了のお知らせ
ご要望いただいた「カスタムマッピング」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=custom-mapping
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/custom-mapping/
ご利用ありがとうございます!
(deploy 自動リカバリにより通知が遅延した可能性があります。 DEPLOY-RECOVERY-01)
ご要望いただいた「カスタムマッピング」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=custom-mapping
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/custom-mapping/
ご利用ありがとうございます!
(deploy 自動リカバリにより通知が遅延した可能性があります。 DEPLOY-RECOVERY-01)
Echo
Iris