【入門編】 compilerOptions.typeRoots – TypeScript実践ガイド

こんにちは!フロントエンドの現場で、日々TypeScriptという相棒と格闘しているチーフアーキテクトです。

TypeScriptを触り始めたばかりの頃、「型定義ファイルが見つかりません!」というエラーに頭を抱えたことはありませんか? まるで、大事な書類をどこにしまったか忘れてしまったときのような、あの焦る気持ち。

今日は、そんな「型定義の迷子」を防ぐための魔法の鍵、`tsconfig.json` の `typeRoots` について、少しだけ掘り下げてお話ししましょう。難しい技術用語は一旦横に置いて、まずは「お買い物の流れ」に例えて解説しますね。

—

1. 型定義ファイルって、そもそも何者?

TypeScriptを書いていると、`@types/lodash` や `@types/react` といったパッケージを見かけますよね。これらは、JavaScriptのライブラリに対して「この関数はこういう使い方をするんだよ」という「説明書」を届けてくれる存在です。

TypeScriptくんは、コードをチェックするときに、この「説明書」を必死に探します。
「あれ? 今使おうとしている関数、どんな引数が必要なんだっけ? ……よし、説明書を探しに行こう!」という具合です。

2. 「typeRoots」は「説明書の保管場所」

通常、TypeScriptは `node_modules/@types` という特別なフォルダを自動的に探しに行きます。ここは、TypeScript界における「巨大な図書館の書庫」みたいな場所です。

しかし、開発を進めていると、こんなケースに出くわすことがあります。

  • 「自社で作成した独自の型定義を、特定のフォルダにまとめておきたい」
  • 「標準の場所とは違う場所にある型定義も読み込ませたい」

そんなとき、「おいTypeScriptくん、説明書はここにもあるから探してくれよ!」と教えてあげるための設定が `typeRoots` なのです。

例えるなら、「いつもの図書館だけじゃなくて、自分の机の引き出しの中も探してみてね」と指定するようなものですね。

—

3. 実践!設定の書き方

では、実際に `tsconfig.json` を見てみましょう。

{
“compilerOptions”: {
// ここで型定義を探す場所を指定します
// 「./types」というフォルダを優先的に見てね、という命令です
“typeRoots”: [
“./types”,
“./node_modules/@types”
]
}
}

ここで注意!つまずきやすいポイント

もし `typeRoots` を自分で書くなら、「いつもの場所(node_modules/@types)」も一緒に書いておくのが鉄則です。

これだけを忘れて「`typeRoots: [“./types”]`」とだけ書いてしまうと、TypeScriptくんは「えっ、自作のフォルダしか見なくていいの? 今まで使ってた標準のライブラリの説明書は捨てちゃっていいの?」とパニックになり、プロジェクト全体がエラーだらけになってしまいます。

「いつもの場所」と「新しい場所」、両方仲良く並べてあげるのが、現場で生き残るためのコツですよ。

—

4. 現場からのアドバイス:無理に使わなくても大丈夫

ここまで読んで、「なるほど、じゃあとりあえず設定しておこう!」と思った方。ちょっと待ってくださいね。

実は、`typeRoots` は非常に強力な設定ですが、基本的には触らなくていい設定でもあります。TypeScriptは「何も設定しなくても、標準の場所をちゃんと探してくれる」という、とても優秀なデフォルト設定になっているからです。

  • 基本はそのまま: 特別な理由がない限り、設定しなくてOK。
  • 困ったときだけ使う: 「特定のフォルダに型定義を整理したい」という明確な目的ができたときに、そっと書き足す。

これが、TypeScriptと長く付き合うための「ほどよい距離感」です。

—

最後に:迷子になっても大丈夫ですよ

TypeScriptの設定ファイルを見ていると、まるで終わりのない迷路に迷い込んだような不安を感じることもあるかもしれません。でも、大丈夫。今回紹介した `typeRoots` も、あくまで「TypeScriptくんが説明書を見つけやすくしてあげるための工夫」に過ぎません。

もしエラーが出ても、それは「ここを探してほしいな」と対話している証拠です。一つずつ紐解いていけば、必ず理想の環境が作れます。

また何か壁にぶつかったら、いつでも聞きに来てくださいね。あなたのコードが、今日も健やかに動きますように!

コメント

タイトルとURLをコピーしました