こんにちは。TypeScriptの世界へようこそ!
現場でバリバリとコードを書き散らしていると、どうしても「tsconfig.json」という設定ファイルの複雑さに頭を抱えてしまう時期がありますよね。特に `files` という設定項目は、普段あまり見かけないだけに「これ、結局何のためにあるの?」と迷子になりがちです。
今日は、この `files` プロパティの正体を、お買い物のシーンに例えて紐解いていきましょう。大丈夫、仕組みさえ分かれば魔法のように便利になりますよ。
—
`files` プロパティは「VIPリスト」
TypeScriptのプロジェクトには、`include` や `exclude` という設定がよく使われます。これらは「フォルダごと一括で指定する」ための設定です。
例えるなら、「このカゴの中に入っている野菜を全部レジに通して!」と店員さんに伝えるようなもの。とても効率的ですよね。
一方で、今回の主役である `files` は、全く違うアプローチをとります。これは、「このリストに載っている特定のファイルだけを、特別にレジへ連れて行く」というVIPリストなんです。
なぜ「一括指定」じゃダメなの?
普通は `include` で「srcフォルダの中身全部!」と指定すれば事足ります。でも、こんなケースに出会うことはありませんか?
- 「プロジェクト全体はコンパイルしなくていいけど、この1ファイルだけをスクリプトとして動かしたい」
- 「巨大なプロジェクトの中で、特定の1ファイルだけを例外的に個別に管理したい」
そんな時、わざわざ広い設定をいじるよりも、「この子だけは特別ね」と `files` に名前を書いてあげる方が、結果的に事故が減り、管理が楽になるんです。
—
実際に書いてみよう
`tsconfig.json` の中身を覗いてみましょう。使い方はとてもシンプルです。
{
“compilerOptions”: {
“target”: “esnext”,
“module”: “commonjs”,
“strict”: true
},
// includeで「srcフォルダ全部!」と指定しているけれど…
“include”: [“src//”],
// filesを使うと、リストに書かれたファイルが最優先・特別扱いされます
“files”: [
“scripts/special-task.ts”
]
}
ここで注意!「files」のちょっと強気な性格
`files` に書いたファイルは、TypeScriptにとって「絶対的な存在」になります。
- `exclude` を無視する: 通常、`exclude` で「このフォルダは無視して!」と伝えても、`files` に書かれたファイルは強制的にコンパイル対象になります。
- ファイル単位の指定: `include` のように「フォルダごと」は指定できません。必ず「1ファイルずつ」フルパスで書く必要があります。
「えっ、面倒くさそう…」と思いましたか?
そうなんです。実はこの「面倒くささ」こそが、`files` の最大のメリットなんです。
あえて面倒な書き方を強制することで、「このファイルは特別な事情があるから、うっかり設定変更で対象外にならないように明示しておこう」という、プログラミング上の「封印」のような役割を果たしてくれるんですね。
—
こんな時は「files」を使って!
実務で私が `files` を使うのは、主にこんなシチュエーションです。
1. 単発のスクリプト開発:
プロジェクトの隅っこに置いてある、テスト用の小さなスクリプトが、いつの間にかコンパイル対象から外れてエラーに気づかない…なんて悲劇を防ぐため。
2. 設定の依存関係が複雑な時:
巨大なレガシーコードを整理している時、「まずはこの1ファイルだけTypeScriptで型安全に書き直して、確実にコンパイルを通したい!」という最初の一歩として。
—
最後に:完璧じゃなくていいんです
TypeScriptの設定は、最初から全てを理解しようとするとパンクしてしまいます。「今は `include` だけで十分だな」と思ったら、それで100点満点です。
`files` は、言わば「困った時の救急箱」。
「あれ? 特定のファイルだけうまく読み込まれないぞ?」とか「このファイルだけは絶対にコンパイルさせたい!」という時に、そっとこの存在を思い出してあげてください。
あなたが書くコードが、少しでも快適に、そして楽しく動くようになることを応援しています。またいつでも聞きに来てくださいね!

コメント