リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: RPGストーリーフォージ AI風ドット絵冒険
シナリオ検索のFULLTEXTインデックス化によるライブラリ検索・一覧表示の高速化
1. 目的:
シナリオ数が増えるほど、ホーム画面のキーワード検索(現状はtitle/prompt等へのLIKE '%keyword%'によるフルテーブルスキャンと推測される実装)が遅くなり、シナリオ一覧・検索の体感速度が低下する。マップ移動系は既に複数回最適化済みのため、今回はDB検索まわりを含む「アプリ全体の動作速度」の底上げとして、公開ライブラリ検索を高速化する。
2. 具体的仕様:
- schema.sqlにMIGRATION行を追加: `ALTER TABLE rpgsf_scenarios ADD FULLTEXT INDEX ft_title_prompt (title, prompt);` (InnoDBのFULLTEXTインデックスを追加。MySQL5.6+で対応、既存テーブルへの後方互換ALTER)。
- lib.php の rpgsf_recent_scenarios() を修正し、$filters['q'] が空でなく、かつ検索語の長さがinnodb_ft_min_token_size(既定3文字程度)以上の場合は、まず `WHERE MATCH(title, prompt) AGAINST (:q IN BOOLEAN MODE)` を用いたクエリを実行する。検索語はエスケープ(記号除去)した上で末尾に`*`を付与し前方一致的な挙動にする。
- 上記FULLTEXT検索でPDOExceptionが発生した場合(インデックス未適用の古い環境など)や結果が0件の場合は、既存のLIKE '%q%' 検索に自動フォールバックする(挙動を変えないための後方互換措置)。
- theme/difficultyの絞り込み条件は従来通りAND条件として維持し、FULLTEXT検索・LIKE検索どちらの経路でも組み合わせ可能にする。
- 検索結果の並び順は既存同様created_at降順を維持し、UI・レスポンス形式(cards表示、summary等)は一切変更しない。
- APCu等のキャッシュ層とは独立した変更であり、既存のシナリオ本体キャッシュやアセットキャッシュには影響しない。
3. 既存機能との整合:
- home.php側のフォーム・表示ロジックは変更不要で、rpgsf_recent_scenarios()内部の実装のみ差し替えるためテンプレート・UIは非破壊。
- schema.sqlはMIGRATIONコメント追記のみで既存テーブル定義や他インデックスは変更しない。
- FULLTEXTインデックス未適用のDB環境でも例外捕捉によりLIKE検索に自動フォールバックするため、マイグレーション未実行でもアプリは正常動作する。
- 検索語が短い・記号のみなど従来ヒットしていたケースはLIKE経路を維持するため、検索結果が変わらないケースを担保する。
シナリオ数が増えるほど、ホーム画面のキーワード検索(現状はtitle/prompt等へのLIKE '%keyword%'によるフルテーブルスキャンと推測される実装)が遅くなり、シナリオ一覧・検索の体感速度が低下する。マップ移動系は既に複数回最適化済みのため、今回はDB検索まわりを含む「アプリ全体の動作速度」の底上げとして、公開ライブラリ検索を高速化する。
2. 具体的仕様:
- schema.sqlにMIGRATION行を追加: `ALTER TABLE rpgsf_scenarios ADD FULLTEXT INDEX ft_title_prompt (title, prompt);` (InnoDBのFULLTEXTインデックスを追加。MySQL5.6+で対応、既存テーブルへの後方互換ALTER)。
- lib.php の rpgsf_recent_scenarios() を修正し、$filters['q'] が空でなく、かつ検索語の長さがinnodb_ft_min_token_size(既定3文字程度)以上の場合は、まず `WHERE MATCH(title, prompt) AGAINST (:q IN BOOLEAN MODE)` を用いたクエリを実行する。検索語はエスケープ(記号除去)した上で末尾に`*`を付与し前方一致的な挙動にする。
- 上記FULLTEXT検索でPDOExceptionが発生した場合(インデックス未適用の古い環境など)や結果が0件の場合は、既存のLIKE '%q%' 検索に自動フォールバックする(挙動を変えないための後方互換措置)。
- theme/difficultyの絞り込み条件は従来通りAND条件として維持し、FULLTEXT検索・LIKE検索どちらの経路でも組み合わせ可能にする。
- 検索結果の並び順は既存同様created_at降順を維持し、UI・レスポンス形式(cards表示、summary等)は一切変更しない。
- APCu等のキャッシュ層とは独立した変更であり、既存のシナリオ本体キャッシュやアセットキャッシュには影響しない。
3. 既存機能との整合:
- home.php側のフォーム・表示ロジックは変更不要で、rpgsf_recent_scenarios()内部の実装のみ差し替えるためテンプレート・UIは非破壊。
- schema.sqlはMIGRATIONコメント追記のみで既存テーブル定義や他インデックスは変更しない。
- FULLTEXTインデックス未適用のDB環境でも例外捕捉によりLIKE検索に自動フォールバックするため、マイグレーション未実行でもアプリは正常動作する。
- 検索語が短い・記号のみなど従来ヒットしていたケースはLIKE経路を維持するため、検索結果が変わらないケースを担保する。
💬 返信 (3)
🛠 開発を開始しました (機能追加 (rpg-story-forge))
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
📝 開発が完了しました
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
✅ リリース完了のお知らせ
ご要望いただいた「RPGストーリーフォージ AI風ドット絵冒険」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=rpg-story-forge
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/rpg-story-forge/
ご利用ありがとうございます!
ご要望いただいた「RPGストーリーフォージ AI風ドット絵冒険」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=rpg-story-forge
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/rpg-story-forge/
ご利用ありがとうございます!
Echo
Iris