リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: RPGストーリーフォージ AI風ドット絵冒険
セーブデータ(state_json)のgzip圧縮保存によるDB I/O・通信量削減
1. 目的:
マップ移動・戦闘のたびにDBへ読み書きされるstate_json(MEDIUMTEXT)は、訪問済みタイルやパーティ・図鑑・記憶帳など情報が多くサイズが大きくなりやすい。JSON文字列は同じキー名やタイル文字列の繰り返しが多く圧縮効率が高いため、DB保存前にgzip圧縮することでディスクI/O・ネットワーク転送・PHP側のjson_encode/decode対象バイト数を削減し、移動・戦闘Ajaxの応答および冒険の書ロードをさらに高速化する。
2. 具体的仕様:
- config.phpに新設定 `state_compression`(デフォルトtrue)を追加。zlib拡張が利用可能かつ有効な場合のみ圧縮を行う。
- lib.phpのstate保存処理(rpgsf_save_state、および冒険の書スロット保存)で、state配列をjson_encodeした後、`gzcompress()`で圧縮し、DB格納用にbase64_encodeして先頭に識別プレフィックス `GZB64:` を付与してDBカラム(state_json)へ保存する。
- state読み込み処理(rpgsf_load_or_create_save、スロットロード処理)で、先頭が `GZB64:` の場合はbase64_decode→gzuncompress→json_decodeし、プレフィックスがない場合は従来通り直接json_decodeするフォールバックを実装する。これにより移行期間中の既存(非圧縮)レコードもそのまま正しく読み込める。
- zlib拡張が無効な環境やstate_compression=falseの場合は従来通り非圧縮JSONで保存し続ける(自動フォールバック)。
- rpgsf_ghost_records.party_snapshotなど元々サイズが小さいJSON列は対象外とし、対象はrpgsf_scenarios.scenario_jsonおよびrpgsf_save_states.state_jsonの2カラムに限定する。
3. 既存機能との整合:
- DBスキーマ変更は不要(既存のMEDIUMTEXT列にテキストとしてbase64文字列を格納するだけ)。
- 既存の非圧縮データも読み込み時に自動判定して処理するため、既存プレイ中のセーブデータや共有シナリオが壊れることはない。
- 圧縮設定はconfig.phpのフラグで即座に無効化・切り戻し可能なため、環境依存の不具合が出た場合もリスクを最小化できる。
- マップ移動・戦闘のAjaxレスポンス形式やフロントエンドJSは変更不要で、サーバー内部処理のみの改善のため後方互換。
マップ移動・戦闘のたびにDBへ読み書きされるstate_json(MEDIUMTEXT)は、訪問済みタイルやパーティ・図鑑・記憶帳など情報が多くサイズが大きくなりやすい。JSON文字列は同じキー名やタイル文字列の繰り返しが多く圧縮効率が高いため、DB保存前にgzip圧縮することでディスクI/O・ネットワーク転送・PHP側のjson_encode/decode対象バイト数を削減し、移動・戦闘Ajaxの応答および冒険の書ロードをさらに高速化する。
2. 具体的仕様:
- config.phpに新設定 `state_compression`(デフォルトtrue)を追加。zlib拡張が利用可能かつ有効な場合のみ圧縮を行う。
- lib.phpのstate保存処理(rpgsf_save_state、および冒険の書スロット保存)で、state配列をjson_encodeした後、`gzcompress()`で圧縮し、DB格納用にbase64_encodeして先頭に識別プレフィックス `GZB64:` を付与してDBカラム(state_json)へ保存する。
- state読み込み処理(rpgsf_load_or_create_save、スロットロード処理)で、先頭が `GZB64:` の場合はbase64_decode→gzuncompress→json_decodeし、プレフィックスがない場合は従来通り直接json_decodeするフォールバックを実装する。これにより移行期間中の既存(非圧縮)レコードもそのまま正しく読み込める。
- zlib拡張が無効な環境やstate_compression=falseの場合は従来通り非圧縮JSONで保存し続ける(自動フォールバック)。
- rpgsf_ghost_records.party_snapshotなど元々サイズが小さいJSON列は対象外とし、対象はrpgsf_scenarios.scenario_jsonおよびrpgsf_save_states.state_jsonの2カラムに限定する。
3. 既存機能との整合:
- DBスキーマ変更は不要(既存のMEDIUMTEXT列にテキストとしてbase64文字列を格納するだけ)。
- 既存の非圧縮データも読み込み時に自動判定して処理するため、既存プレイ中のセーブデータや共有シナリオが壊れることはない。
- 圧縮設定はconfig.phpのフラグで即座に無効化・切り戻し可能なため、環境依存の不具合が出た場合もリスクを最小化できる。
- マップ移動・戦闘のAjaxレスポンス形式やフロントエンドJSは変更不要で、サーバー内部処理のみの改善のため後方互換。
💬 返信 (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