高度な機能

リクエスト条件マッチング

URL パターンに加えて、リクエストの詳細な条件でマッチングできます。

条件マッチング設定画面。クエリパラメータ、ヘッダー、ボディの条件と演算子が設定できる

条件タイプ

タイプ説明
クエリパラメータURL のクエリパラメータでマッチングpage=1
ヘッダーリクエストヘッダーでマッチングAuthorization: Bearer *
ボディリクエストボディの内容でマッチング{"type": "premium"}

演算子

equals

完全一致

contains

部分一致

startsWith

前方一致

endsWith

後方一致

regex

正規表現マッチ

exists

キーの存在チェック

論理演算子

複数の条件を組み合わせることができます。

AND

すべての条件を満たす

OR

いずれかの条件を満たす

設定例

「プレミアムユーザーの検索リクエスト」のみをマッチングする場合:

URL Pattern: /api/search*
Method: GET

Conditions (AND):
  - Query Parameter "q" exists
  - Header "X-User-Type" equals "premium"

パススルー

モックルールがマッチしても、実サーバーへリクエストを転送する機能です。

リクエストパススルー

リクエストをそのまま実サーバーに転送します。レスポンスはモックルールで設定した内容を返します。

ユースケース: リクエストをサーバーに送信しつつ、レスポンスを固定したい場合(例:A/B テストで特定のレスポンスを常に返す)

レスポンスパススルー

実サーバーからのレスポンスをそのまま返します。モックルールは条件マッチングのみに使用します。

ユースケース: 特定の条件でログを取りたいが、レスポンスは変更したくない場合

ヒント: リクエストパススルーとレスポンスパススルー を同時に有効にすると、ルールは条件マッチングとログ記録のみに使用されます。

レスポンス修正

実サーバーからのレスポンスを部分的に修正できます。

ステータスコード上書き

レスポンスパススルーを有効にした状態でステータスコード を指定すると、実サーバーのステータスコードを上書きできます。

# 実サーバーが 200 を返しても、500 に変更
レスポンスパススルー: ON
ステータスコード: 500

エラー処理のテストに便利です。

レスポンスボディマージ

JSON レスポンスの場合、実サーバーのレスポンスとモックのレスポンスをマージできます。

# 実サーバーのレスポンス
{
  "id": 1,
  "name": "John",
  "status": "active"
}

# モックで設定したボディ(Merge Response Body: ON)
{
  "status": "inactive",
  "debug": true
}

# 最終レスポンス
{
  "id": 1,
  "name": "John",
  "status": "inactive",
  "debug": true
}

ネットワーク遅延シミュレーション

レスポンスの遅延をシミュレートして、ネットワーク環境のテストができます。

遅延設定

各ルールの遅延 (ミリ秒) フィールドにミリ秒単位で遅延時間を設定します。

0

遅延なし

500

0.5 秒

2000

2 秒

10000

10 秒

ユースケース

  • ローディング状態テスト: ローディング UI が正しく表示されるかテスト

  • タイムアウト処理テスト: タイムアウト処理が正しく動作するかテスト

  • 低速ネットワークシミュレーション: 低速ネットワーク環境での動作確認

  • 競合状態テスト: 複数リクエストの順序依存問題のテスト

注意: 遅延はレスポンスパススルー が有効な場合でも適用されます。実サーバーのレスポンス時間に加えて、指定した遅延が追加されます。

OpenAPI インポート

OpenAPI (YAML/JSON) 定義ファイルを読み込み、モックルールを自動生成できます。

OpenAPI インポート画面。ファイル選択後にフォルダとルールのプレビューが表示される

対応フォーマット

OpenAPI 3.x

OpenAPI 3.0 / 3.1 仕様に対応

YAML / JSON

どちらの形式でも読み込み可能

主な機能

機能説明
外部参照解決$ref: './paths/users.yaml' などの外部ファイル参照を自動解決
フォルダ自動作成エンドポイントごとにフォルダを作成し、ルールを整理
ルール生成正常系 (2xx) は有効状態、エラー系 (4xx/5xx) は無効状態で作成

パス変換

OpenAPI のパスパラメータは、Mimicry のワイルドカードに自動変換されます。

# OpenAPI 定義
/users/{userId}/posts/{postId}

# Mimicry のパターンに変換
/users/*/posts/*

レスポンス生成

以下の優先順位でレスポンスボディを自動生成します。

1
example単一の例が定義されている場合
2
examples複数の例から最初の 1 つを使用
3
schemaスキーマからサンプルデータを生成

使い方

  1. 1

    サイドバーの OpenAPI インポート ボタンをクリック

  2. 2

    OpenAPI 定義ファイル (YAML/JSON) を選択

  3. 3

    プレビューでフォルダ・ルール構成を確認

  4. 4

    インポート ボタンでモックルールを一括作成

ヒント: インポート前にプレビューでフォルダ構成とルール数を確認できます。外部参照を含む大きな OpenAPI 定義でも、自動的に解決して正しくインポートされます。

グローバルヘッダー

マッチするドメインのリクエスト・レスポンスにヘッダーを常に付与・削除するグローバル設定です。モックルールとは独立に動作し、モックルールの評価より先に適用されるため、モック応答を返すリクエストにも注入されます。

サイドバー下部の グローバルルール設定 (地球儀アイコン) から開く専用モーダルで管理します。

設定項目

項目説明
対象ドメイン1 行に 1 件記述。ワイルドカード (*.example.com) に対応。未入力なら全ドメインへ適用
適用範囲未選択時は全プロジェクトに適用 (グローバル)。プロジェクトを選択すると、そのプロジェクトがアクティブな間のみ適用
リクエストに追加・上書き上流に転送するリクエストへ任意のヘッダーを付与
リクエストから削除上流に転送する前に指定ヘッダーを除去
レスポンスに追加・上書きクライアントへ返すレスポンスへ任意のヘッダーを付与
レスポンスから削除クライアントへ返す前に指定ヘッダーを除去

ユースケース

  • ステージング認証トークンの付与: Authorization: Bearer xxx を常に注入し、毎回手動でセットする手間を省く

  • デバッグヘッダーの付与: X-Debug-Token などをサーバー側のログ突合のために常時付与

設定例

ステージング環境の API すべてに認証トークンを付与する場合:

名前: Staging 認証トークン
対象ドメイン:
  *.staging.example.com
適用範囲: (未選択 → 全プロジェクト)
リクエストに追加・上書きするヘッダー:
  Authorization: Bearer eyJhbGciOi...
  X-Debug-Token: dev-local

ヒント: グローバルヘッダーはモックルールの評価より先に処理されます。モック応答を返すリクエストにも注入が行われるため、ヘッダーベースのマッチング条件と組み合わせる際は注入後の値で判定されることに注意してください。

テンプレート構文と環境変数

モックルールのレスポンスボディ・レスポンスヘッダー・リクエスト改変ボディ・リクエスト改変ヘッダーには {{ ... }} 形式のプレースホルダを埋め込めます。マッチしたリクエストを返す直前に評価され、動的な値に置き換わります。

利用できるプレースホルダ

構文展開される値
{{now}}現在時刻を RFC3339 形式で返す
{{now+3d}} / {{now-1h}}現在時刻からのオフセットを RFC3339 で返す。単位は d / h / m / s
{{uuid}}UUID v4 を 1 件生成
{{random_int(min,max)}}min 以上 max 以下のランダム整数
{{random_choice(a,b,c)}}カンマ区切りの候補から 1 件をランダムに選択
{{random_date(YYYY-MM-DD,YYYY-MM-DD)}}指定範囲内のランダムな日付
{{env.NAME}}グローバル環境変数 NAME の値で置換

レスポンスボディでの使用例

ID やタイムスタンプを毎回ユニークに返したい場合の例:

{
  "id": "{{uuid}}",
  "createdAt": "{{now}}",
  "expiresAt": "{{now+7d}}",
  "score": {{random_int(1,100)}},
  "status": "{{random_choice(active,pending,closed)}}"
}

グローバル環境変数

プロジェクトを跨いで 1 つだけ持つ key=value 形式の設定です。モックルールから {{env.NAME}} 構文で参照できます。環境差分のある値 (ホスト名、トークン、テナント ID など) をモックルール本体から切り出し、ルールを書き換えずに切り替えられます。

サイドバー下部の グローバルルール設定 (地球儀アイコン) から開くモーダル内の 環境変数 セクションで key と value を編集します。

設定例

環境変数として API ホストとリージョンを定義しておく例:

# グローバルルール設定 → 環境変数
API_HOST   = api.staging.example.com
REGION     = ap-northeast-1
TENANT_ID  = tenant-acme-001

モックルールのレスポンスボディから参照します:

{
  "endpoint": "https://{{env.API_HOST}}/v1/users",
  "region": "{{env.REGION}}",
  "tenant": "{{env.TENANT_ID}}"
}

リクエスト改変ヘッダーから参照することもできます:

{
  "X-Tenant-Id": "{{env.TENANT_ID}}",
  "X-Region": "{{env.REGION}}"
}

ユースケース

  • API ホストの切り替え: レスポンス内に埋め込む URL を {{env.API_HOST}} にしておき、ステージング/本番で値だけ差し替える

  • リージョン・テナントの差し替え: マルチリージョンやマルチテナントのアプリで、ルール本体に値を埋め込まず環境変数で切り替える

  • 共有時の機密情報の分離: 認証トークンなどの値を環境変数側に持たせ、モックルールだけをチームで共有する

export / import 時の挙動

環境変数はグローバルルールのスコープに含まれ、export / import の対象になります。

  • 既存の key が優先: import 時に同名の環境変数がすでに設定されている場合、既存の値が保持され上書きされません
  • 新規 key は追加: import 元にしか存在しない key はそのまま追加されます

ヒント: ローカル固有の値 (個人のアクセストークンなど) は環境変数として手元で設定しておくと、チームで共有したモックルールを import しても自分の設定が上書きされません。

スクリプト

リクエスト/レスポンスを JavaScript で動的に変換できる機能です。モックルールでは表現しきれない動的な書き換え (署名付与、トークンのローテーション、ボディの一部上書きなど) をプログラマブルに扱えます。

メニューの ツール → スクリプト... から専用ウインドウを開き、スクリプトの作成・編集・有効化を行います。

フック

スクリプト内に以下の関数を定義すると、対応するタイミングで呼び出されます。

フックタイミング返り値
onRequest(request)上流へリクエストを送る直前変更後の request を返すと内容が差し替わる
onResponse(request, response)クライアントへレスポンスを返す直前変更後の response を返すと内容が差し替わる

リクエスト/レスポンスオブジェクト

フックに渡されるオブジェクトは次の構造を持ちます。

// request
{
  url: string,        // 例: "https://api.example.com/items?id=1"
  method: string,     // "GET" / "POST" / ...
  headers: { [name: string]: string },
  body: string,       // テキスト or base64 (isBinary が true の場合)
  isBinary: boolean,
}

// response
{
  statusCode: number, // 例: 200
  headers: { [name: string]: string },
  body: string,
  isBinary: boolean,
}

スコープと有効化

  • スコープ (URL パターン): モックルールと同じ書式で対象通信を絞り込みます (例: api.example.com/*)。
  • 有効/無効: スクリプトごとにトグルで切り替え可能。無効化したスクリプトはマッチしても実行されません。
  • console 出力: console.log/ warn/ error はスクリプトウインドウ下部のコンソールにリアルタイム表示されます。
  • ドライラン: ダミーのリクエスト/レスポンスでスクリプトを試験実行できます。実トラフィックを流さずに、フックの挙動とログを確認可能です。

スクリプト例

リクエストヘッダーに署名を付与し、レスポンスボディの一部を書き換える例:

// スコープ: api.example.com/*

function onRequest(request) {
  // リクエストに署名を付与
  request.headers['X-Signature'] = 'sig-' + Date.now();
  console.log('signed:', request.url);
  return request;
}

function onResponse(request, response) {
  // JSON レスポンスの一部を上書き
  if ((response.headers['content-type'] || '').includes('application/json')) {
    try {
      const json = JSON.parse(response.body);
      json.debug = { injectedBy: 'mimicry-script' };
      response.body = JSON.stringify(json);
    } catch (e) {
      console.warn('JSON parse failed:', e.message);
    }
  }
  return response;
}

実行環境

スクリプトはサンドボックス上で実行され、外部リソース (ネットワーク・ファイルシステム) には直接アクセスできません。実行時間とメモリには上限が設定されており、リクエストごとに独立したコンテキストで評価されるため、スクリプト間や呼び出し間で状態は共有されません。

注意: バイナリボディ (画像・動画など) は isBinary: true の状態で base64 文字列として渡されます。ボディを書き換える場合は isBinary フラグの維持に注意してください。