JavaScriptを用いたプログラミングにおいて、変数や関数の名前を自由に決めることは開発者の特権ですが、そこには決して破ってはならないルールが存在します。
その代表的なものが「予約語」の存在です。
予約語を正しく理解し、適切に識別子(変数名や関数名など)を命名することは、バグの混入を防ぎ、読みやすくメンテナンス性の高いコードを書くための第一歩となります。
本記事では、2026年現在のモダンなJavaScript開発において知っておくべき予約語の一覧と、エラーを未然に防ぐための命名ルール、そして実戦で役立つベストプラクティスについて詳しく解説します。
これからJavaScriptを学ぶ初心者の方はもちろん、最新の仕様を再確認したい中級者の方にとっても、堅牢なプログラムを書くための重要な指針となるでしょう。
JavaScriptにおける予約語の定義
JavaScriptの予約語とは、プログラミング言語としての構文や機能を定義するために、あらかじめ役割が決められている単語のことです。
これらの単語は、JavaScriptエンジンがコードを解析する際に特別な意味を持つものとして処理されるため、開発者が変数名、関数名、クラス名などの「識別子」として再利用することはできません。
もし予約語を変数名などに使用しようとすると、プログラムの実行前、あるいは解析段階でSyntaxError(構文エラー)が発生します。
これはプログラムが文法的に正しくないことを意味しており、アプリケーションそのものが動作しなくなる重大な問題です。
例えば、以下のようなコードはエラーとなります。
// 予約語である「if」を変数名として使用しようとした例
const if = "もしも";
// 実行結果:
// Uncaught SyntaxError: Unexpected token 'if'
このように、JavaScriptの言語仕様(ECMAScript)によって保護されている単語を把握しておくことは、スムーズな開発において不可欠です。
2026年版 JavaScript予約語一覧
JavaScriptの予約語は、大きく分けて「常に使用できないキーワード」「将来のために予約されている語」「特定のコンテキストでのみ制限される語」の3種類があります。
2026年時点での標準的な仕様に基づき、それぞれのカテゴリを整理して解説します。
常に識別子として使用できないキーワード
以下の単語は、どのような状況下でも変数名や関数名として使用することはできません。
これらはJavaScriptの基本的な制御構造やデータ型を定義するために使用されています。
| 予約語 | 役割の概要 |
|---|---|
await | 非同期処理の完了を待機する(async関数内などで使用) |
break | ループやswitch文を中断して抜ける |
case | switch文の中での条件分岐を指定する |
catch | 例外処理(try…catch)でエラーを捕捉する |
class | クラスを宣言する |
const | 再代入不可能な定数を宣言する |
continue | ループの現在の反復をスキップして次へ進む |
debugger | デバッガのブレークポイントを呼び出す |
default | switch文のデフォルト処理、またはモジュールのデフォルトエクスポート |
delete | オブジェクトのプロパティを削除する |
do | do…whileループを開始する |
else | if文の条件が偽の場合の処理を指定する |
export | モジュールから関数や変数を公開する |
extends | クラスを継承する |
false | 真偽値(ブール値)の「偽」を表すリテラル |
finally | 例外処理の最後に必ず実行されるブロックを指定する |
for | ループ処理(繰り返し)を開始する |
function | 関数を宣言する |
if | 条件分岐を開始する |
import | 他のモジュールから機能を読み込む |
in | プロパティの存在確認や、for…inループで使用する |
instanceof | オブジェクトが特定のクラスのインスタンスか判定する |
new | クラスのインスタンスを生成する |
null | 「値が存在しない」ことを表すリテラル |
return | 関数の実行を終了し、値を返す |
super | 親クラス(親コンストラクタ)を参照する |
switch | 多方向の条件分岐を開始する |
this | 現在の実行コンテキストを参照するキーワード |
throw | 意図的にエラー(例外)を発生させる |
true | 真偽値(ブール値)の「真」を表すリテラル |
try | 例外が発生する可能性のあるブロックを開始する |
typeof | データの型を確認する |
var | 変数を宣言する(古い形式) |
void | 式を評価してundefinedを返す |
while | 条件が真の間、ループを繰り返す |
with | スコープチェーンを拡張する(非推奨) |
yield | ジェネレータ関数の処理を一時停止・再開する |
将来のために予約されているキーワード
現在はJavaScriptの構文として特別な機能を持っていないものの、将来的な言語拡張のために確保されている単語です。
これらも識別子として使用することは避けるべきです。
- enum(列挙型)
以前の仕様では他にも多くの「将来の予約語」がありましたが、多くは現在の仕様に取り込まれたか、制限が緩和されました。
しかし、enumに関しては将来的に実装される可能性があるため、一貫して予約されています。
厳格モード(Strict Mode)で制限されるキーワード
JavaScriptには、より安全なコードを書くための実行モードである「厳格モード(Strict Mode)」が存在します。
2026年現在、多くのモジュールシステムやモダンなフレームワーク(React, Vue, Next.jsなど)はデフォルトでこの厳格モードが有効になっています。
厳格モードでは、以下の単語も識別子として使用することが禁止されます。
implementsinterfaceletpackageprivateprotectedpublicstatic
これらはJavaやTypeScriptなど、他の言語での「クラス」や「アクセス修飾子」に関連する概念です。
JavaScriptの将来のバージョンで同様の概念が強化される際、競合を避けるために予約されています。
変数・関数名の命名ルール(識別子の基本)
予約語を避けること以外にも、JavaScriptには識別子(名前)を付ける際の厳格なルールがあります。
これらのルールを守らないと、予約語でなくても構文エラーとなります。
1. 使用可能な文字
識別子に使用できるのは、以下の文字です。
- アルファベット(A-Z, a-z)
- 数字(0-9)
- アンダースコア(
\_) - ドル記号(
$)
Unicode文字(ひらがな、漢字など)も技術的には使用可能ですが、開発現場の混乱を避けるため、基本的には半角英数字と一部の記号のみを用いるのが通例です。
2. 先頭の文字に関する制限
識別子の最初の文字に数字を使うことはできません。
// 不正な例:数字から始まる
const 1stPlace = "Gold"; // SyntaxError
// 正しい例
const firstPlace = "Gold";
const _score = 100;
const $element = document.querySelector("#app");
3. 大文字と小文字の区別
JavaScriptは大文字と小文字を厳密に区別(Case-sensitive)します。
const userName = "Alice";
const username = "Bob";
// これらは全く別の変数として扱われます。
console.log(userName); // Alice
console.log(username); // Bob
予約語についても同様の性質がありますが、例えば For (先頭が大文字)は予約語ではありません。
しかし、非常に紛らわしいため、予約語の綴りに似た名前を付けることは避けるべきです。
予約語との衝突を回避するための命名戦略
開発者が意図せず予約語を使ってしまうケースとして多いのは、「データの性質をそのまま単語にしようとする」場合です。
例えば、ユーザーの権限(publicかprivateか)を管理したい時や、クラス分け(class)の情報を保持したい時などが挙げられます。
こうした衝突をスマートに回避するためのテクニックを紹介します。
文脈(コンテキスト)を加える
単語を1つだけで使うのではなく、そのデータが何を表しているのかを示す形容詞や名詞を組み合わせます。
class→className,targetClass,categoryClassdefault→defaultSettings,isDefaultdelete→deleteUser,isDeleted
このように複数の単語を組み合わせることで、予約語との衝突を避けられるだけでなく、変数の意味がより明確になり、コードの可読性が向上するという大きなメリットが得られます。
別の単語に言い換える(シノニムの活用)
予約語と意味が近い別の英単語を採用します。
interface→connection,boundarypackage→bundle,containerstatic→fixed,constantValue
英和辞典や類語辞典を活用して、エンジニア間で共通認識が取れやすい代替語を探す習慣をつけましょう。
一般的な命名規則(ネーミングコンベンション)
予約語を避けるという消極的な守りだけでなく、より良いコードを書くための積極的なルール(慣習)についても触れておきます。
2026年現在、JavaScriptコミュニティで広く受け入れられている命名規則は以下の通りです。
キャメルケース(camelCase)
変数名や関数名に最も一般的に使用される形式です。
最初の単語を小文字で始め、2つ目以降の単語の先頭を大文字にします。
const userProfileData = { ... };
function calculateTotalAmount() { ... }
パスカルケース(PascalCase)
クラス名や、Reactなどのコンポーネント名に使用される形式です。
すべての単語の先頭を大文字にします。
class UserManager { ... }
function UserProfileComponent() { ... }
スネークケース(snake_case / SCREAMING_SNAKE_CASE)
JavaScriptでは、特に「再代入しない定数(マジックナンバーの回避)」に対して、すべて大文字のスネークケースが使われることがあります。
const MAX_RETRY_COUNT = 5;
const API_BASE_URL = "https://api.example.com";
これに対し、通常の変数としてのアンダースコア繋ぎ(user\_nameなど)は、JavaScriptでは一般的ではありません。
予約語に関連する特殊なケース
グローバルオブジェクトのプロパティ
予約語ではありませんが、JavaScriptには最初から定義されているグローバルな名前があります。
例えば window , document , console , Object , Array などです。
これらを変数名として上書き(シャドウイング)することも可能ですが、標準的な機能が使えなくなるリスクがあるため、予約語と同じくらい注意深く避けるべきです。
// 非常に危険なコードの例
const console = "This is not a console object";
console.log("Hello"); // Error: console.log is not a function
オブジェクトのプロパティ名としての使用
実は、JavaScriptのオブジェクトの「キー(プロパティ名)」としては、予約語をそのまま使用することが許可されています。
const myObject = {
class: "A-1",
for: "all users",
delete: function() {
console.log("Deleted");
}
};
// 呼び出しも可能
console.log(myObject.class);
myObject.delete();
しかし、ドット記法( myObject.delete )でアクセスする際に古いブラウザやツールで問題が発生したり、コードの可読性を著しく下げたりする可能性があるため、プロパティ名であっても予約語をそのまま使うのは避けるのが賢明です。
エラーを防ぐための開発環境の活用
人間がすべての予約語を完璧に記憶しておくのは大変です。
そこで、現代の開発環境ではツールを活用して自動的にチェックを行うのが一般的です。
1. エディタのハイライト機能
VS Code(Visual Studio Code)などの高機能なエディタを使用すれば、予約語は他のテキストとは異なる色で強調表示(ハイライト)されます。
変数名を入力した際に色が予約語と同じになった場合は、すぐに間違いに気づくことができます。
2. ESLintの導入
ESLintは、コードを実行する前に静的に解析し、問題点を指摘してくれるツールです。
予約語の不正な使用はもちろん、推奨されない命名規則や、未定義の変数の参照なども検知してくれます。
プロジェクトにESLintを導入することで、チーム全体で統一された命名ルールを強制し、予約語に起因するバグを100%排除することが可能になります。
3. TypeScriptの使用
2026年において、JavaScript開発の標準となりつつあるTypeScriptを使用するのも一つの手です。
TypeScriptは型定義を導入するだけでなく、JavaScriptの予約語や将来の予約語に対してもより厳格なチェックを行います。
コンパイル段階でエラーを詳細に報告してくれるため、実行時のトラブルを大幅に減らすことができます。
実例:命名ルールの適用ビフォーアフター
予約語を避け、適切なルールで命名することでコードがどのように改善されるかを見てみましょう。
改善前(アンチパターン)
// 予約語や不適切な命名が混在
let class = "First Class"; // SyntaxError
const data = [10, 20, 30]; // 抽象的すぎる
function fun(f) { // 意味不明な関数名と引数名
return f * 1.1;
}
改善後(ベストプラクティス)
// 意味が明確で、予約語を避けた命名
const ticketCategory = "First Class";
const monthlySalesPrices = [10, 20, 30];
/**
* 税込み価格を計算する関数
* @param {number} price - 税抜き価格
* @returns {number} 税込み価格(10%)
*/
function calculateIncludeTax(price) {
const TAX_RATE = 1.1;
return price * TAX_RATE;
}
改善後のコードは、一目で何をしているかが理解でき、予約語との衝突もありません。
また、TAX\_RATE のように定数を大文字で定義することで、変更してはいけない値であることも明確に伝わります。
まとめ
JavaScriptの予約語は、言語の基盤を支える重要なパーツです。
これらを識別子として使用できないという制約は、一見不自由に感じるかもしれませんが、言語の構造を保ち、将来的な機能拡張をスムーズに行うために必要な仕組みです。
本記事で紹介した内容を振り返ります。
- 予約語を理解する:
if,for,classなど、JavaScriptが自身の制御に使う単語を変数名にしてはいけません。 - 厳格モードを意識する:モダンな開発環境では、
privateやinterfaceなども予約語として扱われます。 - 命名のルールを守る:数字から始めない、記号を使いすぎない、大文字小文字を区別する、といった基本を徹底しましょう。
- 文脈を付与する:単一の単語ではなく
classNameのように具体的な名前を付けることで、予約語の衝突を防ぎ、可読性を高めることができます。 - ツールを活用する:ESLintやTypeScriptを導入し、機械的にミスをチェックする体制を整えましょう。
正しい命名ルールを身につけることは、エラーを回避するだけでなく、他の開発者が読みやすい「美しいコード」を書くための第一歩です。
2026年の最新のトレンドを取り入れつつも、こうした基礎的なルールを大切にすることで、より高品質なJavaScriptアプリケーションの開発を目指してください。
