括弧の閉じ忘れで出る SyntaxError の原因と直し方
丸括弧・波括弧・角括弧の閉じ忘れで出る構文エラーです。Node.jsはファイルの終わりまで読んでから対応が崩れていることに気づくため、エラー行が原因の行と一致しないことがあります。
エラーメッセージの読み方
main.js:2
main.js- ファイル名
2- 行番号 — Node.jsが構文解析を諦めた位置
SyntaxError- エラークラス — 実行前の構文チェックで検出されました
missing ) after argument list- 内容 — 期待していたもの、または受け付けられなかったもの
このエラーが出る典型パターン
パターン1
1 let message = "Hello"; 2 console.log(message ^
console.logの呼び出しを閉じる丸括弧が足りません。複数行にまたがる呼び出しでは見落としやすいミスです。
直し方: (空) を ); にします。
パターン2
1 function greet(name) { 2 console.log("Hi " + name); 3 ^ 4 greet("Al");
greet関数の閉じ波括弧が足りません。Node.jsはファイルの終わりまで読んでから、対応が崩れていることに気づきます。
直し方: (空) を } にします。
パターン3
1 const nums = [1, 2, 3 ^ 2 console.log(nums.length);
配列リテラルの閉じ角括弧が足りません。次の行のconsoleまで1つの式として読み込もうとして構文エラーになります。
直し方: (空) を ] にします。
パターン4
1 const obj = { a: 1 ^ 2 console.log(obj);
オブジェクトリテラルの閉じ波括弧が足りません。プロパティを1つ書いただけでは、どこまでが値かNode.jsは判断できません。
直し方: (空) を }; にします。
パターン5
1 function greet(name { ^ 2 console.log("Hi " + name); 3 } 4 greet("Al");
引数リストの閉じ丸括弧が足りません。関数の中身を書く波括弧の前に、引数の括弧を閉じる必要があります。
直し方: (空) を ) にします。
よくある誤解
エラーが指す行を直しても直らないことがあります。実際の閉じ忘れはもっと上の行にあり、Node.jsはファイル末尾(または次の予期しないトークン)に達するまで検出できません。
実務での勘所
構文エラーがあると、JavaScriptエンジンはファイルを実行する前に全体をひととおり解析(パース)し、そこで文法として成立しないと分かった時点で実行そのものを一切始めません。そのため、閉じ忘れた括弧より前に書いたconsole.logがあっても、そこまでは実行されるだろうという予想に反して1行も出力されないまま終了します。「上から順に実行されるはず」という感覚は、構文エラーが絡む場面では成り立ちません。