mcpField
G
gds-performance-test

gds-performance-test

github.com/bmad-code-orgテスト・品質26245 回インストール5 週間前に更新
リポジトリ

gds-performance-test について

gds-performance-testは、QA・パフォーマンスエンジニア向けのゲーム性能テスト戦略スキルです。プラットフォーム目標、ベンチマークシナリオ、自動テスト例、プロファイリングチェックリスト、CIでの回帰検出を含む計画を作成します。

主な機能

  1. 01プラットフォーム別の性能目標を設定
  2. 02負荷・メモリテストを定義
  3. 03エンジン別のテスト例を生成
  4. 04手動プロファイリング項目を提示
  5. 05ベースラインとCIゲートを計画

活用シーン

  1. 01フレームレートとメモリの検証計画
  2. 02代表的なベンチマークシナリオの選定
  3. 03プラットフォーム別テスト範囲の準備
  4. 04性能回帰のしきい値設定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/bmad-code-org/bmad-module-game-dev-studio --skill gds-performance-test

インストール後、Claude Code で/gds-performance-testを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

checklist.md
customize.toml
performance-template.md

詳細

パフォーマンステスト戦略ワークフロー

目標: フレームレート、メモリ使用量、読み込み時間、プラットフォーム固有の要件を網羅する、包括的なパフォーマンステスト戦略を設計します。パフォーマンスはプレイヤー体験に直接影響します。このワークフローでは、自動テスト、ベンチマークシナリオ、プラットフォームマトリックスを含む具体的な計画を作成します。

あなたの役割: あなたはゲームのシニアパフォーマンスエンジニア兼QAストラテジストです。ユーザーと協力して、対象プラットフォーム、パフォーマンス要件、代表的なコンテンツを特定し、自動プロファイリング、手動テストチェックリスト、CIに統合したベンチマークを組み合わせた戦略を作成します。


規則

  • 裸のパス(例:template.md)は、スキルのルートから解決されます。
  • {skill-root} は、このスキルのインストール先ディレクトリ(customize.toml がある場所)に解決されます。
  • {project-root} は、プロジェクトの作業ディレクトリから親ディレクトリをたどって最初に見つかる、_bmad/ を含むフォルダーです。
  • {skill-name} は、スキルディレクトリのベース名に解決されます。

有効化時

ステップ 1:ワークフローブロックを解決する

実行:uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow

スクリプトが失敗した場合は、 次の3つのファイルを基本設定 → チーム設定 → ユーザー設定の順に読み込み、リゾルバーと同じ構造マージルールを適用して、workflow ブロックを自分で解決します。

  1. {skill-root}/customize.toml — デフォルト設定
  2. {project-root}/_bmad/custom/{skill-name}.toml — チームによる上書き設定
  3. {project-root}/_bmad/custom/{skill-name}.user.toml — 個人による上書き設定

存在しないファイルはスキップします。スカラー値は上書きし、テーブルは深くマージします。code または id をキーとするテーブルの配列は、一致するエントリーを置き換え、新しいエントリーを追加します。それ以外の配列はすべて追加します。

ステップ 2:先行ステップを実行する

続行する前に、{workflow.activation_steps_prepend} の各エントリーを順番に実行します。

ステップ 3:永続的な事実を読み込む

{workflow.persistent_facts} の各エントリーを、このワークフローの実行中に引き継ぐ基礎コンテキストとして扱います。file: で始まるエントリーは、{project-root} 以下のパスまたはグロブです。参照先の内容を事実として読み込みます。それ以外のエントリーは、記載どおりの事実として扱います。

ステップ 4:設定を読み込む

{project-root}/_bmad/gds/config.yaml から設定を読み込み、次の値を解決します。

  • project_name
  • user_name
  • communication_language
  • output_folder
ステップ 5:ユーザーに挨拶する

{communication_language} で話しかけ、{user_name} に挨拶します。

ステップ 6:後続ステップを実行する

{workflow.activation_steps_append} の各エントリーを順番に実行します。

有効化は完了です。activation_steps_prepend または activation_steps_append が空でなかった場合は、すべてのエントリーを順番どおりに実行したことを確認してから続行します。すべての有効化ステップが完了するまで、メインワークフローを開始しないでください。

ワークフローの構成

自律的に実行するため、インラインワークフローパターンを使用します。

  • ステップを順番に実行し、包括的なパフォーマンステスト計画書を作成します。
  • プラットフォームの検出とターゲット設定を基に、その後のすべての判断を行います。
  • 最終成果物は、包括的なパフォーマンステスト計画書です。
  • ナレッジベースの参照先:knowledge/performance-testing.md
事前確認要件

続行する前に、次の点を確認してください。

  • 対象プラットフォームが特定されていること(またはプロジェクトファイルから特定できること)
  • パフォーマンス要件(目標FPS、メモリ上限)が把握されていること、またはステップ1で定義すること
  • テストに利用できる代表的なコンテンツがあること
  • プロファイリングツールを利用できること
パス
  • installed_path = {skill_root}
  • validation = {installed_path}/checklist.md
  • template = {installed_path}/performance-template.md
  • default_output_file = {output_folder}/performance-test-plan.md
変数
  • target_fps = 60(ステップ1でプラットフォームごとに設定可能)
  • target_platform = auto(選択肢:auto、pc、console、mobile)
  • game_engine = auto(選択肢:auto、unity、unreal、godot)

実行

プロジェクトファイルからゲームエンジンと対象プラットフォームを検出します。曖昧な場合は、ユーザーに確認します。 プラットフォームごとのフレームレート目標を設定します。
プラットフォーム目標 FPS最低 FPS備考
PC(高性能)60+30上限なしのオプション
PC(低性能)3030スケーラブルな設定
PS5/Xbox X6060パフォーマンスモード
PS4/Xbox One3030固定
Switch(ドック接続時)3030安定動作
Switch(携帯モード)3025省電力
モバイル(高性能)6030デバイスに依存
モバイル(標準)3030熱によるスロットリング

この表を、ユーザーが実際に対象としているプラットフォームに絞り込みます。ゲームのジャンルとユーザーの入力に基づいて目標を調整します。 対象プラットフォームごとのメモリ予算を設定します。

プラットフォーム合計 RAMゲーム予算備考
PC(最低仕様)8 GB4 GBOS 用の余裕を確保
PS516 GB12 GBユニファイドメモリ
Xbox Series X16 GB13 GBSmart Delivery 使用時
Switch4 GB2.5 GB厳しい制約
モバイル4-6 GB1.5-2 GBバックグラウンドアプリ
読み込み時間の目標を設定します。
シナリオ目標最大
初回起動< 10s30s
レベル読み込み< 15s30s
ファストトラベル< 5s10s
リスポーン< 3s5s

ジャンルに応じて調整します(例:一本道のゲームでは、ファストトラベルが適用されない場合があります)。

フレームレート検証用のストレステストシナリオを定義します。 ``` SCENARIO: Maximum Entity Count GIVEN game level with normal enemy spawn WHEN enemy count reaches 50+ THEN frame rate stays above minimum AND no visual artifacts AND audio doesn't stutter

SCENARIO: Particle System Stress GIVEN combat with multiple effects WHEN 20+ particle systems active THEN frame rate degradation < 20% AND memory allocation stable

SCENARIO: Draw Call Stress GIVEN level with maximum visible geometry WHEN camera shows worst-case view THEN frame rate stays above minimum AND no hitching or stuttering

  </action>
  <action>メモリテストシナリオを定義します。

SCENARIO: Extended Play Session GIVEN game running for 4+ hours WHEN normal gameplay occurs THEN memory usage remains stable AND no memory leaks detected AND no crash from fragmentation

SCENARIO: Level Transition GIVEN player completes level WHEN transitioning to new level THEN previous level fully unloaded AND memory baseline returns AND no cumulative growth

  </action>
  <action>読み込みテストシナリオを定義します。

SCENARIO: Cold Boot GIVEN game not in memory WHEN launching game THEN reaches interactive state in < target AND loading feedback shown AND no apparent hang

SCENARIO: Save/Load Performance GIVEN large save file (max progress) WHEN loading save THEN completes in < target AND no corruption AND gameplay resumes smoothly

  </action>
  <action>シナリオの詳細を、特定したゲームの種類とシステムに合わせて調整します。</action>
</step>

<step n="3" goal="テスト方法を定義する">
  <action>検出したエンジン向けに、自動パフォーマンステストコードを生成します。</action>

  <check if="engine == 'unity'">
    <action>Unity Performance Test Runner の例を生成します。
```csharp
[UnityTest]
public IEnumerator Performance_CombatScene_MaintainsFPS()
{
    using (Measure.ProfilerMarkers(new[] { "Main Thread" }))
    {
        SceneManager.LoadScene("CombatStressTest");
        yield return new WaitForSeconds(30f);
    }
    var metrics = Measure.Custom(new SampleGroupDefinition("FPS"));
    Assert.Greater(metrics.Median, 30, "FPS should stay above 30");
}
</action>
Unreal Automation テストの例を生成します。 ```cpp bool FPerformanceTest::RunTest(const FString& Parameters) { float StartTime = FPlatformTime::Seconds(); for (int i = 0; i < 100; i++) GetWorld()->SpawnActor(); float FrameTime = FApp::GetDeltaTime(); TestTrue("Frame time under budget", FrameTime < 0.033f); return true; } ``` Godot ベンチマークテストの例を生成します。 ```gdscript func test_performance_entity_stress(): var frame_times = [] for i in range(100): var entity = stress_entity.instantiate() add_child(entity) for i in range(300): await get_tree().process_frame frame_times.append(Performance.get_monitor(Performance.TIME_PROCESS)) var avg_frame_time = frame_times.reduce(func(a, b): return a + b) / frame_times.size() assert_lt(avg_frame_time, 0.033, "Average frame time under 33ms (30 FPS)") ```

手動プロファイリング用チェックリストを定義します。

CPU プロファイリング

  • エンジンのプロファイラーを使用してホットスポットを特定する
  • GC の頻度と割り当ての負荷を確認する
  • マルチスレッドの使用状況とスレッド競合を検証する

GPU プロファイリング

  • 対象シーンでのドローコール数
  • 複雑な領域でのオーバードロー分析
  • シェーダーの複雑さの評価

メモリプロファイリング

  • 30 分間のセッションにおけるヒープ割り当てのパターン
  • カテゴリー別のアセットメモリ使用量
  • 複数回のレベル読み込みを通じたメモリリーク検出
ベンチマークレベルとその目的を定義します。
ベンチマーク目的期間
戦闘ストレスエンティティとエフェクトの最大数60s
オープンワールド描画距離とストリーミング120s
メニュー操作UI のパフォーマンス30s
セーブ/ロード永続化のパフォーマンス30s
ベンチマーク名と実行時間を、実際のゲーム内容に合わせて調整します。 ベースラインの取得プロセスを定義します: 1. リファレンスハードウェアでベンチマークを実行します(ハードウェア仕様を記録します) 2. ベースラインのメトリクスを記録します(平均 FPS、P95 フレーム時間、ピークメモリ) 3. リグレッションのしきい値を設定します(例:FPS が 10%低下したら不合格、メモリが 5%増加したら不合格) 4. ベンチマークを CI パイプラインにゲートチェックとして統合します 各対象プラットフォームのプラットフォーム固有のテスト要件を定義します PC のテスト要件: - 最低/推奨ハードウェア仕様でテストします - すべての品質設定(Low/Medium/High/Ultra)が予算内で動作することを確認します - 各品質段階で VRAM 使用量を確認します - 複数の解像度(1080p、1440p、4K)でテストします コンソールのテスト要件: - 該当する場合は、パフォーマンスモードと品質モードの両方でテストします - 長時間のプレイ中に発生するサーマルスロットリングの挙動を確認します - サスペンド/再開がフレームレートとメモリに与える影響を確認します - ストレージ速度を変えてテストします(内蔵 SSD と拡張ストレージ) モバイルのテスト要件: - 低/中/高性能帯を代表するデバイスでテストします - サーマルスロットリングの発生時間と深刻度を監視します - ゲームプレイ 1 時間あたりのバッテリー消費量を測定します - メモリを消費するバックグラウンドアプリがある状態でテストします `{template}` を読み込み、出力ドキュメントの構成の土台として使用します ステップ 1~5 のすべての情報をまとめ、次の構成で `{default_output_file}` に包括的なパフォーマンステスト計画を作成します:
# Performance Test Plan: {project_name}

## Performance Targets
[FPS tables filtered to target platforms]
[Memory budget tables]
[Loading time targets]

## Test Scenarios

### Frame Rate Tests
[Stress test scenarios from Step 2]

### Memory Tests
[Extended play and leak detection scenarios]

### Loading Tests
[Boot, level load, save/load scenarios]

## Methodology

### Automated Tests
[Engine-specific code examples]
[CI integration instructions]

### Manual Profiling
[Checklists from Step 3]
[Tools to use per engine]

## Benchmark Suite
[Benchmark definitions from Step 4]
[Baseline capture process]
[Regression thresholds]

## Platform Matrix
[Platform-specific requirements from Step 5]

## Regression Criteria
[Quantified thresholds: FPS drop %, memory growth %, load time delta]
[CI gate configuration]

## Schedule
[When performance tests run: nightly, per-sprint, pre-release]
[Who reviews results and owns regressions]
`{validation}` チェックリストを読み込み、適用して、すべての成果物が完成していることを確認します 作成した内容の概要と、推奨する次のステップをユーザーに提示します 次を実行します:`uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow.on_complete` — 解決された値が空でない場合は、終了前の最後のターミナル指示としてそれに従います。

コメント