Chrome DevTools を活用した API レスポンスのオーバーライド技術

フロントエンド開発において、ネットワーク請求のデバッグは頻繁に行われる作業です。従来の方法では、モックデータを返すためにソースコードを直接編集し、実際の API 呼び出しをコメントアウトするケースが多く見られます。しかし、このアプローチはコードの修正と戻しを繰り返す必要があり、開発フローを阻害する要因となります。

ここでは、ブラウザの標準機能を用いて、コードを変更せずに API のレスポンス内容を介入・書き換えする効率的な手法について解説します。

DevTools によるレスポンス介入の仕組み

現代のブラウザ開発者ツールには、ネットワーク通信の内容をローカルファイルと置き換える「Overrides」機能が搭載されています。これを利用することで、サーバーからの応答を任意の JSON データに差し替えることが可能です。

実装手順

  1. ブラウザで F12 を押し、DevTools を開きます。
  2. Network タブを選択し、Disable cache にチェックを入れます(キャッシュの影響を排除するため)。
  3. 対象のページ遷移やアクションを行い、該当の API 請求を発生させます。
  4. Network リストから対象のエンドポイント(例:getFormData)を探し出します。
  5. 該当請求を右クリックし、Override content を選択します。
  6. 初回実行時は保存先のフォルダを指定する必要があるため、プロジェクトのルートディレクトリなどを設定して許可します。
  7. エディタが開くので、用意したモック用 JSON データを貼り付けて保存します。
  8. ページをリロードまたは再度アクションを実行すると、書き換えたデータが返却されます。

モックデータの例

以下は、フォーム設定情報を模倣した JSON 構造の例です。実際のプロジェクト構造に合わせてキー名や値を調整してください。

{
  "status": "ok",
  "payload": {
    "schema": {
      "type": "dynamic_form",
      "version": "3.0",
      "components": [
        {
          "kind": "text_input",
          "uid": "inp_001",
          "props": {
            "label": "氏名",
            "required": true,
            "placeholder": "入力してください",
            "width": "100%"
          }
        },
        {
          "kind": "select_box",
          "uid": "sel_002",
          "props": {
            "label": "所属部署",
            "options": [
              { "label": "営業部", "val": "sales" },
              { "label": "開発部", "val": "dev" }
            ]
          }
        },
        {
          "kind": "submit_action",
          "uid": "btn_003",
          "props": {
            "label": "送信",
            "actionType": "commit"
          }
        }
      ],
      "settings": {
        "layout": "vertical",
        "submitAction": "postForm"
      }
    },
    "initialValues": {
      "inp_001": "山田太郎",
      "sel_002": "dev"
    }
  }
}

従来のコード修正との比較

本手法を採用しない場合、通常は以下のように関数内部に条件分岐やハードコーディングを追加することになります。

async function retrieveFormSchema() {
  try {
    // 開発環境向けの擬似データ注入
    const isDebugMode = true;
    if (isDebugMode) {
      const dummyPayload = { /* 上記 JSON の payload 部分 */ };
      return Promise.resolve(dummyPayload);
    }

    // 本来の API 通信処理
    const response = await fetch('/api/form/config');
    return await response.json();
  } catch (error) {
    console.error('Form load failed', error);
    throw error;
  }
}

コード内にモック処理を埋め込む場合、テスト終了後に該当箇所を特定して削除する手間が発生します。また、誤ってコミットしてしまうリスクも存在します。一方、DevTools の Override 機能を用いれば、ローカル環境完結で通信内容を制御できるため、ソースコードの汚染を防ぎつつ迅速な検証が可能となります。

タグ: ChromeDevTools javascript API モック,Network パネル,Overrides

9月29日 13:19 投稿