TypeScriptの「ビルドが遅い」を解決する:`skipLibCheck`という名の処方箋
フロントエンドの現場で、開発のテンポを削ぐ最大の敵。それは「ビルド時間」です。
特にプロジェクトが肥大化してくると、`npm run build` を叩いてからコーヒーを淹れに行っても戻ってきたらまだ終わっていない……なんて経験、一度はありますよね。
中級者へのステップアップを目指す君なら、一度は`tsconfig.json`の迷宮に迷い込んだことがあるはず。その中で、多くの人が「とりあえずtrueにしておけばOK」と教わっているのが `skipLibCheck` です。
今日は、これが単なる「おまじない」ではなく、なぜ必要なのか、そして「もしオフにしたらどうなるのか」という泥臭い裏側まで、シニアの視点で深掘りしていきます。
—
`skipLibCheck` は「思考停止」ではない
結論から言えば、`skipLibCheck: true` は現代のTypeScript開発において「必須の設定」です。
これの設定を `false` にすると、TypeScriptコンパイラ(`tsc`)は、あなたの書いたコードだけでなく、`node_modules` 内にあるすべてのサードパーティライブラリの型定義ファイル(`.d.ts`)までを再帰的にチェックしに行きます。
想像してみてください。あなたが10行のコードを書いただけで、コンパイラが数万行あるライブラリの型定義を毎回イチから精査する。……これがどれだけ無駄なオーバーヘッドか。
ブラウザとコンパイルの裏側
TypeScriptは「コンパイル」と言いつつ、最終的にはJavaScriptに変換されるだけです。ブラウザはTypeScriptの型なんて1バイトも理解できません。
`skipLibCheck: false` にした際、コンパイラは `node_modules` 内で型定義の矛盾(例えば、古いバージョンのライブラリが想定していない型定義を使っているなど)を見つけるたびに、エラーを吐いてビルドを止めてしまいます。ぶっちゃけ、他人が書いたライブラリの型定義のミスまで、なぜあなたが修正しないといけないのでしょうか?
—
実践:tsconfig.json の最適解
まずは、現場で即戦力となる設定を共有します。余計なトラブルを避け、ビルド時間を最小化するための構成です。
{
“compilerOptions”: {
/
- 【極めて重要】
- 依存ライブラリの型チェックをスキップする。
- これがないと、他人のライブラリのバグでビルドが落ちる地獄を見る。
/
“skipLibCheck”: true,
/
- 開発体験(DX)を向上させるためのセットアップ
/
“target”: “ESNext”,
“module”: “ESNext”,
“moduleResolution”: “node”,
“strict”: true, // 型の厳密さはここで担保する
“esModuleInterop”: true, // CommonJSとESMの相互運用をスムーズに
“skipDefaultLibCheck”: true // デフォルトのライブラリ(DOMなど)のチェックもスキップ
},
“include”: [“src//”]
}
—
「それでもオフにする」唯一のタイミング
僕が唯一 `skipLibCheck: false` を検討するのは、「ライブラリの型定義を自分でいじってパッチを当てたい時」や「ライブラリ選定の際、そのパッケージの型定義が致命的に壊れていないか確証を得たい時」だけです。
もし君が「自分の書いたコードが正しいか不安だから」という理由でオフにしようとしているなら、それは間違いです。型定義のチェックは `skipLibCheck` に頼るのではなく、以下のルールを徹底することで解消しましょう。
1. `strict: true` を維持する: 自分のコードの型安全は、自分の領域で担保する。
2. `@types` の管理を徹底する: `package.json` の依存関係をクリーンに保つ。
3. CI/CDでチェックする: ローカルのビルド速度を犠牲にするのではなく、PRを出した後のCI環境で厳密なチェックを行う。
—
シニアからのアドバイス
「ツールに振り回されるな、ツールを使いこなせ」
`skipLibCheck: true` にすることで、ビルド時間は劇的に速くなります。その浮いた時間で、君はもっと「どうすれば読みやすいコードが書けるか」「どうすれば再利用性の高いコンポーネントが設計できるか」という、人間にしかできないクリエイティブな悩みに時間を投資してください。
コンパイラに働かせる場所を間違えてはいけません。`node_modules` の番人はコンパイラではなく、君の冷静な判断力であるべきです。
もしチーム内で「`skipLibCheck` をオフにしたい」と言うメンバーがいたら、まずは今日話した内容を伝えて、冷静に議論をリードしてあげてください。それができるエンジニアこそが、今の現場が一番求めている「頼れるアーキテクト」への第一歩ですよ。

コメント