Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
TypeScript 6.0 で 設定と移行はどう変わるか
Search
yuki yamazaki
March 14, 2026
Programming
34
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
TypeScript 6.0 で 設定と移行はどう変わるか
yuki yamazaki
March 14, 2026
More Decks by yuki yamazaki
See All by yuki yamazaki
MCP とは何か、2026-07-28 の仕様で何が変わったのか
y_yamazaki
0
35
URLは変わるのに画面が更新されない ── Next.js 16.2 ルーターキャッシュのバグを追う
y_yamazaki
0
4
便利な言葉『多分』 曖昧さが生む可能性とリスク
y_yamazaki
0
1k
Other Decks in Programming
See All in Programming
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
240
承認済みなのに差戻しできてしまうバグ、型で潰せます
shinchit
0
100
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
380
170k Jobs a Day on GKE: Scaling Mercari's CI Platform - and What's Next for AI-Native Development
junyaokabe
0
120
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
190
言葉の格闘技のススメ~紙とペンと言葉から始める、キャリアの描き方~
progresscicada
2
170
楽しそうなつよつよエンジニアと目が死んでる僕/A brilliant engineer having a blast, and dead-eyed me.
3l4l5
2
230
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
250
typoなんかねぇよ
raspython3
0
410
【QA Test Talk Vol.8】AI-DLC による Whole Team Approach の加速
pkshadeck
PRO
0
220
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
410
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.4k
Featured
See All Featured
Technical Leadership for Architectural Decision Making
baasie
3
520
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
470
Why Our Code Smells
bkeepers
PRO
340
58k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
390
For a Future-Friendly Web
brad_frost
183
10k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
450
The Cult of Friendly URLs
andyhume
79
7k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.2k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
710
Claude Code のすすめ
schroneko
67
230k
Music & Morning Musume
bryan
47
7.3k
Transcript
TypeScript 6.0 で 設定と移行はどう変わるか
TypeScript 6.0 RC is out TypeScript 6.0 RC がリリースされた 正式版の公開はもう近い
Are you ready for 6.0? 移行準備は整っているか
今日のゴール: TS6 で見直す設定と移行の勘所を掴む 変更点を全部追うことは目的にしない 個別機能より、設定の前提がどう変わったかを見る TS6 で何が標準になり、何を明示する必要が出たかを見る TS6 では、何が増えたか以上に「どう設定し、どう移行するか」が重要になる 4
TS7 を見据えた移行準備が始まった 6.0 は現在の TypeScript 実装での最終メジャー予定 7.0 は Go 実装への移行が計画されている
[1] 並列型チェックを見据えて挙動の決定性を整える 今は「動く設定」だけでなく「TS7移行後も崩れにくい設定」を意識する [1] このGo化の対象は主にコンパイラ/言語サービスの実装であり、言語仕様そのものが変わる話ではない 5
TS6 の軸は「暗黙依存と旧互換を減らす」 strict / types などの暗黙既定を減らし、必要な設定を明示する classic 削除や node10 非推奨のように、旧互換ルートを減らす
解決規則を ESM 前提へ寄せ、環境差分を小さくする TS6 は、暗黙依存と旧互換を減らし、現在の標準前提へ寄せている 6
strict は推奨からデフォルトへ変わった { "strict": true } 新規プロジェクトの初期値が変わる 新規開発で strict 前提が一般化しており、既定値もその実態に寄った
「後で厳しくする」戦略は負債化しやすい 緩い運用にするなら、 strict: false を明示して使う TS6 では、型チェックの厳格化は追加施策ではなく標準前提になった 7
types は自動読込から明示指定へ変わった { "types": [] } TS5: types 未指定なら @types
を自動で拾う TS6: types のデフォルトが [] になり、自動読込しない どの型を読み込むかを明示し、環境ごとの揺れを減らす方向に変わった 8
types は移行初手で固定する types 未指定では process や describe が解決できないケースが出る Node /
Jest / Vitest など必要な型だけを明示指定する 必要な型を明示すると、環境差分を切り分けやすくなる 暗黙のまま 先に固定する types: 自動読み込み types: ["node", "vitest"] ↓ ↓ 環境差分が出る 使う型が明確になる types は「必要な型を使う設定」として最初に固定する 9
rootDir も移行初手で固定する TS5: rootDir 未指定なら、入力ファイル群の共通親ディレクトリから推論される TS6: tsconfig.json があると、 rootDir 未指定の既定は
tsconfig.json のあるディレ クトリになる コンパイルは通っても、出力構造だけ崩れることがある 先に固定しておくと、後続の差分を切り分けやすい src/index.ts, outDir: dist のとき TS5: rootDir = src → dist/index.js TS6: rootDir = tsconfig の場所 → dist/src/index.js rootDir は「出力構造の基準になる設定」として先に決める 10
target と module の既定は現在主流の実行環境に寄った 現在主流の実行環境に合わせてデフォルトが見直された target のデフォルトは es2025 になる module
のデフォルトは esnext になる ES5 向け互換が必要な場合は、別途ビルド工程で対応する 例: Babel / SWC / esbuild で ES5 向けに変換する 例: 互換向け polyfill を配布側で注入する 古い環境互換は、TypeScript設定ではなくビルド工程で分離管理する 11
moduleResolution は Node か Bundler かで先に決める classic は削除 node (
node10 ) は非推奨 実行環境に応じて nodenext / bundler を選ぶ Node 直実行か Bundler 中心かを先に決める 12
baseUrl は非推奨になり、import 解決は paths 明示へ寄 せる { "baseUrl": "./" }
baseUrl は非推奨になった import 解決は paths で明示する方向に整理された 旧挙動が必要な場合は paths に * マッピングを追加する import 解決の起点は暗黙に置かず、 paths で明示する 13
import assertions は with へ移行する // before import data from
"./a.json" asserts { type: "json" } // after import data from "./a.json" with { type: "json" } tsconfig の話ではないが、移行時に押さえるべき標準構文側の変更 JSON import などでは、構文の書き換えが必要になる JavaScript標準化の流れに合わせて、import の構文は asserts から with へ移 行した 14
dom.iterable / dom.asynciterable は足さなくてよくなった { // before "lib": ["dom", "dom.iterable"]
// after "lib": ["dom"] } TS6 では両方の定義が lib.dom.d.ts に含まれる lib 指定も、冗長な組み合わせを前提にしない方向で整理された 指定自体は可能だが、実体は空ファイル lib 設定も「足す前提」から「最小指定」へ寄っている 15
副作用 import の解決ミスは既定で見つかりやすくなる noUncheckedSideEffectImports: true が既定になった // 副作用 import import
"./setup"; 副作用 import 自体は引き続き使える ただし、解決できない副作用 import は TS6 では見逃されにくくなった CSS import やパスエイリアスで問題が出る場合は、解決設定や宣言ファイルを見 直す TS6 は「見逃されていた副作用 import の解決ミス」を見つけやすくする 16
stableTypeOrdering は比較時だけ一時的に使う { "compilerOptions": { "stableTypeOrdering": true } } TS6
と TS7 の出力・診断差分を比較するときに使う TS6 の型順序挙動を TS7 に寄せ、差分ノイズを減らす 移行時の比較ノイズを減らすために使う 17
問題は「同じ意味でも表示順が揺れる」こと // base.ts export function foo(condition: boolean) { return condition
? 100 : 500; } // with-extra.ts const x = 500; export function foo(condition: boolean) { return condition ? 100 : 500; } 余計な定義が 1 つ増えるだけで .d.ts の union 順序が変わることがある 差分比較では「意味の差」ではなく「順序の差」がノイズになる 18
stableTypeOrdering を使うと比較ノイズを減らせる モード foo 戻り値型( .d.ts ) 備考 TS6 (flagなし)
100 | 500 / 500 | 100 生成順で揺れる TS6 (+flag) TS7 と同じ順序 比較ノイズ減 TS7 安定順序 同じ入力で同じ順序 TS6/TS7 比較では、まず順序ノイズを消してから差分を見る 19
stableTypeOrdering は常用ではなく移行用 常時ONではなく、移行検証で一時的に有効化する 型チェックが最大 25% 程度遅くなる可能性がある TS6/TS7 比較で本質的な差分を見つけやすくする 推論差で崩れる場合は型引数・変数注釈を明示する 常用ではなく、移行時の差分診断で使う
20
先に確認すべき変更と、後から見ればよい改善を分ける まず確認すべきなのは、移行に影響する変更と非推奨項目 細かな改善は、移行対応とは分けて確認すると整理しやすい 例: es2025 では RegExp.escape などの型が使える esnext では
Temporal など次期標準 API の型が使える まずは移行に影響する変更を押さえ、その後に細かな改善を見る 21
移行時はこの順で見ると切り分けしやすい 1. types / rootDir を明示して固定 2. moduleResolution と module
を実行環境に合わせる 3. 見つかった import 解決エラーと非推奨設定を潰す baseUrl は paths 明示へ移行する noUncheckedSideEffectImports で見つかった副作用 import の解決ミスを直す moduleResolution: node は nodenext / bundler へ移行する target: es5 は互換ビルド工程へ分離する 4. import ... with へ構文移行 tsc --noEmit で破壊的変更を確認し、必要に応じて .d.ts / エラーメッセージ差分も 見る 22
TS6 は前提を現在主流の開発実態に合わせて揃え直す 暗黙依存を減らし、必要な設定を明示する ESM と現在主流の実行環境を標準前提にする TS7 への移行を見据えた設定へ寄せる TS6 は「新機能を足す」より「前提を現在主流の開発実態に合わせて揃え直す」リリ ースである
23
参考資料 TypeScript 6.0 Beta Announcement TypeScript 6.0 RC Announcement 24
Thank You