Skip to content

7.6 DevTools とデバッグ ​

「とりあえず動いたけど、何が起きているのかよく分からない」という状態から、「今この瞬間、どのコンポーネントがなぜ再レンダーされたのか」を追えるようになると、React の理解が一段階上がります。そのための道具が React DevTools と Chrome DevTools です。

この 2 つは役割が異なり、併用する のが定跡です。最初はどちらをいつ開けばいいかで迷うと思いますが、この章で整理していきます。

React DevTools の概要 ​

React DevTools は React 公式のデバッグツールで、ブラウザ拡張として配布されています (react.dev/learn/react-developer-tools)。Chrome / Firefox / Edge 向けに用意されています。

  • Chrome 版: chromewebstore.google.com/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi
  • Firefox / Edge も同名の拡張があります(公式ページから各ストアにリンク)。
  • Safari や、拡張を入れられない環境向けには、npm でスタンドアロン版 (npm install -g react-devtools) もあります。

拡張をインストールして React アプリを開くと、ブラウザ DevTools に Components タブと Profiler タブが追加されます。

図 7.6.1 React DevTools が追加する 2 つのタブ ​

ブラウザ DevTools タブElementsConsoleSourcesNetworkComponentsProfilerツリー / props / stateその場で編集もできる再レンダーの計測flame graph / 原因の可視化React アプリを開いた瞬間に、この 2 タブが自動で表示されます

Components タブ ​

Components タブでは、実行中のアプリのコンポーネントツリーを React 視点で 見ることができます。

見えるもの:

  • 各コンポーネントの名前(関数名がそのまま出ます)。
  • そのコンポーネントに渡っている props。
  • そのコンポーネントが保持している state / hooks の値。
  • ツリー内の親子関係。

できること:

  • props / state を その場で編集 して UI への影響を見る(公式ページの「Edit props and state」)。
  • 特定のコンポーネントを選択し、DOM 要素を対応付けてハイライトする。
  • コンポーネント名でツリーを検索する。

使い所:

  • 「この子コンポーネントに props が届いていないのでは?」を、DOM を漁ることなく React 側から即確認できます。
  • Context の値が期待どおり供給されているかを、Context を受け取るコンポーネント側で確認できます。

Profiler タブ ​

Profiler タブは、レンダリングのコストを可視化するツールです(公式: 「Identify performance problems」)。

操作フロー:

  1. Record ボタンを押して計測を開始します。
  2. アプリを操作します(クリック、入力など)。
  3. Stop を押して計測を終えます。
  4. 結果が炎グラフ (flame graph) とランキング表示で出ます。

分かるもの:

  • どのコンポーネントが再レンダーされたか。
  • 各コンポーネントのレンダーにかかった時間。
  • そのレンダーが起きた理由(props が変わった、state が変わった、親が再レンダーされた)。

Part 4 の 4.6 パフォーマンス で扱った memo / useMemo / useCallback の効果を測るときに、Profiler が 定量的な根拠 になってくれます。

Chrome DevTools との連携 ​

Chrome DevTools (developer.chrome.com/docs/devtools) は React に限らず Web 一般の開発ツールで、次の主要パネルがあります。

  • Elements — DOM と CSS の確認・編集。
  • Console — JS の実行と console.log の出力。
  • Sources — JS のステップ実行・ブレークポイント。
  • Network — HTTP リクエストの確認。
  • Performance — ランタイムパフォーマンス(Core Web Vitals: LCP / CLS / INP の分析)。

React で詰まったときの Chrome DevTools 側の主な使い途は、こんな感じです。

  • Network: API レスポンスを見ます。ステータスコードが期待どおりか、ペイロードが正しいか、遅いリクエストがないか。
  • Sources: コードにブレークポイントを置いてステップ実行します。console.log を大量に撒くより、特定行で止めて変数を見る方が速いです。
  • Elements: 最終的に DOM に何が出力されたか、CSS がどう適用されたかを見ます。
  • Performance: 長いタスク (Long Task) が発生していないか、スクリプト実行時間が長すぎないか。

React DevTools と Chrome DevTools は 情報の粒度が違います。「React のツリー・props・state」は React DevTools、「ネットワーク・実 DOM・JS ステップ実行」は Chrome DevTools が担います。

図 7.6.2 デバッグツールの役割分担 ​

よくあるデバッグパターン ​

現場で頻出する症状と、最初に開くべきタブの対応表です。

症状最初に見るもの典型的な原因
useEffect が無限に走るReact DevTools (Components) で依存配列に入っている値を確認依存配列にオブジェクト・配列リテラルを直接置いて毎レンダーで新規作成されている
子コンポーネントに props が届かないReact DevTools (Components) で親側の props を確認親がそもそも渡していない / 条件分岐で undefined になっている
描画が重い / 遅いReact DevTools (Profiler) で再レンダー範囲と時間を計測上位の Context が頻繁に変わり広範囲が再レンダーされている / 重いコンポーネントが memo されていない
データが取れないChrome DevTools (Network)ステータス 401 / 404 / CORS エラー / 認証ヘッダ未送信
undefined が表示されるChrome DevTools (Sources) でブレークポイントデータ取得前に描画していて、ローディング分岐が抜けている
クリックしても何も起きないChrome DevTools (Console) と React DevTools (Components)イベントハンドラが undefined / 上の要素が pointer-events: none でクリックを奪っている

図 7.6.3 症状から開くタブへの早見 ​

挙動がおかしい無限ループ / props 不達→ React DevTools Components表示が遅い / 重い→ React DevTools Profilerデータが出ない→ Chrome DevTools Networkundefined が出る / 条件が追えない→ Chrome DevTools Sources(ブレークポイント)クリックが反応しない→ Components + Console を両方確認症状 → タブ の対応を頭に入れておくと、迷う時間がぐっと減りますどれも「まず開いてみる」くらいの気軽さで OK

図 7.6.4 デバッグの出発点 ​

console.log とブレークポイントの使い分け ​

初学者は console.log を大量に撒くことが多く、それ自体は悪くありません。ただし、次の条件に当てはまるようなら、ブレークポイント(Chrome DevTools の Sources タブ)に切り替えた方が速く解決します。

  • ログを入れては消して、ということを 3 回以上繰り返している。
  • どの条件分岐に入ったのか、複雑で分からない。
  • オブジェクトの中身を入れ子まで追いたい(log だと toString されて見づらい)。

ブレークポイントを置くと、その行で実行が止まり、スコープ内のすべての変数を Watch パネルで見られます。慣れるまでは console.log でもよいのですが、中級以上の案件では「最初から Sources でブレークポイント」が標準です。

React 開発時によく使う追加の観点 ​

  • React 19 の警告 — use client の付け忘れ、Server Components での非対応フックの使用などは、Next.js 側のエラーメッセージが詳しく出ます。ブラウザコンソールと ターミナル (dev server) 両方を見る癖をつけておきましょう。
  • React DevTools の "Highlight updates when components render" — 拡張内 Settings(歯車アイコン)→ General タブにある正式オプション名です。有効にすると、再レンダーされたコンポーネントの枠が一瞬ハイライトされ、「今の操作でどこが再レンダーされたか」を目視できます。更新頻度が高いほど枠の色が濃く変化します。

参照ソース ​