5-5. よくあるエラーと解決方法
更新日:2025年12月7日
JavaScriptとPHPの開発でよく遭遇するエラーと、その解決方法を紹介します。 エラーメッセージの読み方と、効果的なデバッグ方法を身につけましょう。
JavaScriptのよくあるエラー
1. Uncaught TypeError: Cannot read property 'xxx' of null
// ❌ エラーの例
const element = document.getElementById('myElement');
element.innerHTML = 'Hello'; // elementがnullの場合エラー
// ✅ 解決方法
const element = document.getElementById('myElement');
if (element) {
element.innerHTML = 'Hello';
} else {
console.error('要素が見つかりません');
}
原因:存在しない要素にアクセスしようとした
対策:要素の存在確認を行う、IDのスペルミスを確認
2. Uncaught ReferenceError: xxx is not defined
// ❌ エラーの例
console.log(myVariable); // 変数が定義されていない
// ✅ 解決方法
let myVariable = 'Hello';
console.log(myVariable);
原因:変数が定義される前に使用した、スコープ外の変数を参照
対策:変数の宣言位置を確認、スコープを確認
3. Uncaught SyntaxError: Unexpected token
// ❌ エラーの例
const data = {
name: 'Test',
value: 100, // 最後のカンマに注意(古いブラウザでエラー)
}
// ✅ 解決方法
const data = {
name: 'Test',
value: 100
};
原因:構文エラー(括弧の不一致、カンマの位置など)
対策:エディタの構文チェック機能を使用、括弧の対応を確認
4. CORS Policy Error
// ❌ エラーの例
fetch('https://other-domain.com/api/data')
.then(response => response.json())
// CORSエラーが発生
// ✅ 解決方法(PHP側で対応)
<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST');
header('Access-Control-Allow-Headers: Content-Type');
?>
原因:クロスオリジンリクエストが許可されていない
対策:サーバー側でCORSヘッダーを設定
PHPのよくあるエラー
1. Parse error: syntax error, unexpected...
// ❌ エラーの例
<?php
if ($condition) {
echo "Hello"
} // セミコロンがない
?>
// ✅ 解決方法
<?php
if ($condition) {
echo "Hello";
}
?>
原因:構文エラー(セミコロン忘れ、括弧の不一致)
対策:エラーメッセージの行番号を確認、その前の行もチェック
2. Fatal error: Call to undefined function
// ❌ エラーの例
<?php
$result = myFunction(); // 関数が定義されていない
?>
// ✅ 解決方法
<?php
function myFunction() {
return "Hello";
}
$result = myFunction();
?>
原因:存在しない関数を呼び出した
対策:関数名のスペルミスを確認、必要なファイルがincludeされているか確認
3. Warning: Cannot modify header information
// ❌ エラーの例
<?php
echo "Hello";
header('Location: page.php'); // 出力後にheader()を実行
?>
// ✅ 解決方法
<?php
header('Location: page.php');
exit;
?>
原因:出力後にheader()を実行しようとした
対策:header()は最初に実行、出力バッファリングを使用
4. Notice: Undefined index
// ❌ エラーの例
<?php
$name = $_POST['name']; // キーが存在しない場合エラー
?>
// ✅ 解決方法
<?php
$name = $_POST['name'] ?? ''; // Null合体演算子
// または
$name = isset($_POST['name']) ? $_POST['name'] : '';
?>
原因:存在しない配列キーにアクセス
対策:isset()で確認、Null合体演算子を使用
データベース関連のエラー
1. SQLSTATE[HY000] [1045] Access denied
// ❌ エラーの例
$pdo = new PDO('mysql:host=localhost;dbname=test', 'wrong_user', 'wrong_pass');
// ✅ 解決方法
$pdo = new PDO('mysql:host=localhost;dbname=test', 'correct_user', 'correct_pass');
原因:データベースの認証情報が間違っている
対策:ユーザー名、パスワード、ホスト名を確認
2. SQLSTATE[42S22]: Column not found
// ❌ エラーの例
SELECT namee FROM users -- カラム名のスペルミス
// ✅ 解決方法
SELECT name FROM users
原因:存在しないカラム名を指定
対策:テーブル構造を確認、カラム名のスペルを確認
デバッグテクニック
JavaScript
// 1. console.log()で変数の内容を確認
console.log('変数の値:', myVariable);
// 2. console.table()で配列やオブジェクトを見やすく表示
console.table(users);
// 3. debuggerステートメントで実行を一時停止
function myFunction() {
debugger; // ここで実行が止まる
// 処理...
}
// 4. try-catchでエラーをキャッチ
try {
// エラーが起きそうな処理
riskyOperation();
} catch (error) {
console.error('エラー詳細:', error.message);
console.error('スタックトレース:', error.stack);
}
PHP
<?php
// 1. var_dump()で変数の詳細を表示
var_dump($variable);
// 2. print_r()で配列を見やすく表示
print_r($array);
// 3. error_log()でログファイルに出力
error_log("デバッグ情報: " . print_r($data, true));
// 4. try-catchでエラーをキャッチ
try {
$pdo->query($sql);
} catch (PDOException $e) {
error_log("データベースエラー: " . $e->getMessage());
}
// 5. エラー表示設定(開発環境のみ)
ini_set('display_errors', 1);
error_reporting(E_ALL);
?>
ブラウザの開発者ツール活用法
| タブ | 用途 | 主な機能 |
|---|---|---|
| Console | ログ確認、コード実行 | エラーメッセージ表示、JavaScriptの実行 |
| Network | 通信の確認 | Ajaxリクエスト、レスポンスの内容確認 |
| Sources | デバッグ | ブレークポイント設定、ステップ実行 |
| Elements | HTML/CSS確認 | DOM構造の確認、スタイルの変更 |
エラー解決のフローチャート
- エラーメッセージを読む
- どこでエラーが発生したか(ファイル名、行番号)
- 何が問題か(エラーの種類)
- 該当箇所を確認
- 構文エラーがないか
- 変数名のスペルミスがないか
- 前後のコードを確認
- エラー行の前の処理は正しいか
- 必要な変数は定義されているか
- デバッグ出力を追加
- console.log()やvar_dump()で変数の値を確認
- 処理の流れを追跡
- 検索して調べる
- エラーメッセージで検索
- 公式ドキュメントを確認
まとめ
エラーは開発の一部です。エラーメッセージを恐れず、落ち着いて原因を特定しましょう。 デバッグツールを効果的に使い、エラーログを活用することで、 問題を素早く解決できるようになります。
この講座で学んだ知識を活かして、実際のプロジェクトに挑戦してください。 最初は小さなアプリケーションから始めて、徐々に複雑なものに取り組んでいきましょう。
本コンテンツは2025年12月時点の情報に基づいて作成されている。最新の情報については公式ドキュメントを参照されたい。