リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: RPGストーリーフォージ AI風ドット絵冒険
図鑑・旅の記憶帳データの遅延取得によるプレイ画面初期表示の高速化
1. 目的:
これまでマップ移動・戦闘・アセット読み込みの高速化は多数実施済みだが、プレイ画面(pages/play.php)の初回HTML生成時に「モンスター図鑑」「旅の記憶帳(訪問島・NPC・宝箱ログ)」のデータを毎回まるごとインラインJSON/HTMLとして埋め込んでいるため、これらのタブを一度も開かないプレイヤーにも常に生成・転送コストがかかっている。図鑑・記憶帳は撃破数やイベントが増えるほどデータ量が増え、プレイ時間が長いセーブほど初期表示(プレイ画面の初回描画・JS初期化)が遅くなる。これをタブ初回オープン時の遅延Ajax取得に切り替え、初期表示を軽量化する。
2. 具体的な仕様:
- 新規Ajaxエンドポイント api/bestiary_state.php と api/memory_log.php を追加(または既存の状態APIにaction分岐で統合)。両者とも現在のsession_key・scenario_id(publicキー経由)を検証し、rpgsf_load_or_create_save() 相当の仕組みで該当セーブのstateから図鑑データ・旅の記憶帳データのみを抽出してJSONで返す。
- pages/play.php では、図鑑タブ・旅の記憶帳タブのHTML初期状態を「読み込み中...」のプレースホルダーのみにし、これまでインライン出力していた全件データの埋め込みを取り止める。
- フロントJS側で、該当タブがクリックされ表示された最初のタイミングでfetchによりデータ取得し、DOMを描画。取得済みデータはJS変数(モジュールスコープ)にキャッシュしておき、同一プレイセッション中の再オープンでは再取得せず即時表示する。
- 戦闘勝利でモンスターを新規撃破した場合など、図鑑データが更新されるタイミングでキャッシュを無効化し次回オープン時に再取得するフラグを立てる(戦闘結果Ajaxレスポンスに`bestiary_dirty: true`のようなフラグを含め、JSがそれを見てキャッシュを破棄)。
- 通信は小さめのJSONで既存のセッションバッファ/APCuキャッシュ機構と衝突しないよう、読み取り専用の軽量クエリのみ行う。
- スマホ/PCどちらのタブUIでも同じ遅延ロード方式を適用する。
3. 既存機能との整合:
- 図鑑・旅の記憶帳の内容・表示デザイン・データ構造自体は変更しない。取得タイミングをサーバー生成時→タブオープン時に変えるだけで、既存のセーブ/ロード、公開シナリオ共有、統計機能には影響しない。
- Ajax取得に失敗した場合は「読み込みに失敗しました。タブを開き直してください」などのフォールバック表示を出し、既存のゲームプレイ(マップ移動・戦闘)には一切影響を与えない設計とする。
- 新規追加のAPIファイルのみで完結し、既存のマップ移動API・戦闘API・セーブAPIのコードは変更不要。
これまでマップ移動・戦闘・アセット読み込みの高速化は多数実施済みだが、プレイ画面(pages/play.php)の初回HTML生成時に「モンスター図鑑」「旅の記憶帳(訪問島・NPC・宝箱ログ)」のデータを毎回まるごとインラインJSON/HTMLとして埋め込んでいるため、これらのタブを一度も開かないプレイヤーにも常に生成・転送コストがかかっている。図鑑・記憶帳は撃破数やイベントが増えるほどデータ量が増え、プレイ時間が長いセーブほど初期表示(プレイ画面の初回描画・JS初期化)が遅くなる。これをタブ初回オープン時の遅延Ajax取得に切り替え、初期表示を軽量化する。
2. 具体的な仕様:
- 新規Ajaxエンドポイント api/bestiary_state.php と api/memory_log.php を追加(または既存の状態APIにaction分岐で統合)。両者とも現在のsession_key・scenario_id(publicキー経由)を検証し、rpgsf_load_or_create_save() 相当の仕組みで該当セーブのstateから図鑑データ・旅の記憶帳データのみを抽出してJSONで返す。
- pages/play.php では、図鑑タブ・旅の記憶帳タブのHTML初期状態を「読み込み中...」のプレースホルダーのみにし、これまでインライン出力していた全件データの埋め込みを取り止める。
- フロントJS側で、該当タブがクリックされ表示された最初のタイミングでfetchによりデータ取得し、DOMを描画。取得済みデータはJS変数(モジュールスコープ)にキャッシュしておき、同一プレイセッション中の再オープンでは再取得せず即時表示する。
- 戦闘勝利でモンスターを新規撃破した場合など、図鑑データが更新されるタイミングでキャッシュを無効化し次回オープン時に再取得するフラグを立てる(戦闘結果Ajaxレスポンスに`bestiary_dirty: true`のようなフラグを含め、JSがそれを見てキャッシュを破棄)。
- 通信は小さめのJSONで既存のセッションバッファ/APCuキャッシュ機構と衝突しないよう、読み取り専用の軽量クエリのみ行う。
- スマホ/PCどちらのタブUIでも同じ遅延ロード方式を適用する。
3. 既存機能との整合:
- 図鑑・旅の記憶帳の内容・表示デザイン・データ構造自体は変更しない。取得タイミングをサーバー生成時→タブオープン時に変えるだけで、既存のセーブ/ロード、公開シナリオ共有、統計機能には影響しない。
- Ajax取得に失敗した場合は「読み込みに失敗しました。タブを開き直してください」などのフォールバック表示を出し、既存のゲームプレイ(マップ移動・戦闘)には一切影響を与えない設計とする。
- 新規追加のAPIファイルのみで完結し、既存のマップ移動API・戦闘API・セーブAPIのコードは変更不要。
💬 返信 (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