console.log()が読みにくくなるので、ちょっと改善してみた

こんにちは、さるまりんです 🐒🔧

JavaScriptで開発していると、ほぼ毎日のように書いているもの。

console.log()

とりあえず出す。
とりあえず見る。
とりあえず安心する。

でもある日、ふと思いました。

「……これ、読みにくくない?」

今回は、
console.log()が読みにくくなっていた話と、ちょっとした改善
についてまとめてみます。

とりあえず stringify していた

よくやっていたのがこれです。

console.log(JSON.stringify(user))

ちゃんと全部出るし、
「文字列になっている=安全そう」な気もします。

でもこれ、だんだんツラくなります。

① 展開できない

console.log(user)

なら、DevToolsでオブジェクトを開いて
中身をパカパカ展開できます。

……と言いたいところですが、
展開できないケースもあります。

オブジェクト内にメソッドが多い場合、
値よりも関数がずらっと並んでしまうこともあります。

それでも、

console.log(JSON.stringify(user))

だと、ただの文字列が出力されるだけです。

  • キーをクリックできない
  • ネスト構造が見づらい
  • 差分が追いにくい

“見えているようで、実は見えていない”
状態でした。

② 循環参照で落ちる

Vueでありがちです。

const a = {}
a.self = a

console.log(JSON.stringify(a))
// TypeError: Converting circular structure to JSON

リアクティブオブジェクトは、
内部で循環参照を持つことがあります。

「ログ出したいだけなのにエラー」

これはちょっと悲しい。

③ 差分がわかりにくい

文字列になると、

{"id":1,"name":"Taro","active":true}

一見わかりやすいけれど、

  • どこが変わったのか
  • どのキーが増えたのか

目で追うのが地味にしんどい。

ファイルに落として diff をかけるのも面倒ですよね。

DevToolsのオブジェクト表示のほうが
実はずっと優秀です。

やっぱり DevTools はそのために用意されているもの。
ちゃんと便利なんですよね。

じゃあどうする?

① 基本はそのまま出す

console.log(user)

これだけで十分なことが多いです。

DevToolsの機能をちゃんと信頼する。

② 見やすくしたいときは整形する

どうしても文字列で見たいなら:

console.log(JSON.stringify(user, null, 2))

第2引数は replacer、
第3引数はインデント。

これで読みやすくなります。

ただしこれは
ログ保存や通信確認向けです。

③ 配列なら console.table()

これ、かなり便利です。

console.table(users)

配列のオブジェクトが
テーブル形式で出ます。

  • id
  • name
  • active

みたいな構造が一発で見える。

「なんで今まで使ってなかったんだろう」
と思いました。

④ ラベルを付ける

地味ですが効きます。

console.log("user:", user)
console.log("filter state:", filter)

あとでログが大量に並んだとき、
かなり助かります。

⑤ groupでまとめる

console.group("API response")
console.log("status:", status)
console.log("data:", data)
console.groupEnd()

コンソールが折りたためる。

これ、思ったより便利で気持ちいいです。

ちょっとした設計の話

今回あらためて思ったのは、

ログも設計なんだな

ということ。

  • とりあえず出す
  • stringifyして安心する
  • 増えて読めなくなる

この流れ、何度もやっていました。

console.logは悪くない。
でも「どう出すか」は、少し考えてもいい。

デバッグしやすいログは、
未来の自分を助けます。

まとめ

今回の気づき:

  • stringifyは万能じゃない
  • まずはオブジェクトのまま出す
  • console.tableは最高
  • groupは整理に効く
  • ログも設計

忙しいときほど、
ちょっとした改善が効いてきます。

console.logが読みにくいな…と思ったら、
少しだけ見直してみると、気持ちが楽になります。

読んでくださってありがとうございました。

それではまた 🐒🔧