Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
slide
Search
kymr1010
November 25, 2025
Technology
22
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
slide
description
kymr1010
November 25, 2025
Other Decks in Technology
See All in Technology
CTO Night|NotionのAIエージェントとFDE
kzkhykw1991
0
150
Claude の新機能を、 出た日に触って社内に届けるまで
rfdnxbro
1
180
実践! SRE × AI - ABEMA における AIOps -
tetsuya28
8
3.1k
ストレスなくAIと付き合いたい!こんなときどうしてる?
namiki64
3
550
AI駆動で「他アプリの音を加工できる」アプリを作った
satomasahiro2005
0
160
Temporal 最高!でも改めて「日付」について調べたら人類の負債すぎる件
riyaamemiya
0
150
触りたくないデータに、どう触るか AI時代のRBACアクセスガバナンス
ivry_presentationmaterials
0
270
DWH の限界突破! AI エージェント向け爆速リアルタイムデータ基盤 ClickHouse
jozono
1
480
大型犬好きによるPugの紹介
yamanoku
1
160
オントロジーって 結局なにもの? AI エージェントに「意味」を渡す知識設計の話
greenmidori
0
210
Optunaの最新リリースv5.0について
pfn
PRO
0
120
JAWSUG TOHOKU 青森支部 「LoGoチャット」のAWS移行で 乗り越えたこと
taketakekaho
0
340
Featured
See All Featured
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
490
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
2
2k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Believing is Seeing
oripsolob
1
240
Utilizing Notion as your number one productivity tool
mfonobong
4
620
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
430
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
330
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
950
Transcript
JavaScript の歴史とモジュール体系まとめ ES5/ES6・CommonJS・ESM・NodeNext 1
きっかけ CJSのリポジトリをESMに移行するチケットの対応をしました // package.json { "type": "module" } // tsconfig.json
"compilerOptions": { "module": "NodeNext", "moduleResolution": "NodeNext", "esModuleInterop": true } //serverless.ts { target: "node18", bundle: true, format: "esm", } // jest.config.cjs { preset: "ts-jest/presets/default-esm", transform: { "^.+\\.tsx?$": ["ts-jest", { useESM: true }], }, } 2
きっかけ 何がなんだか分からなかったので調べたことをまとめました 少しお付き合いください 3
アジェンダ 1. ECMAScript とは? 2. ESModule とは? 3. CommonJS とは?
4. ESM 移行のメリット・ポイント 5. Node.js における CJS / ESM 6. TypeScript における CJS / ESM 7. まとめ 4
ECMAScript とは? JavaScript の標準仕様 Netscape が JS をブラウザに搭載した。その後、MicroSoft が JScript
とかいう のを Internet Explorer に搭載。仕様がメチャクチャで困るので、外部機関の ECMA に提案して作ってもらった 略称 正式名 年 ES1 ECMAScript 1 1997 ES5 ECMAScript 5 2009 ES6 ECMAScript 2015 2015 ここで ESModule が導入される ES14 ECMAScrupt 2023 2023 最新 5
ES Modules (ESM) とは? ES2015 で入った 言語標準のモジュールシステム 以前 のモジュール ES
Modules (ESM) <!-- index.html --> <script src="a.js"></script> <script src="b.js"></script> <script> foo(); </script> // foo.mjs export const foo = 1; export default function bar() {} // main.mjs import bar, { foo } from "./foo.mjs"; グローバルスコープ汚染 順序依存 ファイルごとにスコープが分離 依存関係を明示的に宣言 6
CommonJS (CJS) とは? モジュールの公式実装が遅すぎる… ESM 登場前から Node.js で使われてきたモジュールシステム そのままではブラウザで動かない(バンドラ必須) //
foo.cjs const fs = require("fs"); module.exports = { read(path) { return fs.readFileSync(path, "utf8"); }, }; 7
ESM 移行 のメリット 近年では ESM 移行が進んでいる 言語標準のモジュールシステム 静的解析が可能 ツールによる最適化がしやすい 例:
Tree Shaking ブラウザと共通のモジュールシステム フロントエンド / バックエンドで同じ構文が使える 将来的な互換性 新しい言語機能や最適化は ESM を前提にしていることが多い 8
ESM 移行 のポイント 現在 CJS / ESM 両対応の過渡期 package.json に
"type": "module" を指定 → .js は ESM として扱われる "type": "commonjs" または未指定 → .js は CJS として扱われる 拡張子の使い分け .mjs → 常に ESM .cjs → 常に CJS → 同一プロジェクト内で CJS / ESM が混在可能 9
ESM 移行のポイント package.json の "type" 設定 拡張子の見直し ( .js /
.mjs / .cjs ) モジュール系構文の置き換え import / export 構文に書き換え require() / module.exports の置換 __dirname / __filename の置き換え import.meta.url + url モジュール 使用しているパッケージの対応確認 ビルド / テスト / デプロイ設定の更新 10
TypeScript における CJS / ESM コンパイル前提の言語なので、設定で柔軟に対応可能 tsconfig.json の module オプション
出力されるモジュール形式を指定 例: CommonJS , ESNext , NodeNext , など moduleResolution オプション モジュール解決方法を指定 例: Node , NodeNext , など 11
TypeScript における CJS / ESM NodeNext, ESNext とは? ESNext ECMAScript
の次期バージョンの機能を指すことが多い TypeScript の tsconfig.json の target や lib オプションで使われる NodeNext TypeScript の tsconfig.json の module や moduleResolution オプショ ンで使われる 12
まとめ ES5 / ES6 / ESNext → 言語機能の世代 (構文・API) CommonJS
/ ESM → モジュールシステム (ファイル間の依存の張り方) Node.js の現状 CJS 文化を引きずりつつ、ESM への移行期 .cjs / .mjs / "type" / exports を組み合わせて運用 実務では 新規は ESM 基本 + NodeNext が選択肢 既存 CJS と混在する場合は 「ESM → CJS は簡単、CJS → ESM は import() が必要」 を押さえておくとハマりにくい 13
(おまけ) デュアルパッケージと exports フィールド 1 つの npm パッケージで CJS /
ESM の両方を提供する例: { "name": "my-lib", "exports": { ".": { "import": "./dist/index.mjs", // ESM 用 "require": "./dist/index.cjs" // CJS 用 } } } ESM ( import ) → index.mjs CJS ( require ) → index.cjs → 利用側は「普通に import / require するだけ」でよい 14
(おまけ) Node バージョン指定の選択肢 target オプションで指定可能 例: node18 , node20 ,
es2020 nodeXX を指定すると、その Node バージョンでサポートされている最新の ECMAScript 機能が有効になる 例: node18 を指定すると、ES2021 相当の機能が有効になる lambda や serverless 環境で Node バージョンを指定したほうが安全な場合に有 効 15