Microsoftは2025年7月8日、TypeScriptの最新バージョンとなるTypeScript 5.9のベータ版を公開しました。
今回のアップデートでは、開発の起点となる設定ファイルの簡素化や、実行パフォーマンスを最適化するための新しいインポート構文の導入、さらにはエディタ上での視認性を高めるUXの改善など、多岐にわたる機能追加が行われています。
本記事では、TypeScript 5.9 Betaで導入された主要な新機能や変更点について、具体的なコード例を交えながら詳しく解説します。
開発環境のセットアップを効率化する「tsc –init」の刷新
TypeScriptプロジェクトを開始する際、多くの開発者が最初に実行するのがtsc --initコマンドです。
これまでは、このコマンドを実行すると膨大な数の設定項目がコメントアウトされた状態で出力されていました。
従来の課題と刷新の背景
従来のtsconfig.jsonは、どのような設定があるのかを網羅的に知るための「カタログ」としての役割を果たしていました。
しかし、多くの開発者にとってはその情報量が多すぎ、ファイルを作成した直後に不要なコメントをすべて削除するという作業が常態化していました。
現在の開発環境では、エディタのオートコンプリート機能や公式サイトのドキュメントが充実しているため、設定ファイル内にすべての説明を記述しておく必要性が薄れています。
このフィードバックを受け、TypeScript 5.9では生成される設定ファイルの内容が劇的に簡略化されました。
TypeScript 5.9における新しいデフォルト設定
新しいtsc --initでは、現代的なプロジェクトで推奨される設定があらかじめ有効化されています。
特に注目すべきは、モジュールの扱いがnodenextに、ターゲットがesnextに設定されたことです。
以下は、TypeScript 5.9 Betaで生成される標準的なtsconfig.jsonの例です。
{
"compilerOptions": {
/* 環境設定 */
"module": "nodenext",
"target": "esnext",
"types": [],
/* 出力設定 */
"sourceMap": true,
"declaration": true,
"declarationMap": true,
/* 厳格な型チェック */
"noUncheckedIndexedAccess": true,
"exactOptionalPropertyTypes": true,
/* 推奨オプション */
"strict": true,
"jsx": "react-jsx",
"verbatimModuleSyntax": true,
"isolatedModules": true,
"noUncheckedSideEffectImports": true,
"moduleDetection": "force",
"skipLibCheck": true
}
}
新たにnoUncheckedSideEffectImportsがデフォルトで含まれるなど、より安全でモダンな開発に適した構成になっています。
また、types: []が明示されることで、不要な型定義ファイルがグローバルに読み込まれるのを防ぎ、コンパイル速度の向上にも寄与します。
モジュール評価を遅延させる「import defer」のサポート
TypeScript 5.9では、ECMAScriptで提案されている「import defer」構文が新たにサポートされました。
これは、モジュールのロード自体は行いつつも、その実行を実際にプロパティへアクセスするまで遅延させる機能です。
import deferの構文と動作
この機能を利用する場合、名前付きインポートやデフォルトインポートは使用できず、名前空間インポート(* as namespace)のみが許可されます。
// ./heavy-module.ts
console.log("モジュールが実行されました!");
export const data = 42;
// main.ts
import defer * as heavy from "./heavy-module.js";
console.log("まだ実行されていません");
// ここで初めてモジュール内のコードが実行される
console.log(heavy.data);
このコードを実行した際の出力結果は以下のようになります。
まだ実行されていません
モジュールが実行されました!
42
パフォーマンスへのメリット
大規模なアプリケーションでは、起動時に多数のモジュールを一斉に評価することで、スタートアップにかかる時間が長くなるという課題がありました。
import deferを活用することで、特定の機能が必要になるまで初期化処理を先延ばしにできるため、アプリケーションの初期起動パフォーマンスを改善することが期待できます。
ただし、この機能はランタイム側(Node.jsやブラウザ)のサポートが必要です。
現時点では、--moduleの設定がpreserveまたはesnextの場合にのみ有効となります。
Node.js v20に準拠した「–module node20」の追加
これまで、Node.js向けのモジュール設定としてnodenextが提供されてきました。
nodenextは常にNode.jsの最新の挙動を追いかける「浮動的な」設定ですが、今回新たに固定的な設定として「node20」が導入されました。
nodenextとの違い
--module node20を指定すると、Node.js v20の動作がモデル化されます。
大きな違いの一つとして、targetのデフォルト値が挙げられます。
| 設定項目 | –module nodenext | –module node20 |
|---|---|---|
| デフォルト target | esnext | es2023 |
| 将来の変更 | Node.jsの進化に合わせて変化する | Node.js v20の仕様で安定する |
プロジェクトのランタイム環境がNode.js v20に固定されている場合、この設定を使用することで将来的なTypeScriptのアップデートによる意図しない挙動の変化を抑制できます。
エディタ上での情報確認を容易にする「拡張可能なホバー」
開発効率に直結するIDE(Visual Studio Code等)のツールチップ機能も進化しています。
TypeScript 5.9では、Expandable Hovers(拡張可能なホバー)がプレビュー機能として導入されました。
型の詳細をその場で深掘りする
これまでは、複雑な型の変数にマウスをホバーしても、型名が表示されるだけでその中身(プロパティ一覧など)を確認するには、定義元へジャンプする必要がありました。
今回のアップデートにより、ツールチップ内に「+」や「-」のアイコンが表示されるようになります。
これをクリックすることで、型エイリアスをその場で展開し、ネストされたプロパティを段階的に確認できるようになります。
これにより、コードの文脈を維持したまま、型の詳細を素早く把握することが可能になります。
ホバーの最大文字数のカスタマイズ
また、非常に長い型定義が表示される際に、内容が省略されてしまい重要な情報が見えないという不満がありました。
TypeScript 5.9の言語サーバーでは、新たに最大表示文字数を設定できるようになりました。
VS Codeの設定ファイル(settings.json)で以下のように指定できます。
{
"js/ts.hover.maximumLength": 1000
}
デフォルト値も従来より大きく設定されており、標準状態でもより多くの情報が表示されるよう改善されています。
コンパイルパフォーマンスの最適化
TypeScript 5.9では、内部的な処理の効率化も進んでおり、特に大規模なプロジェクトや複雑な型ライブラリを使用している環境で恩恵が得られます。
マッパーにおけるインスタンス化のキャッシュ
ZodやtRPCのような、高度な型推論を多用するライブラリでは、中間的な型の生成が繰り返されることでコンパイル速度が低下したり、型のネスト制限に達したりすることがありました。
今回、型パラメータの置換処理においてキャッシュ機構が強化されたことで、不要な再計算やメモリ割り当てが削減されました。
ファイル存在チェックの高速化
ファイルシステムの存在確認を行う内部関数において、不要なクロージャ(関数オブジェクト)の生成を回避する修正が行われました。
大規模なプロジェクトでは数千回以上のファイルチェックが発生するため、この小さな改善が全体のコンパイル時間を最大で約11%短縮させるケースもあると報告されています。
TypeScript 7への道筋とネイティブポートの動向
現在、TypeScriptチームはRustによる「ネイティブ版TypeScript」の開発にも注力しています。
これは将来的に「TypeScript 7」としてリリースされる予定であり、現在そのプレビュー版がナイトリービルドとして提供されています。
TypeScript 5.9は、既存のJavaScriptベースのコンパイラとしての完成度を高めつつ、次世代の高速なコンパイル環境への橋渡しとなる重要なステップと言えます。
開発者は、現在の安定したエコシステムを享受しながら、将来の劇的な進化に備えることができます。
まとめ
TypeScript 5.9 Betaは、プロジェクトのセットアップから日常的なコーディング、そして実行時のパフォーマンスまで、開発サイクルのあらゆる段階でメリットをもたらすアップデートとなっています。
- tsc –initの刷新により、クリーンでモダンな設定からプロジェクトを開始できる。
- import deferにより、アプリケーションの起動時間を最適化する手段が提供された。
- 拡張可能なホバーにより、エディタ上での型情報の確認がよりスムーズになった。
- 内部最適化により、大規模プロジェクトでのコンパイル速度がさらに向上した。
ベータ版でのフィードバックを経て、数ヶ月後には正式版のリリースが予定されています。
新機能をいち早く試したい場合は、npm install -D typescript@betaを実行して、進化した開発体験を体感してみてください。
