Fragments of verbose memory

冗長な記憶の断片 - Web技術のメモをほぼ毎日更新

Dec 13, 2025 - 日記

2026年 TypeScriptのビルドがめちゃ速くなる予定

typescript-7-go-native-port cover image

TypeScript 7.0 が2026年初頭にリリース予定で、最大の変化はビルドが最大10倍速くなることです。実装言語がJavaScriptからGo言語 に変わり、大規模プロジェクトでの開発体験が劇的に改善されます。

ReactやNext.jsで数百〜数千ファイルのプロジェクトを開発している方には朗報です。本記事では、実際のビルド時間の変化、移行時の注意点、今から準備すべきことをまとめます。

いま何が起きているのか

TypeScriptコンパイラ(tsc)の実装が、JavaScript → Go言語に完全移行します。

変わること:

  • tscコマンドがネイティブバイナリに(Node.js不要で起動)
  • 並列処理でCPUコアをフル活用
  • メモリ使用量が半分以下に削減

変わらないこと:

  • コマンドラインインターフェース(tsc --watch などそのまま使える)
  • tsconfig.jsonの基本的な設定
  • TypeScript言語仕様(型チェックのルールは同じ)

実際どれくらい速くなる?

公式ブログで発表された実プロジェクトでのベンチマーク結果です。

ビルド時間比較(実プロジェクト)

プロジェクト現在(tsc 6.0)TS 7.0(tsgo)高速化率
VS Code89.11秒8.74秒10.2倍
TypeORM15.80秒1.06秒9.9倍
Sentry133.08秒16.25秒8.2倍
Playwright9.30秒1.24秒7.5倍

※ 出典:Progress on TypeScript 7.0 - December 2025

体感的な影響

開発中のwatch モード:

# 1ファイル変更時のリビルド
現在: 約3-5秒待ち
TS 7.0: 約0.5-1秒(ほぼ即座)

CI/CDでのビルド:

# Next.js大規模プロジェクトの例
現在: ビルド全体で8-10分
TS 7.0: ビルド全体で3-4分(型チェックが主な短縮対象)

なぜこんなに速くなる?

TypeScript 7.0 performance comparison

3つの主要な改善により、最大10倍の高速化を実現しています。

1. Node.js起動コストがゼロに

現在のtscは、毎回Node.jsを起動しています。

# 現在のtsc
$ tsc --noEmit
# ↓内部的に以下が実行される
node /usr/local/lib/node_modules/typescript/bin/tsc --noEmit
# Node.js起動: 200-300ms
# tscロード: 100-200ms

tsgoはネイティブバイナリのため、この起動時間がなくなります。

# TypeScript 7.0
$ tsgo --noEmit
# 即座に起動(起動時間ほぼゼロ)

小さいプロジェクトほど恩恵が大きい理由:

  • 100ファイル規模: 起動時間が処理時間の20-30%を占める
  • 5000ファイル規模: 起動時間は処理時間の5%以下

2. 全CPUコアを使った並列処理

現在のtsc:

# シングルスレッド処理
CPU使用率: 1コア = 100%、残り7コア = ほぼ0%

TypeScript 7.0:

# 完全並列処理
CPU使用率: 全8コア = 80-90%

Reactプロジェクトで1000個のコンポーネントファイルがある場合、8コアCPUなら理論上8倍速くファイル解析できます。

3. メモリ効率の改善

大規模Next.jsプロジェクトでの実測:

# 現在のtsc
メモリ使用量: 約800MB
スワップ発生: たまにある

# TypeScript 7.0
メモリ使用量: 約350MB
スワップ発生: ほぼなし

メモリが少ないマシン(8GB以下)でも快適に開発できるようになります。

TypeScript 6.0の役割

TypeScript 7.0への移行前に、TypeScript 6.0が重要な役割を果たします。

6.0は「橋渡し」リリース

TypeScript 6.0は、JavaScriptベースの最後のリリースであり、5.9系と7.0の橋渡しとして位置づけられています:

主な特徴:

  • 互換性重視: 5.9からの移行を容易にする
  • 7.0の前哨: 非推奨設定を削除し、7.0と同じ挙動に調整
  • 最終版: 6.1以降はリリースされず、次は7.0へ
  • 併用可能: エディタで6.0、コマンドラインで7.0の併用が推奨される場合もある

6.0と7.0の使い分け

開発環境によって、以下のような使い分けが可能です:

# エディタ(VS Code): TypeScript 6.0の言語サービスを使用
# → 既存のプラグインやツールとの互換性を優先

# コマンドライン: TypeScript 7.0(tsgo)を使用
# → 高速なビルドと型チェック
npm install -g @typescript/native-preview
tsgo --noEmit  # 型チェックのみ

このアプローチにより、既存のツールチェーンを維持しながら、ビルド高速化の恩恵を受けられます。

移行時の注意点:tsconfig.jsonの変更

TypeScript 6.0/7.0で削除される設定があります。

削除される設定一覧

{
  "compilerOptions": {
    "target": "es5",               // ❌ 削除(es2015以上必須)
    "baseUrl": "./",               // ❌ 削除
    "outFile": "./bundle.js",      // ❌ 削除
    "charset": "utf8",             // ❌ 削除
    "moduleResolution": "node",    // ❌ 削除(bundler/nodenext推奨)
    "strict": false                // ⚠️ デフォルトがtrueに変更
  }
}

影響を受けるプロジェクト

1. target: “es5” を使用している場合

対象:

  • IE11対応が必要なプロジェクト
  • 古いAndroid WebView対応が必要なアプリ

対処法:

// tsconfig.json
{
  "compilerOptions": {
    "target": "es2015"  // es5 → es2015 に変更
  }
}

古いブラウザ対応が必要な場合は、Babel を併用します。

npm install --save-dev @babel/preset-env
// babel.config.json
{
  "presets": [
    ["@babel/preset-env", {
      "targets": "> 0.25%, not dead"
    }]
  ]
}

2. baseUrl を使用している場合

対象:

// baseUrl: "./src" の設定で以下のようなimportをしている
import { Button } from 'components/Button';
// ↑ 相対パス(../../)を使わないimport

対処法(推奨):

Node.js 16.9以降のSubpath imports を使用します。

// package.json
{
  "imports": {
    "#components/*": "./src/components/*",
    "#utils/*": "./src/utils/*",
    "#hooks/*": "./src/hooks/*"
  }
}
// 修正後のimport
import { Button } from '#components/Button';
import { formatDate } from '#utils/date';

対処法(簡易版):

TypeScript 5.0以降の paths のみ使用(baseUrl不要)。

// tsconfig.json
{
  "compilerOptions": {
    "paths": {
      "@components/*": ["./src/components/*"],
      "@utils/*": ["./src/utils/*"]
    }
  }
}

3. outFile を使用している場合

対象:

  • 単一ファイルバンドルを生成しているプロジェクト
  • AMD/SystemJS モジュール形式を使用しているレガシーコード

対処法:

モダンなバンドラーに移行します。

# esbuild(最速)
npm install --save-dev esbuild

# webpack(プラグインエコシステムが豊富)
npm install --save-dev webpack webpack-cli ts-loader

# vite(開発体験が良い)
npm install --save-dev vite @vitejs/plugin-react

今から準備すべきこと

1. tsconfig.jsonのチェック

以下のコマンドで削除予定の設定を確認できます。

# tsconfig.jsonを確認
cat tsconfig.json | grep -E "target|baseUrl|outFile|charset"

もし該当する設定があれば、前述の対処法で修正してください。

2. CI/CDの動作確認

TypeScript 7.0は2026年Q1リリース予定ですが、ベータ版を試せます。

# .github/workflows/test.yml
jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        ts-version: ["5.7", "7.0-beta"]
    steps:
      - name: Install TypeScript
        run: npm install -g typescript@${{ matrix.ts-version }}
      
      - name: Type check
        run: tsc --noEmit

3. エディタ拡張の更新確認

VS Code:

その他のエディタ:

  • IntelliJ IDEA: 動作確認中
  • Vim/Neovim(LSP使用): 対応予定

ツールの互換性

影響を受けるツール

ts-node: 現時点で非対応

# 代替ツール
npm install --save-dev tsx
# tsx コマンドで代替可能(同等の速度改善も期待できる)

@swc/core / esbuild: 影響なし

  • これらは既に独自の高速トランスパイラを使用しているため、型チェック部分のみTS 7.0の恩恵を受ける

Vite / Next.js: 問題なし

  • TypeScriptコンパイラは型チェックのみで使用
  • トランスパイルは別のツール(esbuild / swc)が担当

影響を受けないツール

以下は引き続き問題なく使用できます:

  • ESLint(@typescript-eslint)
  • Prettier
  • Jest(ts-jest)
  • Storybook

Reactプロジェクトでの実例

Before(TypeScript 5.7)

# 開発サーバー起動
$ npm run dev
# 型チェック: 12秒待ち...

# ファイル保存時
$ # コンポーネント修正
# リビルド: 3-4秒待ち...

After(TypeScript 7.0 予想)

# 開発サーバー起動
$ npm run dev
# 型チェック: 2秒で完了

# ファイル保存時
$ # コンポーネント修正
# リビルド: 0.5-1秒で完了(ほぼ即座)

よくある質問

Q: 既存のコードを書き換える必要は?

A: ありません。TypeScript言語仕様は変わらないため、.tsファイルの修正は不要です。tsconfig.jsonの一部設定のみ要確認。

Q: Node.jsは不要になる?

A: いいえ。tscコマンド自体はNode.js不要で動きますが、開発サーバー(Next.js / Vite等)は引き続きNode.jsで動作します。

Q: パッケージサイズは増える?

A: いいえ。tsgoはネイティブバイナリですが、npm installでは従来通りダウンロードされます。プロジェクトのnode_modules全体のサイズはほぼ変わりません。

Q: いつから使える?

A: 2026年初頭を目標にリリース予定ですが、具体的な日程は未定です。ベータ版は既にGitHub で公開されており、npm で @typescript/native-preview としてインストールできます。

まとめ

TypeScript 7.0の主な変化:

速度向上(実プロジェクトでの実測):

  • VS Code: 10.2倍高速化
  • TypeORM: 9.9倍高速化
  • Sentry: 8.2倍高速化
  • Playwright: 7.5倍高速化

TypeScript 6.0の役割:

  • 5.9から7.0への「橋渡し」リリース
  • JavaScript実装の最終版(6.1以降はリリースなし)
  • 6.0と7.0の併用が可能(エディタ:6.0、ビルド:7.0)

移行の注意点:

  • tsconfig.jsonの一部設定削除(target: es5, baseUrl, moduleResolution: node等)
  • --strict がデフォルトで有効化
  • ts-nodeは代替ツール(tsx)への移行推奨
  • CI/CDでの動作確認を事前に実施

今すべきこと:

  1. tsconfig.jsonで target, baseUrl, outFile, moduleResolution を確認
  2. 該当する設定があれば移行パスを検討
  3. ベータ版(@typescript/native-preview)で事前検証
  4. 2026年初頭のリリースを待つ

大規模なReact/Next.jsプロジェクトで開発している方は、ビルド時間の劇的な短縮で開発体験が大きく改善されます。今のうちに移行準備を進めておくことをお勧めします。

参考リンク