Skip to content

JavaScriptとTypeScriptの歴史の整理:バージョンとモジュールシステムの変遷

エンジニアとしてモダンなWeb開発(Next.jsやAstroなど)を行う上で避けて通れない、JavaScript(JS)とTypeScript(TS)の関係性や歴史的背景を整理します。

TypeScriptは、JavaScriptをベースに「型」の機能を追加した言語であり、 JavaScriptのスーパーセット(超集合) です。

  • JavaScript (JS): ブラウザやNode.jsで直接実行できる標準的な言語。
  • TypeScript (TS): JSの全機能を含みつつ、静的型付けなどの拡張機能を加えたもの。
  • 互換性: 有効なJSコードは、そのまま有効なTSコードとして扱えます。

2. JavaScript (ECMAScript) の歴史と名称の変遷

Section titled “2. JavaScript (ECMAScript) の歴史と名称の変遷”

JavaScriptの規格は ECMAScript (ES) と呼ばれます。その名称とバージョンの付け方には大きな歴史的転換点がありました。

ES2015 (ES6) 以前:黎明期から停滞期

Section titled “ES2015 (ES6) 以前:黎明期から停滞期”
  • 1995年: Netscape社で誕生。わずか10日間で開発されました。
  • ES3 (1999年): 長らく標準として使われたバージョン。
  • ES5 (2009年): 約10年の沈黙を破って登場。forEachJSON サポートなど、現代的なJSの基礎が作られました。

大転換期:ES2015 (ES6) と名称の変更

Section titled “大転換期:ES2015 (ES6) と名称の変更”

2015年、JS史上最大のアップデートが行われ、class 構文や import/export など、大規模開発に耐えうる機能が多数導入されました。

  • 名称の変更: 従来は「ES6」のようにバージョン番号で呼ばれていましたが、この年から 「毎年アップデートを行う」という方針に切り替わり、名称も「ES2015」のように年号を冠する形式 になりました。
  • 現在: 以降はES2016、ES2017……と毎年小規模なアップデートが繰り返され、現在はES2024まで進化しています。
  • 2012年: Microsoftが誕生させる。JSが大規模開発に使われる際のエラーを防ぐことが目的でした。
  • TS 2.0 (2016年): strictNullChecks が導入され、型安全性が飛躍的に向上しました。
  • TS 5.0 (2023年〜): 現在の主流バージョン。コンパイルの高速化などが進んでいます。

4. CommonJS (CJS) と ES Modules (ESM) の詳細

Section titled “4. CommonJS (CJS) と ES Modules (ESM) の詳細”

モジュールシステム(ファイルを分割して読み書きする仕組み)には、歴史的な経緯から2つの主要な形式があります。現在、これらは混在した状況にあり、違いを正しく理解することが重要です。

項目CommonJS (CJS)ES Modules (ESM)
キーワードrequire(), module.exportsimport, export
標準の場Node.js(歴史的・サーバーサイド)ブラウザ・JS標準規格(モダン)
読み込みタイミング実行時 (Runtime)静的解析時 (Static)
トップレベル await不可可能
拡張子.js (デフォルト) / .cjs.js (デフォルト) / .mjs
  1. 静的解析 vs 動的実行:
    • ESMはプログラムの実行前にインポートの依存関係を解決します。これにより、使われていないコードを削ぎ落とす Tree-shaking が可能になり、ビルド後のファイルサイズを軽量化できます。
    • CJSはコードの実行中に require() を通じて動的に読み込むため、条件分岐(if 文)の中でインポートするような書き方が可能です。
  2. 互換性の問題:
    • 現在のNode.js環境では両方の形式をサポートしていますが、ESMからCJSを呼ぶのは比較的容易な一方、CJSからESMを呼ぶ場合には制約(非同期的な扱いや import() 関数の利用など)が生じることがあります。
  3. モダン環境での立ち位置:
    • Next.js 16系 など、現代的なフロントエンドフレームワークでは ESMが標準 です。