こんにちは!フロントエンドの現場で日々コードと格闘しているチーフアーキテクトです。
TypeScriptを触り始めると、避けて通れないのが `tsconfig.json` という設定ファイル。「何を書けばいいのか分からない!」「とりあえずコピペでいいや」と悩んでいる方も多いのではないでしょうか?
今日はその中でも、特に初心者さんが「迷子になりがち」な `moduleResolution` という設定について、身近な例え話を交えながら紐解いていきましょう。大丈夫、仕組みさえ分かれば怖くありませんよ。
—
そもそも「モジュール解決」って何?
TypeScriptにおける「モジュール解決」とは、「プログラムの中で『この部品(モジュール)を使いたい!』と言ったとき、PCの中のどこからその部品を探してくるか?」というルールブックのことです。
例えば、あなたがスーパー(プログラム)で「牛乳(モジュール)」を探しているとします。
- A店は「入り口から見て右の棚」にあると決まっている。
- B店は「店員に聞けばバックヤードから持ってきてくれる」と決まっている。
この「探し方のルール」が `moduleResolution` です。これの設定を間違えると、TypeScriptは「そんなファイル、どこにあるの!?」とパニックになってしまうわけですね。
—
3つの主な選択肢:どれを選べばいいの?
現代のWeb開発でよく目にする3つの設定について、それぞれのキャラクターを紹介します。
1. `node` (古き良きスタンダード)
昔からある設定です。Node.jsの伝統的な探し方をそのまま使います。
- イメージ: 「とりあえずフォルダの中を片っ端から探す」という職人タイプ。
- 今の立ち位置: もはや「骨董品」です。新しいプロジェクトで使う理由はほとんどありません。
2. `node16` / `nodenext` (厳格なルール遵守)
現在のNode.jsの仕様(ECMAScript Modules)にバッチリ合わせるための、非常に真面目な設定です。
- イメージ: 「ルールブックに一行でも違反したら絶対に許さない!」という厳しい教師タイプ。
- 今の立ち位置: Node.jsでバックエンドを書くなら必須ですが、フロントエンドのReactやVueなどの環境では、時に厳しすぎて苦労することがあります。
3. `bundler` (現代のフロントエンドの救世主)
これが本日の主役です!ViteやWebpackといった「バンドラー」と呼ばれる道具を使っているなら、これを選べば間違いありません。
- イメージ: 「現代の複雑な開発環境を熟知している、頼れるガイドさん」。
- 今の立ち位置: React, Next.js, Viteなどの環境なら、これ一択です。
—
具体的な設定方法:`tsconfig.json` はこう書こう!
もしあなたが Vite や Next.js で開発しているなら、以下のように設定してみてください。
{
“compilerOptions”: {
// 現代的な開発環境(Vite, Next.jsなど)では、迷わず ‘bundler’ を選びましょう
“moduleResolution”: “bundler”,
// モジュールの形式は ‘ESNext’ にするのが今のトレンドです
“module”: “ESNext”,
// 他の推奨設定も添えておきますね
“target”: “ESNext”,
“strict”: true,
“esModuleInterop”: true
}
}
なぜ `bundler` が推奨されるのか?
今のフロントエンド開発では、`import` をする際にファイルの拡張子(`.ts` や `.js`)を書かないのが普通ですよね?
`node` 系の設定だと、「拡張子がないとファイルを見つけられないよ!」と怒られてしまうことが多いんです。でも `bundler` なら、「ああ、裏側でWebpackやViteがうまく解決してくれるんだね。いいよいいよ!」と、現場の事情を汲み取って柔軟に対応してくれるんです。
—
つまずいた時の処方箋
もし設定を変えてもエラーが消えないときは、以下の3つをチェックしてみてください。
1. エディタの再起動: VS Codeが設定変更を読み込めていないだけかもしれません。「コマンドパレット(Ctrl/Cmd + Shift + P)から `TypeScript: Restart TS server`」を試してみてください。
2. 拡張子の有無: 一部の環境では、あえて拡張子を求められることがあります。エラーメッセージをよく読んでみましょう。
3. tsconfigの配置場所: `tsconfig.json` がプロジェクトのルートディレクトリにしっかり置かれているか確認してくださいね。
—
最後に:完璧主義にならなくて大丈夫
TypeScriptの設定は奥が深く、ベテランでもたまにハマるポイントです。今日紹介した `bundler` も、あくまで「今のスタンダード」に過ぎません。
開発していて分からないエラーが出たら、それは「あなたがより良くコードを書こうとしている証」です。失敗を恐れず、色々と設定をいじってみてください。その泥臭い試行錯誤の時間が、あなたを本当のエンジニアへと育ててくれるはずですよ。
それでは、良いコーディングライフを!応援しています!

コメント