← ブログに戻る

APIレスポンスのデバッグ方法:JSONビューアのヒント

プロフェッショナルなJSONビューア技術でAPIデバッグをマスターしましょう。現代のツールと実証済みの戦略を使用して、APIレスポンスを効率的に検査、フィルタリング、トラブルシューティングする方法を学びます。

Big JSON Team14 分で読めますprogramming
B

Big JSON Team

Technical Writer

Expert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.

14 分読む

# APIレスポンスのデバッグ方法:JSONビューアのヒント

APIレスポンスのデバッグはWeb開発者にとって日常的なタスクですが、ほとんどの人はJSONビューアを正しく使用していません。このガイドでは、最新のJSONビューアを使用してAPIレスポンスを10倍速く検査、分析、トラブルシューティングするためのプロフェッショナルなテクニックを紹介します。

REST API、GraphQL、WebSocketsを扱う際、これらのヒントがデバッグワークフローを変革します。

---

適切なJSON表示が重要な理由

問題点

効果的なJSON表示がないと、開発者は何時間も無駄にします:

  • 😫 何千行もの最小化されたJSONをスクロールする
  • 🔍 ネストされたオブジェクト内の特定のフィールドを手動で検索する
  • 🐛 レスポンスに埋もれた重要なエラーメッセージを見逃す
  • ⏰ 構造を理解するためにツール間でデータをコピー&ペーストする
  • 💥 大規模なAPIレスポンスでブラウザがクラッシュする

解決策

プロフェッショナルなJSONビューアが提供するもの:

即座のフォーマット - 最小化されたJSONを読みやすい構造に変換

インタラクティブナビゲーション - ネストされたオブジェクトの折りたたみ/展開

パス検索 - 正確なデータ位置の特定

型ハイライト - 文字列、数値、ブール値を一目で区別

検索とフィルタ - 大量のデータから瞬時に検索

---

JSONビューアの選択

ブラウザ開発者ツール

Chrome DevTools:
  • APIレスポンス用の組み込みJSONビューア
  • ネットワークタブにフォーマットされたレスポンスを表示
  • コンソールはコピーパス機能をサポート

制限事項:
  • 基本的なフォーマットのみ
  • 高度な検索機能なし
  • 大きなレスポンス(>10MB)でクラッシュする可能性

オンラインJSONビューア

BigJSON Viewer - 大きなファイルに最適:
  • ✅ 100MB以上のファイルを遅延なく処理
  • ✅ パスコピー機能付きのツリービュー
  • ✅ ワンクリックフォーマット
  • ✅ クライアント側処理(100%プライベート)
  • ✅ 検索とフィルタ機能

JSONLint - 検証に適している:
  • ✅ 構文検証
  • ✅ エラーハイライト
  • ❌ ナビゲーション機能が限定的

IDE拡張機能

VS Code:
  • "JSON Tools"拡張機能
  • フォーマット用の"Pretty JSON"
  • 組み込みJSONスキーマ検証

Postman:
  • 統合JSONビューア
  • レスポンス履歴
  • テスト生成

---

必須のJSONビューアテクニック

1. 高速パス抽出

問題:

APIレスポンスからuser.profile.settings.notifications.emailにアクセスする必要があります。

JSONビューアなし:
// 手動でドリル - エラーが発生しやすい!

const email = response.user.profile.settings.notifications.email;

BigJSON Viewerを使用:
  • 対象フィールドをクリック
  • ワンクリックでパスをコピー
  • 取得:user.profile.settings.notifications.email
  • プロのヒント: より複雑なクエリにはJSONPath構文を使用:
    $.user.profile.settings.notifications.email
    

    $.users[].email // すべてのユーザーのメール

    $.products[?(@.price < 100)].name // 100ドル未満の製品

    2. 折りたたみ/展開戦略

    テクニック:

    折りたたんだ状態から始め、戦略的に展開します。

    例 - ユーザーAPIのデバッグ:
    {
    

    "status": "success", // ← 表示を維持

    "metadata": { ... }, // ← 最初は折りたたむ

    "users": [ // ← 表示を維持

    {

    "id": 1,

    "profile": { ... }, // ← ユーザーを調査するときに展開

    "permissions": { ... } // ← 最初は折りたたむ

    }

    ],

    "debug": { ... } // ← デバッグ中以外は折りたたむ

    }

    BigJSON Viewerのショートカット:
    • 矢印をクリックして展開/折りたたみ
    • ダブルクリックですべての子を展開
    • 右クリックで「すべて展開」/「すべて折りたたむ」

    3. 型ベースのナビゲーション

    データ型を一目で理解:

    最新のJSONビューアは色分けを使用:

    {
    

    "string": "青いテキスト", // 🔵 文字列は青

    "number": 42, // 🟢 数値は緑

    "boolean": true, // 🟠 ブール値はオレンジ

    "null": null, // ⚫ nullは灰色

    "array": [], // 🟣 配列は括弧

    "object": {} // 🟤 オブジェクトは中括弧

    }

    なぜ重要か:

    データ型の問題を即座に発見:

    {
    

    "userId": "123", // 🔵 これは数値であるべきか?

    "price": "29.99", // 🔵 おそらく間違い - 数値であるべき

    "active": "true" // 🔵 ブール値であるべき、文字列ではない!

    }

    ---

    実際のAPIレスポンスのデバッグ

    シナリオ1:期待されるデータの欠落

    APIレスポンス:
    {
    

    "status": 200,

    "data": {

    "users": [

    { "id": 1, "name": "Alice" },

    { "id": 2, "name": "Bob" }

    ]

    }

    }

    期待されるが欠落している:emailフィールド JSONビューアを使用したデバッグ手順:
  • "email"を検索 - Cmd/Ctrl + Fを使用
  • - 結果なし?フィールドが本当に欠落している、単にネストされているだけではない

  • APIドキュメントを確認 - 期待される構造と実際の構造を比較
  • 類似のオブジェクトを検査 - 他のユーザーもメールが欠落しているか?
  • リクエストパラメータを確認 - メールには?fields=emailが必要かもしれない
  • プロのヒント: 参照JSONスキーマを作成:
    // expected-user-schema.json
    

    {

    "id": "number",

    "name": "string",

    "email": "string", // ← 実際のレスポンスに欠落!

    "avatar": "string"

    }

    シナリオ2:ネストされたエラーメッセージ

    APIエラーレスポンス:
    {
    

    "status": 400,

    "error": {

    "code": "VALIDATION_ERROR",

    "message": "Invalid request",

    "details": {

    "fields": {

    "email": {

    "errors": [

    {

    "code": "INVALID_FORMAT",

    "message": "Email must be valid format"

    }

    ]

    }

    }

    }

    }

    }

    クイックナビゲーション:
  • errordetailsfieldsemailを展開
  • パスをコピー:error.details.fields.email.errors[0].message
  • コードで使用:
  • const errorMsg = response?.error?.details?.fields?.email?.errors?.[0]?.message;
    

    console.error('検証エラー:', errorMsg);

    シナリオ3:パフォーマンスの問題(大きなレスポンス)

    問題:

    APIが50,000個の製品を返し、ブラウザがフリーズする。

    BigJSON Viewerを使用した解決策:
  • ストリーミングモードを使用 - データを段階的にロード
  • 表示前にフィルタ - JSONフィルタを適用:
  • $.products[?(@.inStock === true)]

  • サブセットをダウンロード - 必要なものだけを抽出
  • ページネーション戦略:
    // すべてをフェッチする代わりに:
    

    GET /api/products?limit=1000 // ❌ 重い

    // ページ単位でフェッチ:

    GET /api/products?page=1&limit=50 // ✅ 管理可能

    ---

    高度なJSONビューアのヒント

    1. 2つのAPIレスポンスを比較

    ユースケース: バージョン間でAPIの動作が変更された。 テクニック:
    // レスポンスをキャプチャ
    

    const v1Response = await fetch('/api/v1/user');

    const v2Response = await fetch('/api/v2/user');

    // オンライン差分ツールを使用

    // BigJSONは並列比較を提供

    探すべき点:
    • 欠落しているフィールド
    • 型の変更("123"123
    • 構造の変更(オブジェクト → 配列)
    • 追加された新しいフィールド

    2. 特定のデータパターンを抽出

    JSONPathの例:
    // すべてのメールアドレス
    

    $.users[].email

    // 100ドル以上の製品

    $.products[?(@.price > 100)]

    // 管理者ロールのユーザー

    $.users[?(@.role === 'admin')]

    // ネストされた配列検索

    $..comments[].author.name

    BigJSONのJSONPath評価器を使用:
  • JSONを貼り付け
  • JSONPathクエリを入力
  • 一致する結果を即座に表示
  • 3. スキーマに対して検証

    JSONスキーマの例:
    {
    

    "$schema": "http://json-schema.org/draft-07/schema#",

    "type": "object",

    "properties": {

    "userId": { "type": "number" },

    "email": {

    "type": "string",

    "format": "email"

    },

    "created": {

    "type": "string",

    "format": "date-time"

    }

    },

    "required": ["userId", "email"]

    }

    BigJSONでの検証:
    • スキーマをアップロード
    • レスポンスを検証
    • 違反がハイライト表示される

    4. APIレスポンスを保存して共有

    ワークフロー:
  • レスポンスをキャプチャ - API出力をファイルに保存
  • 機密データを匿名化 - トークン、パスワードを削除
  • チームと共有 - 共有ワークスペースにアップロード
  • 注釈を追加 - 特定のフィールドにコメント
  • 例 - サポートチームと共有:
    {
    

    "_comment": "無効なクーポンで注文を作成するとエラーが発生",

    "orderId": "ORD-12345",

    "error": {

    "code": "INVALID_COUPON",

    "message": "クーポンXYZ123は期限切れです"

    }

    }

    ---

    ブラウザDevToolsデバッグワークフロー

    Chrome DevToolsプロのヒント

    1. ネットワークログを保持
    • ネットワークタブを右クリック → 「ログを保持」をチェック
    • ページナビゲーション中もAPI呼び出しを表示し続ける

    2. XHR/Fetchリクエストをフィルタ
    • ネットワークタブで「XHR」または「Fetch」をクリック
    • CSS、画像、スクリプトを非表示

    3. cURLとしてコピー
    • リクエストを右クリック → コピー → cURLとしてコピー
    • ターミナルで正確なAPI呼び出しを再生

    4. イニシエータ列
    • どのJavaScriptがAPI呼び出しをトリガーしたかを表示
    • クリックしてソースコードにジャンプ

    5. レスポンスサイズ
    • ペイロードサイズの「サイズ」列をチェック
    • 重いAPIレスポンスを特定

    Firefox開発者ツール

    JSONビューア機能:
    • レスポンス内のJSON自動検出
    • 折りたたみ可能なツリービュー
    • RAW/解析済みの切り替え
    • JSONPathのような検索

    使い方:
  • ネットワークタブを開く
  • APIリクエストをクリック
  • 「レスポンス」タブをクリック
  • フォーマットされたJSONを楽しむ
  • ---

    一般的なAPIの問題のデバッグ

    問題1:CORSエラー

    症状:
    Access to fetch at 'https://api.example.com' from origin 'http://localhost:3000' 
    

    has been blocked by CORS policy

    デバッグ:
  • ネットワークタブ → レスポンスヘッダーをチェック
  • 以下を探す:
  • Access-Control-Allow-Origin: 

    Access-Control-Allow-Methods: GET, POST

  • リクエストヘッダーが許可されたヘッダーと一致することを確認
  • 開発用のクイックフィックス:
    // package.jsonでプロキシを使用(React)
    

    {

    "proxy": "https://api.example.com"

    }

    // またはテスト用にCORSプロキシを使用

    fetch('https://cors-anywhere.herokuapp.com/https://api.example.com/data')

    問題2:認証の失敗

    期待されるレスポンス:
    {
    

    "data": { ... }

    }

    実際のレスポンス:
    {
    

    "error": "Unauthorized",

    "message": "Invalid or expired token"

    }

    デバッグチェックリスト:
    • [ ] トークンがリクエストに含まれているか?
    • [ ] 正しいヘッダー名か?(Authorization: Bearer
    • [ ] トークンが期限切れか?JWTのexpクレームをチェック
    • [ ] トークンの形式は正しいか?(JWT vs APIキー)

    DevToolsでヘッダーを検査:
    Request Headers:
    

    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

    問題3:予期しないデータ型

    問題:
    const response = await fetch('/api/user/123');
    

    const data = await response.json();

    // 数値を期待、文字列を取得

    console.log(typeof data.userId); // "string" ❌

    JSONビューアでデバッグ:
  • 実際のレスポンス構造を検査
  • 型ハイライトをチェック
  • 型変換を追加:
  • const userId = Number(data.userId);  // 文字列を数値に変換
    

    const price = parseFloat(data.price); // floatを解析

    const active = data.active === 'true'; // 文字列をブール値に

    ---

    プロのデバッグ用ツールと拡張機能

    ブラウザ拡張機能

    1. JSON Formatter(Chrome/Firefox)
    • ブラウザでJSONを自動フォーマット
    • シンタックスハイライト
    • ノードの折りたたみ/展開

    2. JSONView(Chrome/Edge)
    • JSONのツリービュー
    • キーと値のコピー
    • クリック可能なURL

    3. REST Client(VS Code)
    • VS CodeでAPI呼び出しを直接実行
    • リクエストコレクションを保存
    • 環境変数

    コマンドラインツール

    cURL - APIリクエストを実行:
    # 基本的なGETリクエスト
    

    curl https://api.example.com/users

    # jqできれいに表示

    curl https://api.example.com/users | jq .

    # レスポンスを保存

    curl https://api.example.com/users > response.json

    # 出力にヘッダーを含める

    curl -i https://api.example.com/users

    jq - JSONプロセッサ:
    # 特定のフィールドを抽出
    

    cat response.json | jq '.users[0].email'

    # 配列をフィルタ

    cat response.json | jq '.users[] | select(.active == true)'

    # データを変換

    cat response.json | jq '.users | map({id, name})'

    httpie - ユーザーフレンドリーなHTTPクライアント:
    # クリーンな構文
    

    http GET https://api.example.com/users

    # JSONでPOST

    http POST https://api.example.com/users name=Alice email=alice@example.com

    # 自動JSONフォーマット

    http https://api.example.com/users --pretty=all

    デスクトップアプリケーション

    Postman:
    • コレクション管理
    • 環境変数
    • 自動テスト
    • モックサーバー

    Insomnia:
    • クリーンなインターフェース
    • GraphQLサポート
    • コード生成
    • プラグインエコシステム

    Paw(macOS):
    • 美しいUI
    • 動的な値
    • チーム同期

    ---

    デバッグワークフローの作成

    ステップバイステッププロセス

    1. リクエストをキャプチャ
    # リクエストの詳細を保存
    

    curl 'https://api.example.com/data' \

    -H 'Authorization: Bearer TOKEN' \

    -H 'Content-Type: application/json' \

    --data '{"query":"test"}' \

    > request.txt

    2. レスポンスを検査
    • BigJSON Viewerで開く
    • ステータスコードをチェック
    • レスポンス構造を確認

    3. ドキュメントと比較
    • 期待されるフィールドと実際のフィールド
    • 型の不一致
    • 欠落しているデータ

    4. バリエーションをテスト
    • パラメータを変更
    • 異なるエンドポイントを試す
    • ヘッダーを変更

    5. 発見を文書化
    <h2 id="apinull" class="text-2xl font-bold mt-10 mb-5 text-foreground border-b border-gray-200 dark:border-gray-700 pb-2">バグレポート:ユーザーAPIがnullメールを返す</h2>
    
    エンドポイント: GET /api/users/123  
    期待: { "email": "user@example.com" }  
    実際: { "email": null }  
    手順: ユーザーは最初にメールを確認する必要がある  
    修正: メール確認チェックを追加

    ---

    ベストプラクティス

    すべきこと:

    API例にバージョン管理を使用

    git/
    

    ├── api-examples/

    │ ├── users-get-200.json

    │ ├── users-get-404.json

    │ └── users-post-201.json

    再利用可能なテストケースを作成

    describe('User API', () => {
    

    it('メール付きのユーザーを返す', async () => {

    const response = await fetch('/api/users/1');

    const data = await response.json();

    expect(data.email).toBeDefined();

    });

    });

    APIの癖を文書化

    // 注:APIは価格を数値ではなく文字列として返す
    

    const price = parseFloat(response.price);

    してはいけないこと:

    機密データをログに記録

    // ❌ 悪い
    

    console.log('ユーザーレスポンス:', response); // トークンが含まれる可能性!

    // ✅ 良い

    console.log('ユーザーがフェッチされた:', { id: response.id, name: response.name });

    レスポンス構造を仮定

    // ❌ 悪い
    

    const email = response.user.email; // userがnullの場合クラッシュ

    // ✅ 良い

    const email = response?.user?.email ?? 'メールなし';

    エラーレスポンスを無視

    // ❌ 悪い
    

    const data = await fetch('/api/data').then(r => r.json());

    // ✅ 良い

    const response = await fetch('/api/data');

    if (!response.ok) {

    const error = await response.json();

    console.error('APIエラー:', error);

    throw new Error(error.message);

    }

    const data = await response.json();

    ---

    結論

    APIデバッグをマスターするには:

  • 適切なJSONビューアを選択 - 大きなファイルにはBigJSONを使用
  • キーボードショートカットを学ぶ - 10倍速くナビゲート
  • JSONPathを使用 - データを正確に見つける
  • スキーマに対して検証 - 型の不一致をキャッチ
  • デバッグワークフローを構築 - 一貫したプロセス = より速い修正
  • 次のステップ

  • BigJSON Viewerを試す - あらゆるAPIレスポンスサイズを処理
  • ブラウザ拡張機能をインストール - JSON FormatterまたはJSONView
  • jqを学ぶ - コマンドラインJSONマスタリー
  • Postmanコレクションをセットアップ - 繰り返しAPI呼び出しで時間を節約
  • このガイドをブックマーク - APIをデバッグするたびに参照します!

    ---

    関連リソース

    ---

    最終更新日:2026年2月15日
    Share:

    関連記事

    Read in English