コア機能
コア機能の詳細解説。
エディターウィンドウのレイアウト
開く:Window > CodeCarnage > API Mocking Toolkit
3 つのタブ: Endpoints(コレクション/フォルダー/エディター)、Sessions(録画/リプレイ)、Environments(セレクター/変数/インポート/エクスポート)
左ペイン: コレクションピッカー、フォルダーツリー、エンドポイント一覧、+ Endpoint ボタン。
右ペイン: Mock(Success/Error サブタブ、Body/Headers 付き)と Response(ライブビューアー、キャプチャボタン)。
リクエストパネル: メソッド、URL、Headers/Body、Send ボタン。変数ヒントチップが利用可能な {{variable}} を表示。
ツールバー: 有効、オフラインモード、コレクションドロップダウン、インポート/エクスポート(OpenAPI 3.0 + x-amt-*)。
レスポンスストラテジー
各コールで返すレスポンスを制御:
- Sequential – 順番に再生;
LoopResponsesフラグによりループ - RoundRobin – 永久にサイクル
- Random – 一様ランダム
ショップページネーションの例
エンドポイント:GET /api/shop/items は 30 アイテムを 1 ページ 10 件で返す。
設定:エンドポイント GET /api/shop/items に 3 つのレスポンスを作成:
レスポンス 1(ページ 1):
{
"items": [
{"id": 1, "name": "Sword", "price": 100},
{"id": 2, "name": "Shield", "price": 80},
...,
{"id": 10, "name": "Potion", "price": 20}
],
"page": 1,
"hasMore": true
}
レスポンス 2(ページ 2):
{
"items": [
{"id": 11, "name": "Helmet", "price": 150},
...,
{"id": 20, "name": "Boots", "price": 60}
],
"page": 2,
"hasMore": true
}
レスポンス 3(ページ 3):
{
"items": [
{"id": 21, "name": "Ring", "price": 200},
...,
{"id": 30, "name": "Amulet", "price": 300}
],
"page": 3,
"hasMore": false
}
レスポンスストラテジーを Sequential に設定。コード例:
// ゲームコ ード
for (int page = 1; page <= 5; page++)
{
var response = await ApiClient.Get("/api/shop/items");
var data = JsonUtility.FromJson<ShopData>(response.Body);
Debug.Log($"Page {page}: {data.items.Length} items");
}
// 出力(LoopResponses = true の場合):
// Page 1: 10 items(レスポンス 1)
// Page 2: 10 items(レスポンス 2)
// Page 3: 10 items(レスポンス 3)
// Page 4: 10 items(レスポンス 1 - ループ!)
// Page 5: 10 items(レスポンス 2)
バックエンドの協力なしにページネーションをテスト。
ストラテジー:
- Sequential: 1 → 2 → 3 → (ループまたは停止)
- RoundRobin: 1 → 2 → 3 → 1 → 2 → 3(常にサイクル)
- Random: 2 → 1 → 3 → 2 → 2 → 1
「主に成功、時々エラー」の混合には、Responses[] と ErrorResponses[] 両方に Random ストラテジーを使用。
オフラインモードとエンドポイントごとのモックトグル
グローバルの オフラインモード(ApiGlobalConfig)とエンドポイントごとの Mock Enabled(UseMock)トグルがルーティングを制御。
ルーティング順序:
ApiGlobalConfig.Enabledが OFF → 実際のバックエンド(Toolkit バイパス)OfflineModeが ON → すべてモック(エンドポイントが一致しない場合は失敗)OfflineModeが OFF + エンドポイント一致 +UseMockが ON → モック- それ以外 → 実際のネットワーク
エンドポイントごとのトグルにより、エンドポイントの設定を保持しながら実際のバックエンドにルーティングできます — ライブレスポンスのキャプチャや A/B テストに便利。
オフラインモードの有効化:
Window > CodeCarnage > API Mocking Toolkit
"Offline Mode" トグルを ON にする
ランタイムでの読み取り:
var config = Resources.Load<ApiGlobalConfig>("ApiGlobalConfig");
bool offline = config.OfflineMode;
バックエンドなしの開発、不安定なネットワークなしのテスト、カンファレンスデモに活用。
環境と変数
コード変更なしに異なるバックエンドを管理。
環境を作成:Development、Staging、Production。各環境に固有の baseUrl と変数を持つ。
URL とボディでの変数補間:
{{baseUrl}}/users/{{userId}}?key={{apiKey}}
スコープ優先度(高→低):
- エンドポイント固有
- 環境固有
- グローバル
ランタイムでの切り替え:
EnvironmentManager.Instance.ActiveEnvironment = devEnvironment;
var response = await ApiClient.Get("{{baseUrl}}/users/{{userId}}?key={{apiKey}}");
未解決の変数は MissingEnvironmentVariableException をスロー。ハードコードされた URL は不要。
本番ビルドの安全性
BuildPreprocessor がビルド前に実行。チェック内容:
OfflineModeが OFF であることBuildEnvironmentIdが登録済み環境を指していること- ア クティブ環境がビルド環境と一致していること
環境の管理: Window > CodeCarnage > API Mocking Toolkit > Manage Environments
- EDITOR: Play Mode 用のアクティブ環境(自由に切り替え可)
- BUILD: ビルドにコンパイルされる環境(1 つのみ)
違反があると BuildFailedException でビルドが失敗。
ベストプラクティス: Development(Dev)、Staging(QA 向け)、Production(Build)。BUILD 環境のみリリース。
コレクションとフォルダー
数百のエンドポイントを整理。
コレクション: エンドポイントグループを分離(ゲーム、API バージョン)。ApiGlobalConfig.ActiveCollectionName で一度に 1 つのみアクティブ。
作成:Project ウィンドウを右クリック → Create > CodeCarnage > API Mocking Toolkit > Endpoint Collection。
フォルダー: コレクション内でエンドポイントを整理(Authentication、Player Data、Leaderboard)。
ベストプラクティス:ゲーム/バージョン/テストスイートには コレクション を使用。機能/サービスには フォルダー を使用。