みなさんこんにちは、JavaScriptを使い動的なWebサイトを構築していますでしょうか。
本日はJavaScriptの開発時に役立つ、Console API メソッドを紹介します。
こちらの記事はMdNデザインと共同で進めている記事です。
MdNデザインのサイトも合わせまして、よろしくお願いいたします。
「Webサイトからお問い合わせが来ない…」とお悩みの方必見!
当サイトのノウハウを詰め込んだ『Web集客の無料ガイド』をご提供
Console API デモページ
Console API とは
JavaScriptを開発したことがある方は、一度は「console.log( );」メソッドを見たことがあるのではないでしょうか。
<script> console.log('コンソール画面に文字を表示'); </script>
結果:
console.log()は、コンソール画面にメッセージを表示するためのメソッドです。
コンソール画面の出し方
Chromeブラウザで、画面上を右クリックし「検証」をクリックします。
デベロッパーツール画面が表示されるので「Console」をクリックします。
コンソール画面には、Console APIから出力しているメッセージもあれば、JavaScriptからのエラーも表示されます。
このコンソール画面に表示させているメソッド「console.XXX()」がConsole API です。
JavaScrirptの開発時には欠かせないAPIで、よく使われているconsole.log() の他にも様々な種類のConsole APIが存在します。
Console API メソッド
Console APIは、「console.log()」の他にFirefoxのみで使えるものなど合わせて20種類あります。
今回はConsole Standardに掲載されている情報を参考に17種類を紹介します。
ロギング メソッド
- assert(condition, ...data)
- clear()
- count(label)
- debug(...data)
- error(...data)
- info(...data)
- log(...data)
- table(tabularData, properties)
- trace(...data)
- warn(...data)
- dir(item, options)
- dirxml(...data)
グルーピングメソッド
タイムメソッド
コンソール画面へのロギング(オススメ)
<script> console.error('エラー表示'); console.warn('警告表示'); console.log('ログ表示'); console.debug('デバッグ表示'); //非推奨。Chromeでは表示されない console.info('Info表示'); </script>
Chrome結果:
Firefox結果:
Chrome、Firefoxで多少見え方が違います。console.debug()は、Chromeで表示されません。
Console Assert
変数には様々な値を代入することができ、その1つにブール値(Boolean)を入れることもできます。
Console Assertは、ブール値(Boolean)を確認し、falseの場合、コンソール画面に出力します。
<script> var boolean = false; var boolean1 = true; console.assert(boolean, "falseなので出力"); console.assert(boolean1, "出力されません"); </script>
結果:
また、下記のように整数で判定することもできます。
<script> var boolean = 0; var boolean1 = 1; console.assert(boolean, "falseなので出力"); console.assert(boolean1, "出力されません"); </script>
Console Clear
「console.clear();」は、コンソール画面をクリアします。
結果:
Console Count(オススメ)
ループや関数内で、指定されているラベルが何回呼び出されかカウントします。
<script> // 配列を指定 Things = new Array('りんご','ごりら','らっぱ'); // 配列の個数分ループ for (var i = Things.length - 1; i >= 0; i--) { console.count('ラベル1'); } console.count('ラベル2'); console.count(); //ラベルなし </script>
結果:
Console Table
配列や、オブジェクトを表形式に出力。
var member = new Object(); member[0] = ({ 'Name':'Masayuki Abe', 'age':39, }); member[1] = ({ 'Name':'Nagano Eiji', 'age':37, }); member[2] = ({ 'Name':'Maekawa Masayuki', 'age':43, }); console.table(member);
結果:
Console Dir(オススメ)
オブジェクトのプロパティやメソッド、配列などを階層表示で確認できます。
<script> // オブジェクトの定義 var fruits_color = new Object(); fruits_color = { red:"いちご", yellow:"バナナ", pink:"もも", extra:'', change_fruits:function(fruits_name){ this.red = fruits_name; } } fruits_color.extra = { purple:"ぶどう" } console.dir(fruits_color); // その他にもブラウザそのものである、 // windowオブジェクトを表示することもできる console.dir(window); </script>
結果:
Console dirxml
DOMエレメントをツリー構造で表示します。
<body> <h1 id="test"> <a href=""><span>JavaScriptのデバッグ</span></a> </h1> <script> var title_content = document.getElementById('test'); console.dirxml(title_content); </script> </body>
結果:
Console Trace(オススメ)
console.trace() は、スタックトレースをコンソール画面に出力します。
スタックトレースとは、プログラムの実行過程を記録したものです。
説明だけだと分かり難いので例を見てみましょう。
下記コード例は、最初のif文で変数「hoge」がundefinedの場合、check_data関数でデータをチェック。その後、エラー判定されたら、error_log() 関数でエラーを記録するというプログラム例です。
var hoge; if(!hoge){ // hogeがundefinedの場合の処理 check_data(); } function check_data(){ // チェックをして、エラーだった場合 error_log('err-00001'); } function error_log(err) { // エラー処理 console.trace(err); }
上記例で、何かしらの処理でエラーが発生した場合にコンソールにエラー内容が出ますが、どこの処理を通ってerror_log関数に到達したか知りたいときもあります。
そのような場合に「console.trace()」を設置すると、処理の流れをみることができます。
結果:
さらにコンソール画面の「ファイル名:行数」をクリックすると、該当の処理を確認することもできます。
ログのグループ化
大量のログを出力する際に、ログをグループ化し、ラベルを付与することができます。
console.group() : 以降の出力を別のレベルにインデントする。(開いた状態で出力)
console.groupCollapsed() : 以降の出力を別のレベルにインデントする。(閉じた状態で出力)
console.groupEnd() : グループの終了
<script> // 配列を指定 Things = new Array('りんご','ごりら','らっぱ'); console.group('グループ1'); // 配列の個数分ループ for (var i = Things.length - 1; i >= 0; i--) { console.log(Things[i]); } console.groupEnd(); console.groupCollapsed('グループ2'); // 配列の個数分ループ for (var i = Things.length - 1; i >= 0; i--) { console.log(Things[i]); } console.groupEnd(); </script>
結果:
処理時間を計測
プログラムを書いていると、プログラムの実行時間が気になることがあります。
JavaScriptの処理時間は、console.time()を使うことで簡単に計測することができます。
console.time([timerName]) タイマースタート
console.timeEnd([timerName]) タイマーストップ
<script> console.time('Test1'); console.time('Test2'); Things = new Array('りんご','ごりら','らっぱ'); // 配列の個数分ループ for (var i = Things.length - 1; i >= 0; i--) { // } console.timeEnd('Test1'); console.timeEnd('Test2'); </script>
結果:
最後に
JavaScriptのデバッグに役立つConsole APIはいかがでしたでしょうか。
console.logの他にも多くのメソッドが用意されています。
開発時に筆者がよく使うメソッドは、log()、dir()、count()です。他にもtrace()なども便利そうですね。
開発時にConsole APIを使いロギングするのはバグなどを見つける有効な手段です。しかしconsole.log()は開いているブラウザ上でのロギングになるため、実運用に入った場合あまり意味を成しません。
そこでhttpリクエストを送る箇所や、複雑な処理を行う場合などtry cacheや、onerrorを使い、エラーがあった場合にファイル書き出しをしたり、Google Analyticsに記録したりすることで、エラー箇所を特定することもできます。