Google Chrome Developer Tools(DevTools)入門

Web開発でよく使う、特に使えるChromeデベロッパー・ツールの機能

2013年11月13日

Webアプリのデバッグやチューニングに役立つ、Chrome Developer Toolsの主要機能を、スクリーンキャプチャ中心で簡潔に紹介。

尾崎 義尚
  • このエントリーをはてなブックマークに追加

 モダンブラウザーの中でGoogle Chromeは最後発ながら、その機能の潤沢さ、便利さ、高速さからシェアを大きく伸ばしている。そして、今やほとんどのブラウザーではWindowsの場合[F12]キーを押すことで(Macの場合は[Command]+[Option]+[I]キーで)手軽に各ブラウザー搭載のデベロッパー・ツールを利用できるが、特にChromeのデベロッパー・ツールは、非常に機能が豊富なため利用している人も非常に多い。

 本稿では筆者がよく使う機能や、使うと便利な機能を中心に、Chromeのデベロッパー・ツールについて紹介していく。

機能ふかん

 残念ながら、Chromeのデベロッパー・ツールは日本語化されていないため、メニューやメッセージが全て英語になってしまうが、それを踏まえてもあまりある豊富な機能が提供されている。まずはウィンドウ全体の構成から見ていこう。

 Chromeでどこかのページを表示した状態で[F12]キー(Windowsの場合。Macの場合は[Command]+[Option]+[I]キー)を押すと、デベロッパー・ツールが表示される(次の画面を参照)。

デベロッパー・ツールを起動したところ
  • 1各タブは「パネル」と呼ばれており、このパネルで機能を切り替えることができる。
  • 2デベロッパー・ツールを別ウィンドウにするか、下辺か右辺のいずれかにドックするかを切り替える。
  • 3デベロッパー・ツールの下部へのConsoleウィンドウの表示/非表示を切り替える。
  • 4Webページ上の要素を、マウスを使って選択できる。虫眼鏡アイコン。

 上部に表示されているタブメニュー(1)が「パネル」と呼ばれるものだ。本稿では、このパネルを順に説明していく。2は、ウィンドウをChromeと統合するかどうかを切り替えるものである。3はConsoleウィンドウを表示するものだが、詳細は[Console]パネルで説明する。

 具体的には、以下のパネルを説明する(リンクをクリックすると該当箇所にジャンプできる)。最後の[Overrides]設定はパネルではないが、便利な機能なので紹介したい。

 それでは、[Elements]パネルから説明していこう。

▲パネルの一覧に戻る

[Elements]パネル

 Elementsパネルは、タグの要素とスタイルを検証するための機能であり、Web開発者が最も多く使う機能である。まずはパネル内の機能から解説していこう。

[Elements]パネル

パネル内には主に下記の4つの機能がある。それぞれの機能内容は、以下の本文で説明している。

  • 1DOMエレメント・ツリー。
  • 2サイドバー。
  • 3虫眼鏡アイコン。
  • 4パンくずリスト。

 DOMエレメント・ツリー(1)は、ブラウザー部分で表示中のWebページのHTML要素をツリービュー形式で表示したものである。ここで選択された要素のCSSスタイルなどの情報がサイドバー(2)に表示される。また、現在表示している要素の階層はパンくずリスト(4)に表示される。

 ページ要素が多い場合、検証したい要素を探すために、ツリーを展開していって探すのは非常に面倒だが、虫眼鏡アイコン(3)をクリックすると、普段見ているWebページ上で検証したい要素をクリックして選択できる検証モードに切り替わる。次の画面は、実際に検証モードに切り替えて、Googleのタイトル画像をクリックして選択したところだ。

虫眼鏡アイコンをクリックして検証モードに切り替えた状態

マウスカーソルで検証したい要素を選択して、DOMツリーを選択状態にできる。

マウスによる各種操作

 そのほか、マウスを使って以下の画面のような操作も可能である。

タグ名をダブルクリックするとタグを編集できる
属性をダブルクリックすると属性を編集できる
HTMLタグの右クリックメニューから[Edit as HTML]をクリック

HTMLタグの右クリックメニューから[Edit as HTML]をクリック

[Edit as HTML]メニューで、タグ全体を編集したり、タグを追加したりできる

要素の属性/スタイルの確認

 前述したとおり、マウスカーソルで要素を選択すると、選択された要素がアクティブになって、要素に設定されている属性やスタイルを確認できる。ここでは実際に、選択中の要素のスタイルを確認してみよう。次の画面は、サイドバー内のグループを分かりやすく表示したものだ(これまでの画面例では、サイドバー上部のタブとして表示されていたものと同じ)。

サイドバー内のグループ
サイドバー内のグループ

 これらのグループと目的は下記の表のとおり。

グループ目的
Styles 要素に設定されたCSSスタイルを確認できる
パネル内の[Metrics]表示: 要素の位置(position)、マージン(margin)、境界線(border)、パディング(padding)、要素のサイズを確認できる
Styles
Computed 最終的に要素に適用されたスタイルを確認できる
パネル内の[Show inherited](=継承されたスタイルの表示)チェックボックス: 要素に設定されたスタイルだけでなく、親要素やブラウザーデフォルトのスタイルも含めて表示する。また、最終的な[Metrics]も表示される
Styles
Event Listeners 要素に関連付けられたイベントを確認できる
DOM Breakpoints 要素の変更時にブレイクポイントを設定できるため、要素に関連付けられたブレイクポイントを表示する
Properties JavaScriptコードからアクセスできる、要素やオブジェクトなどのプロパティを確認できる
サイドバー内のグループと、その目的

 ここでは、よく使うStylesグループと便利なDOM BreakpointsグループとEvent Listenersグループを説明しよう。

Stylesグループ

 Stylesグループでは、要素に適用されているスタイルの確認と編集が可能だ。Stylesグループのタブを開くと、以下の画面のように、要素に適用されているCSSスタイル(Style)がファイル別、HTML要素/CSSクラス別に表示される。

Stylesグループ内のスタイル表示1: 各スタイル項目にマウスカーソルを合わせると、チェックボックスが表示されて、スタイルを外したときと適用したときの違いを動的に確認できる
Stylesグループ内のスタイル表示1: 各スタイル項目にマウスカーソルを合わせると、チェックボックスが表示されて、スタイルを外したときと適用したときの違いを動的に確認できる
Stylesグループ内のスタイル表示2: また適用されたスタイルの値を変更してみたり、スタイルを追加してみたりすることもできる
Stylesグループ内のスタイル表示2: また適用されたスタイルの値を変更してみたり、スタイルを追加してみたりすることもできる
Stylesグループ内のスタイル表示3: 色要素の編集はカラーピッカーが表示されて、イメージに近い色を選択できる
Stylesグループ内のスタイル表示3: 色要素の編集はカラーピッカーが表示されて、イメージに近い色を選択できる
DOM Breakpointsグループ

 DOM Breakpointsグループは、その名のとおり、DOM(Document Object Model)のイベントに対するブレイクポイントである。Webアプリケーションでは、JavaScriptなどを使って動的に要素が変化するページが、「ほとんど」と言ってもよいほど多い。それに伴い、「これらの要素が変更されるタイミングでスクリプトをデバッグしたい」というケースも増えている。DOM BreakpointはDOM要素(=DOMエレメント)にブレイクポイントを張れる機能である。

 次の画面は、<input>要素にブレイクポイントを張ろうとしているところだ。

DOMエレメント・ツリーでブレイクしたい要素を右クリックして、[Break on...]メニューを選択すると、以下の3つを選択できる。

DOMエレメント・ツリーでブレイクしたい要素を右クリックして、[Break on...]メニューを選択すると、以下の3つを選択できる。

メニュー項目タイミング
Subtree modifications 要素が変更されたときにブレイク
Attributes modifications 要素の属性が変更されたときにブレイク
Node removal 要素が削除されたときにブレイク

例えばここでテキストボックス要素を選択して、[Attributes modifications]をクリックすると、テキストボックスに値を入力したときに処理がブレイクするようになる

テキストボックスで入力したら処理がブレイクする

テキストボックスで入力したら処理がブレイクする

DOM要素へのブレイクポイントの設置
Event Listenersグループ

 Event Listenersグループは、要素に関連付けられたイベントハンドラーを確認できる(次の画面)。

Event Listenersグループのclickイベントを展開したところ
Event Listenersグループのclickイベントを展開したところ

「handler」オブジェクトにfunctionが関連付けられていることが分かる。

 このようにElementsパネルでは、HTMLコードとCSSコードを確認したり、編集して想定したデザインになるように編集したりできる。また、HTML要素のデバッグをすることもできる。

▲パネルの一覧に戻る

[Resources]パネル

 Resourcesパネルでは、ページを構成しているファイルやデータを確認できる。次の画面は、画像リソースを表示しているところ。

Resourcesパネル
Resourcesパネル

ページで使用されているファイルやデータを確認できる。

 Resourcesパネルのツリーに表示されている項目は以下のとおり。

項目説明
Frames HTML、CSS、画像、スクリプトなどページのファイル
Web SQL Web SQL Databaseのデータベース
IndexedDB Indexed Databaseで作成されたデータベース
Local Storage Web StorageのlocalStorageで保存されたデータ
Session Storage Web StorageのsessionStorageで保存されたデータ
Cookies ページで保存されたクッキー(Cookie)
Application Cache Application Cacheでキャッシュされたファイル
Resourcesパネルのツリー内の項目

 このようにページ内で使用されているファイルを一覧で確認したり、データを確認したりできる。そして、Cookie以外は値の編集も可能だ(次の画面)。

Resourcesパネルは、値をダブルクリックして編集することも可能

▲パネルの一覧に戻る

[Network]パネル

 Networkパネルは、Web開発をしていく中で最も使用するタブの1つである。ページのリクエストをしてからの通信内容を一覧で表示できるため、ページ表示が遅くなっている原因を特定するのに非常に有益だ(次の画面)。

Networkパネル

ページのリクエストとダウンロードされるまでの時間が表示される。

  • 1[Status]列: HTTPステータス。
  • 2[Initiator]列: ファイルを呼び出す起点。例えばJavaScriptコードから読み込まれたときには、そのJavaScriptファイル名が表示される。
  • 3[Time]列: ダウンロードにかかった時間。上がリクエストから受信が完了するまでの時間。下がリクエストから受信開始するまでの時間。
  • 4[ログの保持]: ページを遷移してもログを残しておくように設定する。
  • 5フィルター: リクエストの種類をフィルターして特定の項目だけの表示に切り替えられる。ちなみに「XHR」は「XMLHttpRequest」の略だ。

 タイムラインの各項目上にマウスカーソルを当てるとさらに詳細な時間が表示される(次の画面)。

タイムラインの詳細表示

タイムライン上の項目にマウスカーソルを当てると、主に下記の3つの情報が表示される。項目によっては、後掲の「NetworkパネルのTimingタブ」の画像で説明している[DNS Lookup][Connection][SSL]などの情報も表示される。

  • 1Sending: リクエストの送信時間。
  • 2Waiting: サーバーがレスポンスを返すまでの待ち時間。
  • 3Receiving: 受信開始から完了までの時間。

各通信項目の詳細表示

 一番左の[Name]列のファイル名をクリックすると、さらに詳細を確認できる。基本的に、下記の5つのタブが表示されるが、通信項目の種類によっては一部のタブは表示されない。

  • Headersタブ
  • Previewタブ
  • Responseタブ
  • Cookiesタブ
  • Timingタブ
Headersタブ

 Headersタブでは、HTTPリクエストとレスポンスのヘッダーを確認できる(次の画面)。

NetworkパネルのHeaders表示

ちなみに詳細表示からタイムライン表示に戻るには、タブの左上にある[×]をクリックすればよい。

Previewタブ

 Previewタブはテキストデータならレスポンスのテキスト、画像ファイルなら画像の情報が表示される(次の画面)。

NetworkパネルのPreview表示
Response/Cookies/Timingタブ

 Responseタブはレスポンス本文、Cookiesタブはリクエスト・レスポンスで使用されたクッキーを確認できる。そして、Timingタブがファイルの取得にかかった時間の詳細だ(次の画面)。

NetworkパネルのTimingタブ
NetworkパネルのTimingタブ

主に下記の6つの情報が表示される。項目によっては、前掲の「タイムラインの詳細表示」の画像で説明しているように3つの情報しか表示されない。

  • 1DNS Lookup: ドメインのDNSルックアップ。
  • 2Connection: サーバーとの接続にかかった時間。
  • 3SSL: SSLハンドシェイクにかかった時間。
  • 4Sending: 送信にかかった時間。
  • 5Waiting: 最初の応答を受け取るまでの待ち時間。
  • 6Receiving: 応答開始から終了までの時間。

 特定のファイルのダウンロードが遅い場合、この情報を見て対応を検討できる。例えば[DNS Lookup]に時間がかかっている場合、DNSプリフェッチを検討できる。[Sending]や[Receiving]に時間がかかっている場合は、サーバーの物理配置の変更、CDNの検討、GZip圧縮の検討などが考えられる。[Waiting]に時間がかかっている場合は、Webサーバー側の処理をチューニングすることを検討する必要がある。

 このようにNetworkパネルを使用することで、ページが表示されるまでの時間を詳細に調査して、対応を検討できる。

▲パネルの一覧に戻る

[Sources]パネル

 Sourcesパネルは、CSSやJavaScriptのコードをデバッグできる機能である(次の画面はJavaScriptソースファイルが開かれている例)。Visual StudioやEclipseのようなIDEと同様にデバッグに必要な機能が備わっている。

Sourcesパネル

この例では、JavaScriptコードが開かれている。

  • 1ページのソースファイルを一覧表示するnavigatorを表示する。
  • 2ソースビュー。
  • 3サイドバー。
  • 4コード整形ボタン。

 このパネルで便利な機能はコードの整形である。

コードの整形

 最近のJavaScriptライブラリは通信速度を高速化するため、コードのインデントや改行を削ったミニファイされたコードが返されることが多い。このようなコードは、プログラムとしては正しく動作するものの、人間がデバッグのために読もうとしてもなかなか読みづらいコードになっている。デベロッパー・ツールには、このような「コードを読みやすく整形してくれるボタン」が準備されている。以下の画面は実際にこのコード整形ボタンの実行前と実行後を比べたものだ。

コード整形ボタンをクリック

コード整形ボタンをクリック

整形ボタンをクリックすることで、ミニファイされたコードを整形して読みやすくできる

デバッガー機能

 Chromeのデバッガーが他のブラウザーと比較して優れている点は、デバッグ機能が充実していることである。サイドバーを見ると(次の画面)、その充実ぶりが分かる。

Sourceパネルのサイドバー: デバッグに便利な機能がそろっている
Sourceパネルのサイドバー: デバッグに便利な機能がそろっている

 サイドバー上のグループの役割は次のとおりだ。

項目説明
Watch Expressions ウォッチ式。[+]アイコンをクリックして追跡したい変数を追加できる
Call Stack ブレイク時の処理の呼び出し階層を確認できる
Scope Variables ブレイク時に実行中のスコープにある変数とその値を確認できる
Breakpoints JavaScriptコードのブレイクポイント
DOM Breakpoints Elementsパネルでも説明したDOMイベントのブレイクポイントを確認できる
XHR Breakpoints AjaxなどJavaScriptコードからのXMLHttpRequest呼び出しをドメイン単位でブレイクできる
Event Listener Breakpoints ページの中で発生したイベント単位でブレイクを指定できる。例えば、マウスのクリックやアニメーションの開始時など
Workers Web Workersの開始時にデバッグを開始するかどうかを指定できる
Sourceパネルのサイドバー上のグループの役割

 サイドバーのメニューを見ただけでも豊富なデバッグ機能が提供されていることがご理解いただけたと思う。次にこれらを使ってデバッグに便利な機能をいくつか紹介していく。

Call Stackをさかのぼって、実行済みの呼び出し元をデバッグする機能

 まずはデバッグでブレイク(=停止)したときにスタックを逆回転できる機能だ。具体的には、停止したときにCall Stackグループには関数の呼び出し履歴が表示されているので、停止している関数よりも前の処理を右クリックして、表示されるコンテキストメニューから[Restart frame]をクリックする(次の画面を参照)。この手順により、呼び出し元にさかのぼってデバッグできる。この機能はデバッグ機能の中でも非常に高度で有益な機能だ。

デバッグ停止時にサイドバーのCall Stackをさかのぼって、実行済みの呼び出し元をデバッグできる
デバッグ停止時にサイドバーのCall Stackをさかのぼって、実行済みの呼び出し元をデバッグできる
高度な条件付きブレイクポイント

 次に、ブレイクポイントについてはあえて説明は不要だと思うので、さらに高度な条件付きブレイクポイントの指定の仕方について、以下のスクリーンキャプチャ画像で説明しよう。

行番号を右クリックして、[Add conditional breakpoint]をクリック

行番号を右クリックして、[Add conditional breakpoint]をクリック

条件式入力フィールドが表示されるので、trueのときに停止したい条件を入力する

条件式入力フィールドが表示されるので、trueのときに停止したい条件を入力する。
ここでは、dayが14のときに停止するように設定している

ページを再ロードするなどして、JavaScriptコードの処理を実行する

条件に一致したときだけ停止する。また、変数にカーソルを合わせると変数の値がバルーンで表示される

条件に一致したときだけ停止する。また、変数にカーソルを合わせると変数の値がバルーンで表示される

高度な条件付きブレイクポイント
LiveEdit機能によるCSS/JavaScriptコードの直接編集

 またデベロッパー・ツールは「LiveEdit」と呼ばれる、CSSやJavaScriptのコードを直接編集できる機能が提供されている。この機能も、以下のスクリーンキャプチャ画像で説明しよう。なお、この機能は、ミニファイされたコードを整形していると使用できないので、注意してほしい。

ソースビューではコードを直接編集できる。また、オートコンプリートで候補が表示される
ソースビューではコードを直接編集できる。また、オートコンプリートで候補が表示される
ソースを右クリックして、[Local modifications]をクリックすると編集した内容を確認できる

ソースを右クリックして、[Local modifications]をクリックすると編集した内容を確認できる

[Local modifications]にソース単位、時間単位で変更点が表示される

[Local modifications]にソース単位、時間単位で変更点が表示される。
[revert]をクリックすると、変更内容を破棄できる

編集した内容の確認(編集した内容を保存しないと、変更点として表示されないので注意)

▲パネルの一覧に戻る

[Timeline]パネル

 Timelineパネルは、UI(ユーザーインターフェイス)のパフォーマンスを計測して、チューニングするポイントを探し出すための機能である(次の画面)。このパネルは、初期状態では何も表示されず、[Record](記録)ボタンを押してから、[Stop](停止)するまでの情報が記録される。

Timelineパネル

初期状態では何も表示されず、[Record](記録)ボタンを押してから、[停止](Stop)するまでの情報が記録される。

  • 1[Record]ボタン/[Stop]ボタン。これを押すとアイコンが黒色から赤色に変わり、もう一度押すと停止してアイコンが元の表示に戻る。
  • 2記録したレコードをクリアする。
  • 3ガベージ・コレクターを実行する。
  • 4同じ非同期イベントから発生したレコードをまとめる。
  • 5イベントの処理時間(全て/1ミリ秒以上/15ミリ秒以上)でフィルターする。
  • 6イベントの種類をフィルターする。

Timelineパネルのモード

 また、Timelineパネルには、いくつかのモードが提供されている。それぞれのモードは、次の画面のように左上から選択できる。

Eventsモード: イベントカテゴリごとのイベントを表示する

 Eventsモード: イベントカテゴリごとのイベントを表示する

Framesモード: ページ描画のパフォーマンスを表示する

 Framesモード: ページ描画のパフォーマンスを表示する

Memoryモード: ページのメモリ使用量を表示する

 Memoryモード: ページのメモリ使用量を表示する

Timelineパネルのモード

 それでは、それぞれのモードを見ていこう。

Eventsモード

 まずはEventsモードの詳細を確認していく。次の画面に示すように、レコードされるイベントの種類は大きく4種類に色分けされている。

Eventsモード(前掲の「Timelineパネル」を再掲)

画面上部のサマリーに全体のイベント概要があり、画面中央部のレコード(RECORDS)に詳細なイベント情報(下記の4種類)が表示される。

  • 青: Loading。読み込み、ネットワークの送受信、HTML文書の解析など
  • 黄: Scripting。スクリプトの実行、イベント処理、GC(ガベージ・コレクター)など。
  • 紫: Rendering。DOMの変更、ページのレイアウト、スクロールなどの描画イベント。
  • 緑: Painting。画像の処理。

 このように表示されたタイムラインをフィルターなどで絞り込んでみて、時間がかかっている処理を見付け出してパフォーマンス・チューニングをしていくのだ。

Framesモード

 次は描画パフォーマンスを調べるFramesモードだ(次の画面)。

Framesモード

画面上部のサマリーでは、描画速度の概要が表示されており、画面中央部のレコード(RECORDS)に詳細情報が表示されている。棒グラフの棒が長いほど描画に時間がかかっていることを表している。

 この例では、一定の頻度で描画に負荷をかけている処理があることが分かる。その処理を特定してチューニングしていけば、Webページの体感速度を上げることができる。上の画面の例では、画面上部のサマリー領域を見ると、その一番右端に、上から[30 fps][60 fps]と表示されている。要するに、横に引かれている上の線が30fpsで、中央の線が60fpsを意味するということが分かる。つまり、この画面のページでいえば、60fps以上であればスムーズに描画されるということになる。ほとんどのディスプレイは60Hzなので、ほとんどのケースで問題のない描画が行えると言えるだろう。

Memoryモード

 続いてMemoryモードを見ていこう(次の画面)。

Memoryモード

メモリ使用量の増減、カウンターの増減を確認できる。

 アプリを長時間稼働させる可能性がある場合は、このグラフを見て、メモリの使用量が増加し続けていないかを確認するとよいだろう。ただし、ここで確認できるのは増加しているかどうかだけなので、「何が増加している原因なのか」の詳細を確認するには、次に説明するProfilesパネルで確認する必要がある。

▲パネルの一覧に戻る

[Profiles]パネル

 Profilesパネルでは、CPUやメモリの情報を収集して詳細を確認できる。次の3つの情報を収集できる。

  (1)Collect JavaScript CPU Profile: JavaScriptコードの関数が使用しているCPU利用率を収集する
  (2)Take Heap Snapshot: JavaScriptコードとDOMノードが使用しているヒープメモリのスナップショットを採取する
  (3)Record Heap Allocations: 確保したヒープを時間軸で記録する

 次の画面は、Profilesパネルを開いたところ。ここで、上記の3つのプロファイリングタイプの中から1つを選択できる。

Profilesパネル

(1)Collect JavaScript CPU Profile

 まずは、CPU Profileから見ていこう。

 [Collect JavaScript CPU Profile]ラジオボタンを選択した状態で[Start]ボタンを押すと収集が始まり、[Stop]ボタン(もしくは下部のステータスバーにある[]ボタン)を押すまで収集される。

[Start]/[Stop]ボタンで、CPU Profileを開始/終了する

 収集が終わると、結果が一覧で表示される(次の画面を参照)。デフォルトでは関数の時間割合が多い順に表示される。

CPU Profilesの結果

CPU処理割合の多い順に表示される。

  • 1関数単体のCPU使用率。
  • 2関数の中から呼び出している関数の時間を含めた時間。
  • 3ビュー切り替え。
  • 4使用率と使用時間の切り替え。
  • 5選択された関数にフォーカスして確認(選択した関数をルートにして表示する)。

 また、次の画面のように、ビュー切り替えで[Flame Chart]に切り替えることでCPU利用率を視覚的に確認できる。

[Flame Chart]を選択

[Flame Chart]を選択

Flame Chartに切り替えることでCPU使用率を視覚的に確認できるようになる

(2)Take Heap Snapshot

 次にTake Heap Snapshotを見てみよう。

 これはその名のとおり、その採取時点のメモリ状況を取得するものだ。実行するには、[Take Heap Snapshot]ラジオボタンを選択した状態で[Take Snapshot]ボタンを押せばよい。

[Take Heap Snapshot]を選択して、[Take Snapshot]ボタンをクリック

 Snapshotなので停止ボタンを押すことなく、その時点のメモリ状況が一覧で表示される(次の画面)。

ヒープ・スナップショット

その時点のメモリ状況が下記の列別に一覧で表示される。

  • 1Constructor: クラス名。
  • 2Distance: DOMツリー・ルートからの距離。
  • 3Objects Count: オブジェクトの数。
  • 4Shallow Size: オブジェクト単体のメモリ使用量。
  • 5Retained Size: オブジェクトとオブジェクトが参照しているオブジェクトも含めた使用量。

 次の画面に示すように、オブジェクトを展開して、その中の項目を選択すると、さらに詳細を確認できる。

オブジェクトを展開して選択すると、[Object's retaining tree]領域にオブジェクトの詳細が表示される

 また、スナップショットを複数採取すると、スナップショット間の増分を比較できる。次の画面は2つのスナップショットを取った場合の例で、下部のステータスバーで[Objects Allocated between Snapshots 1 and 2](=スナップショット1と2の間の増分を比較)を選択しようとしているところ。

下部のステータスバーで[Objects Allocated between Snapshots 1 and 2]を選択

下部のステータスバーで[Objects Allocated between Snapshots 1 and 2]を選択

複数のスナップショットを採取するとオブジェクトの比較ができるようになる

 このように複数のスナップショットを比較することで、任意のタイミングのメモリ使用状況を比較して、「何が増えているのか」を特定できるようになる。

(3)Record Heap Allocations

 Record Heap Allocationsは、時間の流れとともに確保されたオブジェクトとその保持状況を確認できる。次の画面は、[Record Heap Allocations]ラジオボタンを選択した状態で[Start]ボタンを押して、しばらくして[Stop]ボタン(もしくは下部のステータスバーにある[]ボタン)を押した場合の表示例である。

Record Heap Allocationsの結果

タイムラインには確保されたオブジェクトがバーで表示されて、確保された状態は青色、解放されたらグレー色で表示される。

 また、上部のタイムラインを選択することで、その時間に作られたオブジェクトの詳細を確認できる(次の画面)。

時間を選択した結果

選択した時間に作成されたオブジェクトを確認できる。

 このようにProfilesパネルでは、CPUやメモリの詳細を確認でき、パフォーマンスやメモリリークの原因を特定できる。

▲パネルの一覧に戻る

[Audits]パネル

 Audits(=監査)パネルは、Webページを最適化するための推奨事項を提示してくれるユニークな機能である。

Auditsパネル
Auditsパネル

以下の4つの機能/オプションが用意されている。

  • 1Network Utilization: ネットワークに関する項目の検証をする。
  • 2Web Page Performance: Webページのパフォーマンスに関する検証をする。
  • 3Audit Present State: 現在表示している状態で検証する。
  • 4Reload Page and Audit on Load: ページを再読込して検証する。

 オプションを選択して[Run]ボタンを押すと、次の画面のように検証結果が表示される。

Auditsの結果
Auditsの結果

ページの内容を検証して、パフォーマンスを改善するための提案が一覧で表示される。

 1つずつの詳細を解説することは避けるが、表示しているページでGZip圧縮を有効にすることを提案したり、未使用のCSS要素の削除を提案したりとページのパフォーマンスを改善するための提案をしてくれる。全てをうのみにして実施すればよいというものではないが、一般的にWebのパフォーマンスを劣化させる原因になるものを提示してくれるので参考にして損はないだろう。

▲パネルの一覧に戻る

[Console]パネル

 Consoleパネルは、非常に強力な機能であり、コマンドライン入力により、さまざまな操作ができるようになっている(次の画面を参照)。大きく分けると2つの役割を持っており、1つが「ログの閲覧」で、もう1つが「インタラクティブな操作」である。そして実は、Consoleパネルは全てのパネルからアクセスできるようになっている。そのため、Elementsパネルで要素を操作したり、SourcesパネルでJavaScriptのオブジェクトを操作したりと、デバッグに非常に便利な機能である。

Consoleパネル
Consoleパネル

表示しているページのエラー、警告、情報が表示される。またコマンドの入力が可能だ。

  • 1[Console]ボタンで、([Console]パネル以外の)全てのパネルの下半分の領域にConsoleウィンドウを表示できる。
  • 2メッセージの種類でフィルターできる。

 Consoleパネルでできることは非常に多い。表示しているページの状態確認やデバッグ、DOMを操作してページ内のエレメントを変更など、さまざまなことがコマンドからできるようになっている。そして、オートコンプリートが使えるため入力も楽にできるようになっている(次の画面は、JavaScriptのdocumentオブジェクトの次の入力項目がオートコンプリートにより表示されている状態だ。このように「>」の部分にコマンドを入力できる)。

コマンドの入力時にオートコンプリートで候補が表示される
コマンドの入力時にオートコンプリートで候補が表示される

 また複数行の入力もできるため、JavaScriptで関数(=function)を書いてテストをしてみるという使い方もできる。次の画面はその例。

functionを書いて、動作を確認することもできる
functionを書いて、動作を確認することもできる

ログ表示

 ログメッセージを表示するメソッドはレベル別にいくつか用意されている(次の表を参照)。普段、アプリケーションを開発している方にはおなじみのレベル分けだろう。

レベルメソッド
(レベルを明記しない)ログ console.log()
デバッグ console.debug()
情報 console.info()
警告 console.warn()
エラー console.error()
ログメッセージを表示するメソッド(レベル別)

 これらをJavaScriptコードの中に記述することで、次の画面例のように、Consoleパネルにログを出力できる。

各メソッドによってアイコンの表示が異なるログメッセージが表示される
各メソッドによってアイコンの表示が異なるログメッセージが表示される

なお、この例では簡易的にConsoleパネルで各種メソッドを直接入力している。

DOMの操作

 ConsoleパネルからはDOM操作でページを直接編集できる。documentオブジェクトなどの基本的なJavaScript機能を操作できるだけでなく、jQuery構文も利用できるようになっている。次の画面は実際にjQueryを使って「masterNavigation」というHTML要素のテキストを更新している例だ。

documentオブジェクトの操作だけでなく、jQuery構文でさまざまなオブジェクトを扱える。DOMを操作して内容を変更することもできる
documentオブジェクトの操作だけでなく、jQuery構文でさまざまなオブジェクトを扱える。DOMを操作して内容を変更することもできる

 このようにConsoleパネルから直接、DOMを操作できるため、例えばテストなどで、繰り返し同じ操作をする場合などに非常に便利だ。

オブジェクトの内容を確認

 JavaScriptで作成されたオブジェクト(変数)の中身は、直接、変数名を入力することで確認できる。次の画面では「s」という変数を入力してところ。

変数名を入力することで、オブジェクトの中身を確認できる。ここでは「s」という変数の中身が階層で表示されている

 このように変数の中身が階層で表示されるので、状態を確認するのに非常に便利だ。もちろん、値の変更も可能なため、デバッグにも役に立つだろう。

時間の計測

 JavaScriptコードの処理に時間がかかっていて、その箇所の詳細を追うためにストップウォッチ(=実行時間を計測する機能)を使いたいことも多いだろう。もちろん、そのためのメソッドが用意されている。恐らくインタラクティブに入力することは少ないと思うが、次の画面の例では簡易的に入力することにする。

グループ化して処理時間を出力できる(各メソッドの意味は以下の本文に記述する)
グループ化して処理時間を出力できる(各メソッドの意味は以下の本文に記述する)

 「console.group()」~「console.groupEnd()」でグループ化して、出力結果をまとめて表示できる。なお、groupメソッドは、タイマー以外の目的でも使用できる。

 「console.time()」~「console.timeEnd()」で、時間を計測できる。このとき、timeメソッドの引数にラベルを指定することで、複数の時間を計測できるようになるため、ネスト構造での計測も可能になっている(この例では「重い処理」と「軽い処理」の2つの時間をネスト構造で計測している)。

 パネルとしてはこれで全てだが、もう1つ便利な機能を紹介しよう。

▲パネルの一覧に戻る

[Overrides]設定

 ブラウザーごとに振る舞いを変えているサイトや、モバイルデバイスでは異なる見た目になるように作っているサイトのテストを、Chromeだけでできるようにする機能がある。具体的には次の画面のように、右下のギアマークの[Settings]アイコンから[Overrides]タブを開く。

Developer Toolsの右下にあるギアアイコンをクリック

Developer Toolsの右下にあるギアアイコンをクリック

[Settings]ダイアログの[Overrides]タブをクリック

 Overrides設定を有効にするには、[Enable]にチェックを付ける必要がある(次の画面)。

[Enable]をチェックすることで、Overrides設定を有効にできる
[Enable]をチェックすることで、Overrides設定を有効にできる

ユーザー・エージェント文字列

 では、まずユーザー・エージェント文字列の変更から見ていこう。

 [Overrides]タブ内の[User Agent]をチェックすると、次の画面に示すように、ドロップダウンからユーザー・エージェントを選択できるようになる。

[User Agent]をチェックするとユーザー・エージェントを選択できる

 Internet ExplorerやFirefoxなどのPCブラウザーだけでなく、iPhoneやBlackBerry、Androidなどのスマートフォンを選択することもできる。残念ながら、日本特有のいわゆるガラケーはリストにないが、「Other」を選択するとユーザー・エージェント文字列を入力できるようになるため、カスタムのユーザー・エージェント文字列も可能だ。

 ここでは、[User Agent]として「iPhone - iOS 6」を選択して、@ITを開いてみよう。@ITは、ユーザー・エージェントによってレスポンスを変えているため、スマートフォン向けのサイトが返ってくることが分かる(次の画面)。

[User Agent]に「iOS 6」を選択すると、スマートフォン向けサイトが表示される

画面サイズ

 次にモバイルデバイスのサイズに合わせた表示を確認してみよう。

Device metrics

 [Device metrics]は、画面解像度をシミュレートできる機能だ。

[Device metrics]をチェックすると、画面解像度(Screen resolution)やフォント・サイズ(Font scale factor)を入力できるようになる
  • 1画面解像度。
  • 2解像度の縦横を入れ替え。

 ここで画面解像度を指定すると、ウィンドウの中で設定されたサイズに表示されるようになる(以下の画面で、右上に表示されている赤文字で黒背景の領域のこと)。縦横を入れ替えるとデバイスを横向きにしたときの表示を確認できる。

モバイルデバイスの解像度での表示確認(上)と、縦横を入れ替えてデバイスを横向きにしたときの表示確認(下)
Font scale factor

 [Font scale factor]は、画像はそのままで、テキストのフォント・サイズだけを変更する機能だ。モバイルによっては、フォントがPCよりも大きいこともあるため、テキストの倍率を切り替えて表示を確認できる。次の画面では、フォント・サイズを1.5倍にしている例だ。

[Font scale factor]欄に「1.5」を入力

[Font scale factor]欄に「1.5」を入力

フォントの倍率(Font scale factor)を1.5(倍)に設定して表示したところ

位置情報

 [Override Geolocation]をチェックすると、緯度・経度を入力して、現在位置を使用するアプリケーションをテストできる(次の画面)。

[Override Geolocation]をチェックして、緯度・経度を設定したため、現在地に富士山が表示されている

 このように実際にその場に行かなくても位置情報を使用するアプリケーションをテストできる。また[Emulate position unavailable]をチェックすることで、逆に位置情報を取得できないデバイスの動作も確認できる。

デバイスの方向(Device Orientation)

 [Override Device Orientation]にチェックすると、デバイスの傾きを指定できる(次の画面)。

デバイスの向きを指定して傾きをテストできる

 デバイスの傾きを使用するアプリも、この機能を使ってテストできる。

タッチ

 [Emulate touch events]は、マウスでタッチ・イベントをテストするための機能だ。これをチェックしてタッチ・イベントに対応したページを操作すると、タッチ非対応のデバイスでもタッチ操作をテストできるようになる。次の画面は実際にこの機能を使って、マウス操作で、タッチ・イベントをエミュレーションしている例だ。

[Emulate touch events]をチェックして、タッチ対応のサイトでクリックすると、タッチ・イベントを確認できる

 タッチ対応のデバイスが用意できない場合には、非常に有益だ。

CSSメディア

 [Emulate CSS media]は、CSSメディアによって表示内容を切り替えるWebページに対して、各メディアのときの表示内容を確認するための機能だ。次の画面では、CSSメディアを「print」(=印刷用)にしたときの表示内容を確認している。

[Emulate CSS media]をチェックすると、メディアの種類を切り替えて表示を確認できる

 ほとんどの場合は、「print」時の表示内容を確認するために利用することになるだろう。印刷プレビューなどの操作をすることなく確認できるので便利だ。CSSやHTMLのコードを編集して、リフレッシュするだけで出力内容を確認できるため、コーディングの手間がかなり省ける。

まとめ

 Chromeデベロッパー・ツールについてパネルごとに説明してきたが、Webアプリのデバッグやチューニングに非常に役立つことがご理解いただけたのではないだろうか。ChromeのDeveloper Toolsは機能が非常に豊富なため、記事で全てを説明するのは非常に難しい。そこでWeb開発でよく使う、特に使える主要機能に絞って、スクリーンキャプチャ中心で簡潔に機能を紹介した。本稿がWeb開発者の一助になれば幸いである。

イベント情報(メディアスポンサー)

Twitterでつぶやこう!


Build Insider賛同企業・団体

Build Insiderは、以下の企業・団体の支援を受けて活動しています。

プラチナレベル

  • 株式会社グラニ
  • 日本マイクロソフト株式会社

ゴールドレベル

  • 株式会社セカンドファクトリー
  • 株式会社ネクストスケープ
  • グレープシティ株式会社