TypeScript 7がリリースされ、「isolated declarations」が導入されました。これは、大規模なモノレポにおいてファイルの並列コンパイルを可能にし、開発者のフィードバックループを高速化するコンパイラモードです。
なぜ今、isolated declarationsが重要なのか
このリリースまで、TypeScriptコンパイラは宣言ファイル(.d.ts)をシングルスレッドで処理していました。数百ものパッケージにまたがるコードベースでは、このステップがビルドパイプライン全体のボトルネックになることがよくありました。isolated declarationsは、型チェックの作業を複数のコアに分散させることで、すべてのライブラリを一つのリポジトリで管理しているチームのビルド時間を大幅に短縮します。
CIジョブを実行している組織や、高速なローカル再ビルドを必要とする組織にとって、その影響は即座に現れます。
並列型チェックへの道のり
Microsoftは何年も前に増分コンパイル(incremental compilation)を追加しましたが、ファイル同士が依存し合っていたため、宣言フェーズは逐次的な処理のままでした。モノレポの規模が拡大するにつれ、このシングルスレッドによる処理はコストの高いボトルネックとなりました。isolated declarationsは、各ファイルのパブリックなインターフェースを独立したユニットとして扱い、それらを同時に検証することで、依存関係の連鎖を断ち切ります。
恩恵を受ける層と、そうでない層
- 大規模なモノレポを運用する開発チーム – 特にマルチコアCPUを搭載したCIエージェントにおいて、ビルド時間の劇的な短縮を実感できます。
- 小規模なプロジェクトや単一パッケージのアプリ – 宣言ステップが全体のコンパイル時間に占める割合はもともと非常に小さいため、改善はわずかかもしれません。
- リソースの限られたハードウェアを使用しているチーム – 同様の理由により、改善は限定的です。
TypeScript 7 のその他の展開
isolated declarationsは、安全性に焦点を当てた一連のアップグレードとともに導入されます。
- Strict mode(厳格モード)の洗練 –
strictIndexSignaturesなどの新しいチェックにより、存在しない可能性のあるオブジェクトキーにコードがアクセスした際に警告が表示されます。 - 名前付きタプル要素(Named tuple elements) – タプルの各位置にラベルを付けることができ、APIのシグネチャが自己文書化されます。
satisfies演算子の強化 – 複雑なジェネリクスの扱いが向上し、可読性を損なうことなく型推論が改善されます。- Async context の伝播 – AsyncContext APIのサポートにより、非同期コールスタックのトレースが容易になります。
- デコレータ・メタデータ – TC39の提案により、実行時のコードがクラスのデコレーションを検査できるようになります。
- 明示的な分散性注釈(Explicit variance annotations) – ジェネリックパラメータに
+または-を使用することで、共変性(covariance)または反変性(contravariance)を示し、型チェッカーの精度を高めます。
これらの追加機能は、「タイプファースト」な言語としてのTypeScriptの評価をさらに強固なものにしますが、コードベースの規模に応じて増大する課題に直接取り組んでいるのは、isolated declarationsだけです。
次に注目すべきこと
結論
isolated declarationsは、モノレポを多用するチームに高速なビルドを提供します。CIの実行時間に対してコストを支払っている組織や、ローカルの再ビルドの遅さに悩まされている組織にとって、TypeScript 7へのアップグレードは、測定可能な時間とコストの節約につながる低リスクな選択です。その他のリリース内容も有用なセーフティネットを追加していますが、並列型チェックエンジンこそが、現代のJavaScript開発におけるスケーラビリティの課題に直接応える目玉機能といえます。
