リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: RPGストーリーフォージ AI風ドット絵冒険
シナリオ一覧・検索結果のAPCu短期キャッシュによる表示高速化
1. 目的:
ホーム画面(pages/home.php)のシナリオ一覧・キーワード検索・テーマ/難易度絞り込みは、これまでライブラリ統計(rpgsf_library_stats)のみキャッシュされており、一覧本体(rpgsf_recent_scenarios_page)は毎回MySQLへFULLTEXT検索・件数カウント・ページ取得の複数クエリを実行している。アクセス頻度の高いトップページ(フィルタなし1ページ目)や人気の検索条件を対象に、短時間キャッシュを追加してDB負荷と応答時間を削減し、全体のスピードアップ方針に沿った改善を行う。
2. 具体的仕様:
- lib.phpに `rpgsf_cached_recent_scenarios_page(array $filters): array` を新設し、内部で既存の `rpgsf_recent_scenarios_page($filters)` をラップする。
- キャッシュキーは `rpgsf_scn_page:' . rpgsf_manifest_version() . ':' . md5(json_encode($filters))` とし、q/theme/difficulty/page/per_pageの組み合わせごとに個別キャッシュする。
- `app_config()['assets_cache']` が有効かつ `rpgsf_apcu_enabled()` がtrueの場合のみAPCuを使用し、TTLは12秒程度の短時間に設定する(新規シナリオ作成後も体感遅延が小さく、検索の鮮度と負荷軽減のバランスを取る)。
- APCu未使用・fetch失敗時は従来どおり毎回DBへ問い合わせる(フォールバック)ため、DB未設定環境や統計不整合のリスクはない。
- pages/home.php側は `rpgsf_recent_scenarios_page($filters)` の呼び出しを `rpgsf_cached_recent_scenarios_page($filters)` に置き換えるだけで、戻り値の構造(items/page/total_pages/total)は変更しない。
- rpgsf_create_scenario() など書き込み系関数は変更不要(TTLが短いため自然に反映される)。
3. 既存機能との整合:
- 戻り値の型・キー構成を変えないため、pages/home.php内のページャー表示・カード表示ロジックはそのまま動作する。
- APCu無効環境やDB未接続時は既存の分岐処理(db_ok判定・空一覧メッセージ)がそのまま機能する。
- 既存の統計キャッシュ(rpgsf_library_stats)やAPCu共有キャッシュの仕組み(rpgsf_cached_assets)と同じ設計方針(APCu有効時のみ・バージョンキー付与)を踏襲するため、既存キャッシュ機構と競合しない独立したキー空間を使用する。
ホーム画面(pages/home.php)のシナリオ一覧・キーワード検索・テーマ/難易度絞り込みは、これまでライブラリ統計(rpgsf_library_stats)のみキャッシュされており、一覧本体(rpgsf_recent_scenarios_page)は毎回MySQLへFULLTEXT検索・件数カウント・ページ取得の複数クエリを実行している。アクセス頻度の高いトップページ(フィルタなし1ページ目)や人気の検索条件を対象に、短時間キャッシュを追加してDB負荷と応答時間を削減し、全体のスピードアップ方針に沿った改善を行う。
2. 具体的仕様:
- lib.phpに `rpgsf_cached_recent_scenarios_page(array $filters): array` を新設し、内部で既存の `rpgsf_recent_scenarios_page($filters)` をラップする。
- キャッシュキーは `rpgsf_scn_page:' . rpgsf_manifest_version() . ':' . md5(json_encode($filters))` とし、q/theme/difficulty/page/per_pageの組み合わせごとに個別キャッシュする。
- `app_config()['assets_cache']` が有効かつ `rpgsf_apcu_enabled()` がtrueの場合のみAPCuを使用し、TTLは12秒程度の短時間に設定する(新規シナリオ作成後も体感遅延が小さく、検索の鮮度と負荷軽減のバランスを取る)。
- APCu未使用・fetch失敗時は従来どおり毎回DBへ問い合わせる(フォールバック)ため、DB未設定環境や統計不整合のリスクはない。
- pages/home.php側は `rpgsf_recent_scenarios_page($filters)` の呼び出しを `rpgsf_cached_recent_scenarios_page($filters)` に置き換えるだけで、戻り値の構造(items/page/total_pages/total)は変更しない。
- rpgsf_create_scenario() など書き込み系関数は変更不要(TTLが短いため自然に反映される)。
3. 既存機能との整合:
- 戻り値の型・キー構成を変えないため、pages/home.php内のページャー表示・カード表示ロジックはそのまま動作する。
- APCu無効環境やDB未接続時は既存の分岐処理(db_ok判定・空一覧メッセージ)がそのまま機能する。
- 既存の統計キャッシュ(rpgsf_library_stats)やAPCu共有キャッシュの仕組み(rpgsf_cached_assets)と同じ設計方針(APCu有効時のみ・バージョンキー付与)を踏襲するため、既存キャッシュ機構と競合しない独立したキー空間を使用する。
💬 返信 (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