【2026年7月版】JavaScriptとECMAScriptの違いとは?歴史・バージョン早見表・TC39策定プロセスを徹底解説
この記事の内容
「JavaScriptとECMAScriptって同じじゃないの?」「ES6とES2015って何が違う?」——Webフロントエンドの学習を始めると、こうした混乱が必ず起きます。プログラミング経験者でも、この2つの正確な関係を把握できていない方は多いです。
この記事では、JavaScriptとECMAScriptの違いを歴史・バージョン表記・策定プロセスの3つの切り口で完全解説します。ES2015からES2024までの主要機能早見表・Babel/TypeScriptのトランスパイル解説・そして非エンジニアでも使えるClaude CodeでのJavaScript開発実践法まで、1本で網羅します。
弊社(株式会社GENAI)はClaude Code専門の支援機関として、非エンジニアの経営者・スタッフがJavaScriptを使った業務自動化・LP制作・Web開発を行う現場を多数サポートしています。「知識の整理」だけでなく「実務での使い方」の視点でお伝えします。
01 THE DIFFERENCE JavaScriptとECMAScriptの違い:1分でわかる本質 「仕様書」と「実装」の関係がすべての出発点
結論から言います。ECMAScriptはJavaScriptの「仕様書(標準規格)」であり、JavaScriptはそのECMAScript仕様に準拠して作られた「実装」です。
もう少し具体的に説明します。ECMAScriptは「JavaScript という言語はこういう文法で、こういう動作をすべきだ」というルールを定めた文書です。この文書はECMAという国際標準化団体が管理しています。一方のJavaScriptは、このルールに従ってブラウザメーカー(Google・Mozilla・Apple等)が実際に作ったプログラミング言語の実装です。
| 概念 | ECMAScript | JavaScript |
|---|---|---|
| 役割 | 仕様書・標準規格 | 実装・プログラミング言語 |
| 管理主体 | Ecma International(TC39委員会) | ブラウザベンダー(Google/Mozilla/Apple等) |
| 文書か言語か | 文書(PDF/仕様書) | 実際に動くプログラミング言語 |
| 比喩 | レシピ・設計図 | 実際に作られた料理・製品 |
| 正式名称 | ECMAScript(ECMA-262) | JavaScript™(商標はOracle所有) |
📚 用語解説
ECMAScript:Ecma International(1994年設立の国際標準化団体)が管理するプログラミング言語の仕様書。正式名称はECMA-262。JavaScriptだけでなく、ActionScript(Flash用)・JScript(IE用)もECMAScript仕様を実装した言語。現在は実質的にJavaScriptの標準仕様を指す言葉として使われている。
「JavaScriptという商標はOracleが持っている」という事実も混乱の原因の一つです。Netscapeが開発したJavaScriptの商標は、Sun Microsystemsを経由してOracleが保有しています。そのため、標準化団体であるEcmaは商標の問題を避けるために「ECMAScript」という別名で仕様を管理しています。日常の開発現場では「JavaScript」と呼べば問題ありませんが、正式な標準仕様書の名前は「ECMAScript」です。
ブラウザで動くJavaScriptは、ECMAScript(コア言語仕様)+DOM(HTMLを操作するAPI)+BOM(ブラウザ自体を操作するAPI)の3つが組み合わさったものです。Node.jsで動くJavaScriptは「ECMAScript + Node独自API」という構成です。ECMAScriptはどの実行環境にも共通するコア部分を定義しています。
02 HISTORY ECMAScriptの誕生:1990年代のブラウザ戦争から生まれた標準化 Netscapeの失敗とECMAへの依頼から始まった標準化の経緯
なぜECMAScriptという仕様が必要になったのか、歴史を追いながら理解します。この背景を知ると「なぜJavaScriptとECMAScriptという2つの名前があるのか」がすっきりわかります。
2-1. JavaScriptの誕生(1995年)
JavaScriptは1995年にNetscape CommunicationsのBrendan Eichが開発しました。当初の名前は「Mocha」→「LiveScript」で、最終的に「JavaScript」に改名されました。名前にJavaが入っているのは、当時絶大な人気を誇っていたJavaのブランド力を借りるためのマーケティング判断で、JavaとJavaScriptは技術的に何の関係もありません。
Netscapeのブラウザ(Netscape Navigator)にJavaScriptが搭載されると、MicrosoftはInternet ExplorerにJScriptという独自実装を組み込みました。これが「ブラウザ戦争」の始まりです。
2-2. ブラウザ戦争と互換性の崩壊(1996〜1998年)
NetscapeとMicrosoftがそれぞれ独自拡張を加え続けた結果、JavaScriptとJScriptは細部で異なる動作をするようになりました。Webデザイナーは「このコードはNetscapeでは動くがIEでは動かない」という問題に日常的に直面しました。
この互換性の崩壊を解決するために、Netscapeは1996年に言語の標準化をEcma International(当時はECMA)に依頼します。これがECMAScriptの始まりです。
Brendan Eich が
10日でJavaScriptを開発
(Netscape Navigator)
MicrosoftがJScript
をIEに搭載
→互換性崩壊
NetscapeがECMAに
標準化を依頼
→TC39設立
ECMAScript 1
(ES1)を正式公開
→標準化完成
毎年6月に
新バージョン公開
ES2024まで
📚 用語解説
TC39(Technical Committee 39):ECMAScript仕様を管理・策定するEcma Internationalの技術委員会。Google・Mozilla・Apple・Microsoft・Samsung・Meta等のテック企業の代表者が参加。新しいJavaScript機能の提案・審議・承認を行い、毎年6月に新しいECMAScriptを公開する。TC39の議事録はGitHubで公開されている。
03 VERSIONS ECMAScriptのバージョン表記と歴史年表(ES1〜ES2024) ES6=ES2015の謎と、なぜ年号表記に変わったのか
ECMAScriptのバージョン表記は「ES5」「ES6」「ES2015」のように複数の呼び方があり、混乱しやすいです。ここで完全に整理します。
3-1. バージョン表記の2つの体系
ECMAScriptのバージョン表記は2015年を境に変わりました。
| 正式名称 | 旧称(通称) | 公開年 | 重要度 |
|---|---|---|---|
| ECMAScript 1 | ES1 | 1997年 | 初版 |
| ECMAScript 2 | ES2 | 1998年 | マイナー改訂 |
| ECMAScript 3 | ES3 | 1999年 | ★★★(正規表現・try-catchなど大幅追加) |
| ECMAScript 4 | ES4 | 未公開 | ★★★(大規模変更で議論紛糾→廃案) |
| ECMAScript 5 | ES5 | 2009年 | ★★★(strict mode・JSON・Array新メソッド) |
| ECMAScript 5.1 | ES5.1 | 2011年 | ★(ISO標準化対応) |
| ECMAScript 6 | ES6 / ES2015 | 2015年 | ★★★★★(let/const・class・arrow関数・Promise) |
| ECMAScript 2016 | ES7 | 2016年 | ★★(Array.includes・べき乗演算子) |
| ECMAScript 2017 | ES8 | 2017年 | ★★★★(async/await・Object.values) |
| ECMAScript 2018 | ES9 | 2018年 | ★★★(Rest/Spread・非同期反復) |
| ECMAScript 2019 | ES10 | 2019年 | ★★(Array.flat・Object.fromEntries) |
| ECMAScript 2020 | ES11 | 2020年 | ★★★(Optional Chaining・Nullish Coalescing・BigInt) |
| ECMAScript 2021 | ES12 | 2021年 | ★★(String.replaceAll・Promise.any・&&=) |
| ECMAScript 2022 | ES13 | 2022年 | ★★★(Top-Level Await・at()・Error.cause) |
| ECMAScript 2023 | ES14 | 2023年 | ★★(Array.findLast・新Hashbangルール) |
| ECMAScript 2024 | ES15 | 2024年 | ★★(Promise.withResolvers・Object.groupBy) |
ES4はクラス・名前空間・型付け等の大規模な変更を提案しましたが、MicrosoftとYahooが強く反対し、TC39内で合意が形成できませんでした。その後ES4の一部アイデアはES6(ES2015)に引き継がれ、ActionScript(Adobe Flash)に実装されましたが、Flash自体が廃止されたため歴史的な遺物となりました。ES4の失敗は「後方互換性の維持」の重要性をJavaScript開発コミュニティに強く意識させるきっかけとなりました。
📚 用語解説
後方互換性(Backward Compatibility):古いコードが新しい環境でも動き続けることを保証する原則。JavaScriptは「壊れたWebを直す」を最優先哲学として、既存のWebサイトを壊すような仕様変更を避けてきた。これはPythonのPython2→Python3移行(後方互換性なし)とは対照的で、JavaScriptが「10年前のコードが今も動く」という稀な性質を持つ理由。
04 TC39 PROCESS TC39とは?ECMAScript仕様の策定プロセス5ステージ Proposal → Stage 0〜4 の道のりと、新機能がどうJavaScriptに追加されるか
ECMAScriptに新しい機能が追加されるまでには、TC39が定めた5段階の審査プロセス(ステージ制)があります。このプロセスを理解すると「この機能はまだ使えない」「これは全ブラウザで使える」が判断できるようになります。
| ステージ | 名称 | 内容 | 目安期間 |
|---|---|---|---|
| Stage 0 | Strawperson(案) | TC39メンバーが「こんな機能が欲しい」と提案した段階。正式な採用が決まったわけではない | 〜数週間 |
| Stage 1 | Proposal(提案) | TC39が「検討する価値がある」と認めた段階。APIの形や解決する問題を明確化 | 〜数ヶ月 |
| Stage 2 | Draft(草案) | 初期の仕様案を文書化。実験的実装を許可。基本的な構文・セマンティクスを確定 | 〜1年 |
| Stage 2.7 | Approved(承認草案) | 2023年追加。仕様が安定し、あとは言語への統合を待つ段階 | 〜数ヶ月 |
| Stage 3 | Candidate(候補) | 仕様ほぼ確定。ブラウザベンダーが実装を開始。開発者がフラグ付きで試験利用可能 | 〜1年 |
| Stage 4 | Finished(完了) | 2つ以上の実装が完了し、テスト合格。次のECMAScriptに正式追加 | 翌年6月公開 |
アイデア提案
TC39メンバー
のみ可能
問題定義
API案作成
委員会承認
草案文書化
構文の
基本確定
仕様確定
ブラウザ実装
開始
複数実装
完了→翌年
正式収録
Webフロントエンドエンジニアが注目するのは主にStage 3とStage 4です。Stage 3に入ったら「近い将来使えるようになる機能」として学習対象になり、Stage 4で「次のECMAScriptに入ることが確定した機能」と判断できます。
TC39の全Proposalは github.com/tc39/proposals で公開されています。現在Stage 3の機能(近い将来追加される機能)はStage 3 Proposalsのリストで確認できます。JavaScriptの最先端動向を追うのに最も一次情報に近い場所です。
05 KEY FEATURES 主要バージョン別の新機能まとめ:ES2015〜ES2024早見表 現代のJavaScript開発で使われる機能の9割はES2015〜ES2020で登場した
現在のモダンなJavaScript開発で使われる重要な機能のほとんどは、ES2015(ES6)以降に追加されました。必ず押さえておくべき機能を、バージョン別にまとめます。
5-1. ES2015(ES6):JavaScriptの大革命
ES2015は「JavaScriptの大革命」と呼ばれるほど大量の新機能が追加されたバージョンです。現代のJavaScriptコードの書き方が大きく変わった転換点です。
function() {}の代わりに() => {}と書ける。thisの挙動が変わる重要な違いあり`Hello, ${name}!`のように変数を埋め込めるconst {x, y} = pointでオブジェクトや配列から一括抽出...演算子// ES5の書き方(古い)
var name = 'Alice';
function greet(name) {
return 'Hello, ' + name + '!';
}
var promise = new Promise(function(resolve, reject) {
setTimeout(function() { resolve('done'); }, 1000);
});
// ES2015の書き方(モダン)
const name = 'Alice';
const greet = (name) => `Hello, ${name}!`;
const promise = new Promise((resolve, reject) => {
setTimeout(() => resolve('done'), 1000);
});
5-2. ES2017:async/awaitの追加
ES2017で追加されたasync/awaitは、非同期処理の書き方を劇的に簡単にしました。Promiseのthen/catchを連鎖する代わりに、同期処理のように読めるコードが書けるようになりました。
// Promiseのthen/catch(ES2015〜)
fetch('/api/data')
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error(err));
// async/await(ES2017〜)— 圧倒的に読みやすい
async function getData() {
try {
const res = await fetch('/api/data');
const data = await res.json();
console.log(data);
} catch (err) {
console.error(err);
}
}
5-3. ES2020〜:Optional Chaining・Nullish Coalescing・BigInt
ES2020以降に追加された機能で特に実用的なのが「Optional Chaining(?.)」と「Nullish Coalescing(??)」です。
// Optional Chaining(?.)— ES2020
// nullやundefinedへのアクセスでエラーにならない
const city = user?.address?.city; // userやaddressがnullでもエラーなし
// 旧来の書き方
const city = user && user.address && user.address.city;
// Nullish Coalescing(??)— ES2020
// nullまたはundefinedの場合のみデフォルト値を使用
const name = user.name ?? '名前未設定';
// || との違い: || は 0 や空文字列もfalsy扱い
const count = value || 0; // valueが0でも0が返る(意図しない場合あり)
const count2 = value ?? 0; // valueがnull/undefinedの時だけ0が返る
📚 用語解説
Optional Chaining(?. ):ES2020で追加された演算子。オブジェクトのプロパティにアクセスする際、途中でnullまたはundefinedが現れてもエラーを投げずにundefinedを返す。user?.address?.cityのように書くことで、ネストが深いオブジェクトへの安全なアクセスが可能になる。
5-4. ES2022〜:Top-Level Awaitとクラス機能強化
ES2022ではTop-Level Awaitが追加されました。これにより、モジュールのトップレベル(関数の外)で直接awaitが使えるようになり、設定ファイルの読み込みや初期化処理を同期的に書けるようになりました。
// ES2022 Top-Level Await — モジュールのトップレベルで直接await
const config = await fetch('/config.json').then(r => r.json());
// ES2022 クラスのプライベートフィールド(#prefix)
class Counter {
#count = 0; // プライベートフィールド(クラス外からアクセス不可)
increment() { this.#count++; }
get value() { return this.#count; }
}
// ES2024 Object.groupBy — 配列をキーでグループ化
const result = Object.groupBy(products, product => product.category);
// { 'electronics': [...], 'clothing': [...] }
06 TRANSPILE トランスパイルとは?BabelとTypeScriptの役割 新しいECMAScriptを古いブラウザで動かすための変換技術
ES2015以降の新しい構文は、古いブラウザ(IE 11等)では動きません。トランスパイルとは、最新のJavaScriptコードを古いブラウザでも動く形式に自動変換する処理です。
📚 用語解説
トランスパイル(Transpile):同じ抽象レベルの別の言語・構文に変換するプロセス。TypeScript→JavaScriptへの変換や、ES2015構文→ES5構文への変換がトランスパイルの代表例。コンパイルが「高レベル言語→機械語」への変換を指すのに対し、トランスパイルは「高レベル言語→別の高レベル言語」への変換を指す。
6-1. Babel:JavaScriptをJavaScriptに変換するツール
Babelは「最新のECMAScript構文で書いたJavaScriptを、古いブラウザが理解できるES5相当のJavaScriptに変換する」ツールです。例えばES2015のアロー関数は、Babelを通すと従来のfunction式に変換されます。
# Babelのインストール
npm install --save-dev @babel/core @babel/cli @babel/preset-env
# babel.config.json の設定
{
"presets": [
["@babel/preset-env", {
"targets": "> 0.25%, not dead", // 対象ブラウザを指定
"useBuiltIns": "usage",
"corejs": 3
}]
]
}
# トランスパイル実行
npx babel src --out-dir dist
// 変換前(ES2015のアロー関数)
const add = (a, b) => a + b;
// Babelが変換後(ES5のfunction式)
var add = function add(a, b) {
return a + b;
};
6-2. TypeScript:型付きJavaScriptのトランスパイル
TypeScriptはMicrosoftが開発した「JavaScriptに型チェック機能を追加した言語」です。.tsという拡張子で書かれたTypeScriptコードは、TypeScriptコンパイラ(tsc)でJavaScriptに変換(トランスパイル)されます。
// TypeScript(型付き)
function greet(name: string, age: number): string {
return `${name}さん(${age}歳)、こんにちは!`;
}
// 誤った型を渡すとコンパイル時にエラー
greet('Alice', 'thirty'); // エラー: 'string'を'number'型に代入できません
// TypeScript→JavaScriptに変換後
function greet(name, age) {
return `${name}さん(${age}歳)、こんにちは!`;
}
| 項目 | Babel | TypeScript |
|---|---|---|
| 役割 | 最新構文→古いJS変換 | 型付きJS→JS変換(型チェック) |
| 型チェック | なし | あり(TypeScriptの主目的) |
| 出力 | JavaScriptのみ | JavaScript(型情報は削除) |
| 学習コスト | 低(設定だけ) | 中〜高(型の知識が必要) |
| 向いている用途 | ブラウザ互換性の確保 | 大規模開発・チーム開発・バグの事前防止 |
07 CLAUDE CODE PRACTICE 【独自】Claude CodeでモダンJavaScript開発を10倍加速する 非エンジニアでも「書けるJS」を増やす実践的な使い方
ここからは、Claude Codeを使ってJavaScript開発を加速させる実践的な方法を紹介します。「JavaScriptを学びたいが、独学は難しい」「ECMAScriptのバージョン差異で詰まる」という方に特に有効です。
7-1. 「この書き方はES何?」を即座に判定してもらう
JavaScriptのコードを見て「これは使って大丈夫な書き方か」「古いブラウザでも動くか」を判断するのは難しいです。Claude Codeなら、コードを貼るだけで即座に判定できます。
7-2. 旧来コード→モダンJSへのリファクタリングをClaude Codeに依頼する
既存の古いJavaScriptコードをES2015以降のモダンな書き方に更新する作業は、Claude Codeに丸投げできます。
// Claude Codeへの指示例:
// 「以下のES5コードをES2015以降のモダンな書き方にリファクタリングしてください。
// 変換のポイントも日本語でコメントしてください」
// 変換前(古いES5コード)
var users = [];
for (var i = 0; i < data.length; i++) {
if (data[i].active) {
users.push({
name: data[i].name,
email: data[i].email
});
}
}
// Claude Codeが提案する変換後(モダンなES2015+コード)
const users = data
.filter(user => user.active) // filterでactiveなユーザーだけ抽出
.map(({ name, email }) => ({ name, email })); // 分割代入でシンプルに変換
7-3. TypeScript型定義をClaude Codeに自動生成してもらう
TypeScriptの型定義(interface・type)を書くのはめんどうですが、Claude Codeに既存のJavaScriptオブジェクトを渡せば自動生成してもらえます。
// Claude Codeへの指示:
// 「以下のJavaScriptオブジェクトをTypeScriptのinterfaceに変換してください」
const user = {
id: 1,
name: '山崎',
email: 'yamazaki@example.com',
role: 'admin',
createdAt: '2025-01-01T00:00:00Z',
profile: {
age: 30,
department: '営業部',
tags: ['manager', 'sales']
}
};
// Claude Codeが出力するTypeScript型定義
interface UserProfile {
age: number;
department: string;
tags: string[];
}
interface User {
id: number;
name: string;
email: string;
role: 'admin' | 'user' | 'viewer'; // Union型で値を制限
createdAt: string; // ISO 8601形式
profile: UserProfile;
}
7-4. 業務スクリプトをClaude Codeで書いてもらう実例
弊社でClaude Codeを使って実際に書いているJavaScript業務スクリプトの例を紹介します。
「JavaScriptを勉強しなければ」と思ってはいるけど、なかなか進められない方へ。Claude Codeに「このコードを詳しく説明して、次に何を学べばいいか教えて」と聞くだけで、パーソナライズされたJavaScript学習ロードマップが出てきます。独学よりも何倍も早く「書けるJS」が増えていきます。
JavaScriptとClaude Codeを組み合わせた業務自動化を一緒に設計します
「JavaScriptでこんな自動化がしたいけど書けない」「既存のJSコードをモダンに直したい」という方に、弊社実運用ノウハウをもとに個別サポートします。
NEXT STEP
この記事の内容を、あなたのビジネスで
実践してみませんか?
AI活用を自社で回せるようになりたい方へ
AI鬼管理
Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。
よくある質問
Q. JavaScriptとECMAScriptは同じプログラミング言語ですか?
A. 厳密には違います。ECMAScriptは仕様書(標準規格)の名前で、JavaScriptはその仕様に従った実装の名前です。ただし実用上は「JavaScriptの標準仕様 = ECMAScript」と理解して問題ありません。一方でActionScript(Flash)やJScript(IE)もECMAScript仕様を実装した言語でしたが、現在はいずれも廃止されてJavaScriptが事実上の唯一の実装です。
Q. ES6とES2015はどちらが正しい呼び方ですか?
A. 正式名称はES2015(ECMAScript 2015)です。ES6は2015年以前の旧体制での番号表記(6番目のバージョン)です。どちらも正しく、現場ではどちらの呼び方も通用します。2015年以降のバージョンはES2016・ES2017と年号表記が統一されています。
Q. 「最新のECMAScriptを学べばいい」ですか?それとも古いバージョンから学ぶべき?
A. 現代の学習においては最新のモダンJavaScript(ES2015以降)の書き方から学ぶことを推奨します。ただし「varはなぜ使わないのか」「Promiseが生まれる前はどう書いていたか」という歴史的文脈を知ることで、新機能のメリットがより深く理解できます。古い書き方を覚えるよりも「なぜ新しい書き方が生まれたか」を理解することが重要です。
Q. TypeScriptを使えばECMAScriptのバージョン差異は気にしなくてよくなりますか?
A. TypeScriptを使っても、出力先のJavaScript(tsconfig.jsonのtarget設定)をどのバージョンにするかを指定する必要があります。TypeScriptは「型チェック」の機能を追加しますが、ブラウザ互換性の問題はBabelと組み合わせるか、TypeScriptのtarget設定で古いバージョンを指定することで対処します。
Q. Babelを使わずに最新のECMAScript機能を使って大丈夫ですか?
A. 対象ブラウザによります。2025年以降のモダンブラウザ(Chrome・Firefox・Safari・Edge最新版)であればES2020〜ES2022の多くの機能がネイティブサポートされています。IE11のサポートが不要な場合はBabelなしで最新機能を使えます。ただしNode.jsのバージョンにより一部機能が使えない場合があるため、使用環境を確認することが重要です。
Q. Claude CodeはJavaScriptのコードを書けますか? 信頼できる品質ですか?
A. はい、Claude CodeはJavaScript・TypeScriptのコードを高品質で生成できます。単純なスクリプトから複雑なAPIの統合まで対応しています。ただし生成されたコードは必ず動作テストを行い、特にセキュリティに関わる部分(認証・入力バリデーション・SQLクエリ等)は専門家によるレビューを推奨します。Claude Codeは「コードを書く生産性を上げるツール」であり「テスト・レビューを省略できるツール」ではありません。
Q. ECMAScriptの次のバージョン(ES2025)にはどんな機能が追加されますか?
A. 2025年6月公開予定のES2025(TC39 Stage 4確定分)には、Import Assertions(モジュールインポート時の型チェック)・Temporal API(日時処理の改善、現在のDateオブジェクトの問題を解決)・Array.fromAsync(非同期イテラブルからの配列生成)等が含まれる見込みです。Temporal APIは特に注目度が高く、タイムゾーン処理の複雑さを解決します。
Claude Codeで業務自動化を90日で叩き込む
経営者向けの伴走型パーソナルトレーニング
Claude Code を業務に落とし込む
専門研修コース一覧
受講者本人の業務を題材に、「使いこなせる」状態になるまで伴走する研修プログラム。1対1特化型・ハンズオン・法人講座の3コースを展開中。業務特化・実装まで踏み込むタイプのClaude Code研修です。
研修コース一覧を見る →AI鬼管理へのお問い合わせ
この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。




