Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
TypeScriptがブラウザで実行されるまでの流れを5分で伝えたい
Search
ジン / Jin
November 29, 2025
4
1.9k
TypeScriptがブラウザで実行されるまでの流れを5分で伝えたい
https://frontend-conf.osaka.jp/
ジン / Jin
November 29, 2025
Tweet
Share
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
It's Worth the Effort
3n
187
29k
Become a Pro
speakerdeck
PRO
30
5.7k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1k
Code Review Best Practice
trishagee
73
19k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.3k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
A better future with KSS
kneath
240
18k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Transcript
TypeScriptがブラウザで 実⾏されるまでの流れを5分で伝えたい ジン / #fec_kansai
2年⽬フロントエンド ⼈⽣初のconf登壇👏 ⾃⼰紹介 ジン X: @Jin_pro_01 (齋藤仁 / じんじん)
TypeScriptはブラウザでは動かない 実はTypeScriptはブラウザで実⾏されるまでに裏でコネコネされている。 (開発始めて1年くらいはそんなこと知らなかった) じゃあ我々が書いたTypeScriptは、実際にはそのままユーザーのブラウザに 配信されて動いてないってこと...!? そんな裏のコネコネをビルドプロセスとして、ざっくり5分で喋りたい。
ざっくりビルドプロセス ブラウザランタイム aaa.ts bbb.ts ccc.ts aaa.js bbb.js ccc.js bundle.js bundle.min.js
①トランスパイル (TS→JS変換) ②バンドル (1つのファイルに) ③ミニファイ (なるべく小さく)
なぜビルドプロセスを経る必要があるか? • ブラウザで実⾏するため ◦ 開発者が開発しやすい⾔語(TypeScript)から、 ブラウザで実⾏できる⾔語(JavaScript)へ変換する。 • モダンな機能を⽤いて開発を進めるため ◦ 最新のTypeScript
/ JavaScriptを書きながら、 古いブラウザでも動作するようにする。 • パフォーマンスを向上させるため ◦ 巨⼤なプロジェクトでも、 ファイルの統合‧分割‧圧縮を⾏うことで⾼速にブラウザへ配信する。
1. トランスパイル 何をする? • トランスパイル = トランスレーション + コンパイル。 •
ブラウザでそのまま実⾏できないTypeScript から (古いブラウザでも実⾏できる)JavaScriptへの変換を⾏う。 • (tsc), Babel, SWC, esbuildなどが使われる。
1. トランスパイル // 入力 (main.ts) const greet = (name: string):
string => { return `Hello, ${name}!`; }; $ npx tsc main.ts --target es5 // 出力 (main.js) var greet = function (name) { return "Hello, ".concat(name, "!"); }; // 型が消え、 // 古いブラウザでも動く関数表現に
2. バンドル 何をする? • 複数のJavaScriptファイルを1つにまとめる(分割することも)。 • →HTTPリクエスト数を減らすなどブラウザへの転送や読み込みを⾼速化。 • webpack, Rollup,
esbuild, Rolldown, Turbopack, Rspackなどが使われる。
// 入力 // math.js export const add = (a, b)
=> a + b; // main.js import { add } from './math.js'; console.log(add(1, 2)); 2. バンドル $ npx esbuild main.js --bundle --outfile=bundle.js // 出力 (bundle.js) (() => { // math.js var add = (a, b) => a + b; // main.js console.log(add(1, 2)); })();
3. ミニファイ 何をする? • ファイルサイズを削減する。 ◦ 変数名の短縮 ◦ 不要な空⽩や改⾏、コメントの削除 ◦
使われていないコードの削除 • →ブラウザがファイルを読み込む時間の⾼速化。 • Terser, esbuild, SWCなどが使われる。
// 入力 (bundle.js) (() => { // math.js var add
= (a, b) => a + b; // main.js console.log(add(1, 2)); })(); 3. ミニファイ $ npx terser bundle.js --output bundle.min.js // 出力 (bundle.min.js) (()=>{var add=(a,b)=>a+b;consol e.log(add(1,2))})();
ざっくりビルドプロセス(再掲) ブラウザランタイム aaa.ts bbb.ts ccc.ts aaa.js bbb.js ccc.js bundle.js bundle.min.js
①トランスパイル (TS→JS変換) ②バンドル (1つのファイルに) ③ミニファイ (なるべく小さく)
⽇頃のコーディングにおいてあまりビルドプロセスについて意識する瞬間は 多くないかもしれませんが、我々が書いたコードがユーザーの使うブラウザ にどのような形で届くのか、我々が乗っかっているそのツール群はどのよう なものなのか、そこまで⽬を向けることはサービスの作り⼿としてとても⼤ 事だと感じています。 5分なのでいろいろ端折っていた箇所は多いですが、 何かの気づきや学びにつながると嬉しいです!ありがとうございました。 おわり