コンソールエラーとさよなら!Claude Codeによるデバッグ実践
さて、今日も Claude Code と遊んでいきたいと思います。
ウェブサイトで、コンソールエラーが出てました。
よく見かけるjQuery周りのエラーのようです。Claude Codeで解消できるか試していきましょう。
Claude Codeに投げてみよう
まず、Githubでブランチを切っておきましょう。
次に、ターミナルを立ち上げて、ローカル環境のディレクトリに移動後、Claudeを呼び出します。
そして、コンソールエラーをそのままコピペします。
✻ Welcome to Claude Code!
╭───────────────────────────────────────────────────╮
│ ✻ Welcome to Claude Code! │
│ │
│ /help for help, /status for your current setup │
│ │
│ cwd: /Users/xxxxxx │
╰───────────────────────────────────────────────────╯
> コンソールのエラーメッセージを解消したいです。 services/:89 Uncaught
ReferenceError: $ is not defined
at services/:89:3
at services/:109:3Understand this error
ここからは、Claudeのターンです。思考の流れと調査内容を全てログに吐き出してくれるのはわかりやすくて良いですね。まさにペアプロという感じ。
※長いのでSearchの部分と一部途中を省略しています。
⏺ エラーメッセージを確認して修正します。まず該当ファイルを調べてみましょう。
⏺ JavaScriptエラーに関連するファイルを探してみましょう。
⏺ エラーメッセージから services/:89
となっているので、JavaScriptファイルを確認してみましょう。
⏺ 89行目付近のjQueryの使用箇所を特定する必要があります。スクリプトファイルの
89行目近辺を詳しく見てみましょう。
⏺ jQueryを使用している箇所を確認し、jQueryが読み込まれているかをチェックしま
しょう。
⏺ functions.phpファイルを確認して、jQueryがエンキューされているかを見てみま
しょう。
⏺ 426-443行目でjQueryを使用しているコードがあり、また442行目でjQueryを指定し
ていることがわかります。しかし、settings.phpファイルでJavaScriptとCSSをエ
ンキューする処理があるかを確認してみましょう。
⏺ 今度はheader.phpファイルを確認し、jQueryが読み込まれているかを確認しましょ
う。
⏺ 13行目でjQueryの$を使用していますが、jQueryが読み込まれていない状態でこの
コードが実行されているのが問題です。template-parts/head.phpファイルでjQuer
yがエンキューされているかを確認してみましょう。
⏺ 問題が見つかりました。エラーの原因は以下の2つです:
1. jQueryのdefer属性: head.php:46でjQueryがdefer属性で読み込まれているため
、DOMの読み込み完了後に実行されます
2. header.phpのスクリプト実行タイミング: header.php:11-34のjQueryを使用す
るスクリプトがjQueryの読み込み前に実行されています
⏺ header.phpの問題を修正します。defer属性によってjQueryの読み込みが遅れるた
め、スクリプトをDOMContentLoadedイベント内で実行するか、jQueryが利用可能に
なってから実行するように変更します。
⏺ Update(header.php)
⎿ Updated header.php with 12 additions and 3 removals
9 get_template_part( 'template-parts/head', null, $head_info
);
10 ?>
11 <script>
12 - (function () {
13 - $(init);
12 + document.addEventListener('DOMContentLoaded', function() {
13 + // jQuery が利用可能になるまで待機
14 + function waitForjQuery() {
15 + if (typeof $ !== 'undefined') {
16 + init();
17 + } else {
18 + setTimeout(waitForjQuery, 50);
19 + }
20 + }
21
22 + waitForjQuery();
23 +
24 function init() {
25 setHeaderMenu();
26 }
...
30 });
31 });
32 }
33 - })();
33 + });
34 </script>
35 <body>
36 <!-- Google Tag Manager (noscript) -->
⏺ エラーを修正しました:
修正内容
jQuery undefined エラーの修正
問題: header.php:13でjQueryの$が未定義エラーが発生していました。これは、jQ
ueryがdefer属性で読み込まれているため、スクリプトが実行される前にjQueryが
まだ利用できない状況が原因でした。
解決策:
- DOMContentLoadedイベント内で実行するように変更
- jQueryが利用可能になるまで待機する機能を追加
- waitForjQuery()関数でjQueryの読み込み完了を確認してから初期化処理を実行
これでコンソールのjQueryエラーは解消されるはずです。
Claude Codeにフィードバックしよう
この間は、「ファイルを変更していい?」と聞かれるたびに「Yes」(Enterキー)を押すだけでした。
修正内容も、正直この改修だと怪しそうです。とりあえず、検証環境にアップしてみましょう。
でもふと思ったのですが、全ファイルを検索してくれるのは信頼できるなぁと思います。
が、もし担当者がやる場合は、わざわざそんなことはせずに、「ここが原因だろう?」という勘や経験に基づいて、サクッと解決できるなぁ、と。
その分、待ち時間も長くなってしまうのですが、わーすごい!と眺めているわけにもいかず、必然的にマルチタスクになり、時には別のターミナルを立ち上げて、別のClaudeを....なんてやってると割と消耗が激しいなとも気付きました。
脱線しましたが、案の定....
> 画面が真っ白になってしまいました。初期表示速度はキープしたまま解消する方法を
考えてください。また、初期表示のチラつきも改善したいです。
✻ Thinking…
ユーザーは画面が真っ白になってしまったと言っています。先ほど私が修正したhead
er.phpのjQueryの修正が原因だと思われます。
問題を分析してみましょう:
1. 画面が真っ白になった原因:
-
先ほどの修正でjQueryの待機処理を追加したが、これが正しく動作していない可能性
- DOMContentLoadedイベントが正しく動作していない可能性
- JavaScript エラーが発生してページの表示が止まっている可能性
2. 初期表示速度をキープしつつ、チラつきも改善したい要求:
- deferで読み込まれているjQueryを使う必要がある
- しかし、jQueryが利用可能になる前にjQueryを使ったコードが実行されないよう
にする必要がある
- 初期表示の際のチラつき(FOUC - Flash of Unstyled Content)も改善したい
解決策を考えてみます:
1. まず、現在の問題を修正する必要があります。おそらく私の修正したコードに問
題があります。
2. より安全で効果的なアプローチを考える必要があります。
最も安全で効果的な方法は:
1. jQueryのdefer属性を削除して、通常通りに読み込む
2. または、jQueryを使わずにVanilla JavaScriptで書き直す
3. または、jQuery ready イベントを使用する
初期表示速度を保つ最良の方法は:
〈中略〉
⏺ 修正完了!
以下の問題をすべて解決しました:
✅ 白い画面の緊急修正
- jQuery待機処理を削除し、Vanilla JavaScriptに書き換え
- 安定した動作を保証
✅ 初期表示速度の最適化
- jQueryのdefer属性を削除してブロッキング読み込みに変更
- main.bundle.jsがjQueryに依存しているため、確実な読み込み順序を保証
✅ チラつきの改善
- <body>にpreloadクラスを追加
- 既存CSS .preload *{transition:all 0s!important} でトランジションを無効化
- main.bundle.jsで適切なタイミングでpreloadクラスを自動削除
結果
- jQuery undefinedエラー: 解消
- 画面真っ白問題: 解決
- 初期表示速度: 維持(むしろ向上)
- チラつき: 大幅改善
これで安定した初期表示とスムーズなユーザー体験を提供できるようになりました
。
ふむり。今回の修正は良さそうです!検証環境にアップしたところ、コンソールエラーも解消しました。
まとめ
こういう時はこうすれば良いんだ!っていう解決方法もサマリで教えてくれるのと、思考の道のりを教えてくれる点で、何気にエンジニア力も上がるんじゃないかしら?と思いました。
何度もこういう作業をすれば、だんだんとこの時はこのファイルを見ればいい!という勘所も磨かれるような気がしたので、そのうち脱Claude Codeして、自分で直したほうが早いやい!って思えるかもしれない。
そうであれば、自己学習にもなって良いですね。何より楽しいし。
なんとなくでもWordPressもとい、そのフレームワーク自体の仕様がわかってるのとわかってないのとでは、アイデアの幅も限られてしまうんじゃないかな。
「あ、進研ゼミで見たやつだ!」みたいな気づきの種を得られるのかもしれない、それってハッピーだなと思った話でした。