Loading

ROUTE

ルートゼロの
アクティビティ

npx tscとは?TypeScriptコンパイルの基本

3

TypeScriptの手順でよく見る`npx tsc`。短いコマンドですが、「npxとtscはそれぞれ何をしている?」「グローバルにTypeScriptを入れる必要はある?」「tsconfig.jsonはいつ読まれる?」まで説明しようとすると意外と曖昧になりがちです。結論から言うと、npxはnpmパッケージの実行環境を用意し、tscはTypeScript Compilerを実行します。プロジェクトにTypeScriptをローカル依存として入れ、`npx tsc`でそのコンパイラを使うのが理解しやすい運用です。

まず結論:npxは実行役、tscはコンパイラ

名前 役割 例
npx npmパッケージが提供するコマンドを実行する `npx tsc`
tsc TypeScriptソースを型チェック・コンパイルするCLI `tsc –noEmit`
tsconfig.json TypeScript Projectの対象ファイルとCompiler設定を定義する `compilerOptions`, `include`, `exclude`

npmの現行ドキュメントでは、npxはnpm execを利用するコマンドとして扱われます。ローカルにインストールされているパッケージの実行ファイルは実行時のPATHへ追加されるため、プロジェクトに`typescript`が入っていれば、その`tsc`を直接パス指定せず呼び出せます。

用語解説:tsc
TypeScript CompilerのCLIです。TypeScriptコードの型チェックを行い、設定に応じてJavaScriptや型定義ファイルなどを出力します。


まずはローカルにTypeScriptを入れる

チーム開発では、各自のPCに異なるグローバル版を入れるより、ProjectのdevDependencyとしてTypeScriptを固定しておく方がバージョンを揃えやすくなります。

npm install --save-dev typescript
npx tsc --version

この状態なら`npx tsc`はローカルProjectの実行環境から`tsc`を呼び出せます。ローカルに対象packageがない場合、npm exec/npxは条件に応じて取得・実行を提案することがあります。誤ったpackage名を実行しないためにも、Projectへ`typescript`を明示的に追加してから使う方が再現しやすいです。


npx tscだけならtsconfig.jsonを探す

TypeScript公式ドキュメントでは、入力ファイルを指定せず`tsc`を実行すると、現在のディレクトリから親ディレクトリ方向へ`tsconfig.json`を探し、そのProject設定でコンパイルします。npx経由でも実行される本体はtscなので、この挙動は同じです。

npx tsc

`tsconfig.json`には、コンパイル対象や`target`、`module`、`strict`、`outDir`などのCompiler設定を書けます。まずProjectの設定を正しく作り、その設定を基準に`npx tsc`を実行するのが基本です。


注意:ファイル名を直接渡すとtsconfigは無視される

実務で特にハマりやすいのがここです。TypeScript公式では、CLIに入力ファイルを指定した場合、`tsconfig.json`は無視されると明記されています。

npx tsc src/index.ts

このコマンドは「Project設定でindex.tsだけをコンパイル」ではありません。CLIで渡したファイルをCompilerのデフォルト設定や同時指定したオプションで処理します。Projectの`strict`や`paths`などを使うつもりなら、単純なファイル指定へ切り替えない方が安全です。

目的 コマンド
現在のtsconfigでProject全体を確認 `npx tsc`
別の設定ファイルを使う `npx tsc -p tsconfig.build.json`
特定ファイルをCLI設定で処理 `npx tsc src/index.ts`

–projectで使う設定を明示する

複数のtsconfigを使い分けるProjectでは、`–project`または`-p`で設定ファイルや設定ディレクトリを明示できます。

npx tsc --project tsconfig.build.json
# 短縮形
npx tsc -p tsconfig.build.json

frontend、test、buildなどで設定が分かれている場合は、実行するConfigを明示すると「どのtsconfigが使われたか」を追いやすくなります。

型チェックだけなら–noEmitを使う

JavaScriptの出力はBundlerに任せ、TypeScriptには型チェックだけさせたいProjectもあります。その場合は`–noEmit`が便利です。

npx tsc --noEmit

CIやPull Request前のチェックに組み込む場合も、生成物を必要としないなら`–noEmit`を使うと役割が明確になります。Project側で`noEmit: true`を設定しておく方法もあります。

開発中は–watchで変更を監視する

`–watch`を付けると、TypeScript Compilerが対象ファイルを監視し、変更時に再チェック・再コンパイルします。

npx tsc --watch

大規模Projectや特定OS・ファイルシステムで監視負荷が気になる場合は、`tsconfig.json`の`watchOptions`で監視方式を調整できます。通常はまずデフォルトで使い、問題が起きたときに設定を見直します。

package.json scriptsに固定するとチームで揃う

同じコマンドを繰り返すなら、毎回npxのオプションを入力するより`package.json`のscriptsへ名前を付けると、CIとローカルの実行方法を揃えやすくなります。

{
  "scripts": {
    "typecheck": "tsc --noEmit",
    "build:types": "tsc -p tsconfig.build.json",
    "typecheck:watch": "tsc --noEmit --watch"
  }
}
npm run typecheck
npm run build:types

npm scriptsではProjectのローカル実行ファイルが利用できるため、scripts内で毎回`npx`を書く必要はありません。

困ったときに使える確認コマンド

確認したいこと コマンド
使用しているTypeScript版 `npx tsc –version`
実際に解決されたCompiler設定 `npx tsc –showConfig`
別tsconfigの解決結果 `npx tsc -p tsconfig.build.json –showConfig`
型チェックのみ `npx tsc –noEmit`
変更監視 `npx tsc –watch`

特に「設定したはずのCompiler optionが効かない」ときは、ファイルをCLIへ直接渡していないか確認し、`–showConfig`で実際の設定を表示すると切り分けしやすくなります。

よくある質問

npx tscは毎回TypeScriptをダウンロードしますか?

必ずではありません。npmの現行仕様では、ローカルProjectに対象packageの実行ファイルがあればそれを利用できます。必要なpackageがローカル依存にない場合は、npx/npm execが取得・実行を提案することがあります。チーム開発ではTypeScriptをdevDependencyへ固定して使う方がバージョンを揃えやすくなります。

npx tscとnpm run typecheckはどちらを使えばよいですか?

単発の確認ならnpx tscでも問題ありません。チームで同じオプションを繰り返すなら、package.json scriptsへtypecheckなどの名前で固定するとCIとローカルの手順を揃えやすくなります。

npx tsc file.tsでtsconfigのstrictが効かないのはなぜですか?

TypeScript公式仕様では、入力ファイルをコマンドラインに指定するとtsconfig.jsonは無視されます。Project設定で確認したい場合はファイルを直接指定せずnpx tscを使うか、-p/–projectで使用するConfigを明示してください。

まとめ:npxとtscの役割を分けて覚える

  • npxはnpmパッケージの実行環境を用意し、tscはTypeScript Compilerを実行する
  • ProjectへTypeScriptをdevDependencyとして入れるとバージョンを揃えやすい
  • 入力ファイルなしのtscは近いtsconfig.jsonを探してProjectをコンパイルする
  • ファイルをCLIへ直接指定するとtsconfig.jsonは無視される
  • -p/–projectで設定を明示し、–watchで変更監視、–noEmitで型チェック専用にできる
  • 繰り返すコマンドはpackage.json scriptsへ固定すると運用しやすい

まずはProjectのルートで`npx tsc –showConfig`を実行し、どの設定が実際に使われているか確認してみてください。そこが分かると、コンパイルエラーの切り分けもかなり進めやすくなります。

カジュアル面談はこちら

RANKINGranking-icon

すべてを開示している会社です

ポジティブな面もネガティブな面も、包み隠さず誠実にお答えします。
気になることがあれば、面談の際にすべてオープンにお話します。