JavaScript

Learn how to find and fix problems in your JavaScript by checking the code step by step with Chrome DevTools.

JavaScriptが動かない時の確認方法

プログラムがうまく動かないときは「バグ」があるかもしれません。バグを見つけて直す作業が「デバッグ」です。Chrome などのブラウザには、この作業を手伝う「デバッガ」という便利な道具が用意されています。ここでは ブレークポイントで止める → 一行ずつ進める(ステップ実行) → 変数の中身をコンソールで確かめる という最短ルートで、基本の流れを身につけます。

プログラムが意図した通りに動かない場合に、デバッグという作業を行います。デバッグとは、バグという「プログラムの記述や動作の間違い」を見つけ、それらを排除する作業のことです。デバッグ作業では、一般的にプログラムの実行を一時停止しながら、値や挙動が意図したものになっているかを確認します。

ここでは、Chromeの開発ツールのデバッガ(デバッグ作業を支援する機能)の使用方法について簡単に見てみます。

デバッグの練習用コード

HTML

<script>
	let a = 1;
	let b = 2;
	console.log(a+b);
</script>

このコードを記述したページで開発ツール(Ctrl+Shift+I, Console API参照)を開き、ソース(Sources)パネルを選択して、左サイドバーに表示されているファイル名、ここでは「how_to_debug_sample.html」を選択すると下図のようになります。

>> Sample Page

ソースパネルのサンプル画像

scriptタグに記述されたコードは、ブラウザで HTMLを読み込んだ時点で実行されるため、開発ツールで画面を開いた時点ですべての処理がすでに完了しています。

実行タイミングを調整したい場合は、<body> の末尾に書くか、<script defer> を使うと、ページ読み込み後に確実に停止できます。

コードの停止と画面の更新

上記のコードの実行を一時停止して、コードが実行される過程を見てみます。

ブレークポイントを設置したサンプル画像

この画像のように、2行目の行番号の左側をクリックしてブレークポイントを設置してみます。ブレークポイントを設置すると、その地点でコードの実行が一時停止することになります。

この状態でブラウザ画面を更新すると、コードの実行が2行目で一時停止し、コードが停止中の行の背景色が薄い青色で表示されます。

2行目で一時停止した状態のサンプル画像

この一時停止した状態では、まだ2行目の let a = 1; は実行されていません。そこで、右上にあるデバッガの「Step Over」ボタンを押すと、コードの実行が1行分だけ進みます。

これで、2行目の let a = 1; が実行されたため、変数a にはすでに 1 が代入されています。そのため、この状態では、コンソールで a と入力して変数a の中身を確認すると、その値の 1 がコンソール上に表示されます。なお、画面下部のコンソールを表示するには、開発ツールを開いた状態で「Esc」キーを押します。

このように、デバッガを使って、コードの実行状況を確認できます。また、「Step Over」を含めて4つのボタンを使用できるため、ぜひ活用してみてください。

Resume
次のブレークポイントまで処理を進める。
Step Over
処理を1行進める。
Step In
これから実行する処理が関数である場合、その関数の中に入り、処理を進める。
Step Out
実行中の関数から抜けて、処理を進める。

熟練の開発者でも、複雑なコードの処理を確認するときにはデバッガを使います。意図した通りにコードが動かないときには、コンソールパネルやソースパネルを積極的に使ってみてください。

よくあるエラー早見表

Uncaught ReferenceError: x is not defined
宣言していない変数を使っています。let または const で変数を宣言してください。
Unexpected token
構文ミス(カンマや括弧の抜けなど)が原因です。該当行の直前・直後も含めて見直してください。
Cannot read properties of undefined
未定義の値にプロパティアクセスしています。値が入っているか console.log で確認してからアクセスしましょう。
ブレークポイントで止まらない
スクリプトが読み込みと同時に走っています。defer 属性を追加するか、<body> 末尾に移動してから再読込してください。
コンソールに何も表示されない
console.log が呼ばれていない、または条件分岐で通っていない可能性があります。ログ位置を見直してください。

よくある質問(FAQ)

Q. デバッグって何をする作業ですか?
A. プログラムの中にある「間違い(バグ)」を探して直す作業のことです。
Q. ブレークポイントを置いても止まらないのはなぜ?
A. ページを再読み込みする前にブレークポイントを設定してください。スクリプトがすぐに実行される場合は、defer 属性を使うと確実に止められます。
Q. コンソールで変数の中身を見るには?
A. 一時停止中に開発ツール下部のコンソールで変数名を入力すれば確認できます。
Q. デバッグ中にコードを1行ずつ進めるには?
A. 「Step Over」ボタンを押すと1行ずつ進められます。