Visual StudioでTypeScriptをnpm経由でトランスパイル・ビルドするなら、結論は 「JSPS/.esproj では TypeScript npm パッケージをプロジェクトに入れ、tsconfig.json と package.json の build/clean スクリプトで管理する」 です。2026年4月24日の公式リポジトリ履歴では該当ドキュメントに更新が記録されていますが、少なくともコミット名を見る限り、機能追加というよりドキュメント管理・所有者情報まわりの更新と捉えるのが安全です。実務上の重要ポイントは、Visual Studio内蔵のTypeScript SDKに依存しすぎず、npmでTypeScriptバージョンをプロジェクト単位に固定することです。(GitHub)
この記事では、Microsoft公式ドキュメント「Transpile and build TypeScript code using npm – Visual Studio (Windows)」の内容をもとに、developers、DevOps engineers、platform teams が確認すべき変更点、導入手順、CI/CDで失敗しやすいポイントを整理します。特に、Visual Studio上では動くのにビルドサーバーで失敗する、チームメンバーごとにTypeScriptの挙動が違う、といった問題を避けたい場合に役立ちます。
Visual Studioの2026年4月更新ポイント:大きな機能変更ではなく、npm運用の再確認が重要
2026年4月24日のGitHub履歴では、該当ファイルに対して「docfxが自動挿入するメタデータの削除」と「ownership updates」に関するコミットが確認できます。つまり、今回の更新を「新しいTypeScriptビルド機能が追加された」と読むより、公式ドキュメントの管理情報が整理され、既存の推奨構成が引き続き有効であると読むのが現実的です。(GitHub)
実務で押さえるべきポイントは次の3つです。
- Visual Studio 2019以降では、TypeScript SDKよりも TypeScript npm パッケージ の利用が推奨されている
- 対象は主に JavaScript Project System(JSPS)または .esproj ベースのプロジェクト
- ASP.NET Coreプロジェクトでは、npmではなく NuGetパッケージ を使う案内が明記されている
Microsoft公式ドキュメントでは、JSPS/.esprojベースのプロジェクトにTypeScriptサポートを追加する方法として、TypeScript npmパッケージを使う方針が示されています。また、npmパッケージを使うことで、複数の環境やプラットフォーム間で移植性を高められると説明されています。(Microsoft Learn)
対象になるプロジェクトと、別の方法を選ぶべきプロジェクト
Visual StudioでTypeScriptを扱うときに最初に判断すべきなのは、「このプロジェクトはnpmでTypeScriptを管理すべきか」です。ここを誤ると、後からビルド設定が二重化し、Visual Studio、ローカルCLI、CI/CDで結果がずれる原因になります。
| プロジェクトの種類 | 推奨される考え方 | 実務上の判断ポイント |
|---|---|---|
| JSPS / .esproj ベースのJavaScriptプロジェクト | TypeScript npmパッケージを使う | Visual Studio、npm、CIで同じTypeScriptバージョンを使いやすい |
| React、Angular、Vueなどのフロントエンド中心プロジェクト | package.json中心でビルドを管理する | webpackなどの外部ツールを使う場合もnpm scriptsに集約する |
| ASP.NET Coreプロジェクト | npmではなくNuGetパッケージを検討する | 公式ドキュメントでnpmではなくNuGet利用が案内されている |
| DevOps / platform teamが管理する共通テンプレート | npm scriptsとtsconfig.jsonを標準化する | 開発者PCとビルドサーバーの差分を減らせる |
特にASP.NET Coreとフロントエンド単体プロジェクトを同じルールで扱うのは避けるべきです。公式ドキュメントでも、ASP.NET Coreプロジェクトではnpmの代わりにNuGetパッケージを使ってTypeScriptサポートを追加するよう注意書きがあります。(Microsoft Learn)
npmでTypeScriptを管理するメリット
Visual StudioでTypeScriptをnpm管理にする最大の利点は、ビルドの再現性です。
TypeScript SDKに依存した運用では、開発者のVisual Studio環境やインストール済みコンポーネントによって挙動が変わる可能性があります。一方、package.json に typescript を開発依存として入れておけば、プロジェクトが使うTypeScriptのバージョンを明確にできます。
たとえば、次のように管理します。
{
"devDependencies": {
"typescript": "^5.0.0"
}
}
ただし、企業チームやCI/CDで安定性を重視する場合は、むやみに広いバージョン範囲を使わず、ロックファイルと合わせて運用するのが安全です。ライブラリ開発や長期運用の業務システムでは、TypeScriptのマイナーバージョン更新で型チェック結果が変わることがあります。更新は「ビルドが通るか」だけでなく、「型エラーが新しく出ないか」「生成物の出力先が変わらないか」まで確認しましょう。
Visual StudioでTypeScriptをnpmビルドする基本手順
公式ドキュメントの流れを実務向けに整理すると、手順は次のようになります。
| 手順 | 作業内容 | 確認ポイント |
|---|---|---|
| 1 | Node.jsとnpmを用意する | JSPS/.esprojでは追加ワークロード不要で、Node.jsに含まれるnpmを使う案内がある |
| 2 | TypeScript npmパッケージを追加する | package.json とソリューションエクスプローラーのnpmノードを確認する |
| 3 | tsconfig.json をプロジェクトルートに置く | include、outDir、sourceMap などを明示する |
| 4 | package.json に build / clean を定義する | Visual Studioのビルドコマンドと連動させる |
| 5 | Visual StudioでBuild Solutionを実行する | 生成された .js と .js.map の出力先を確認する |
JSPS/.esprojで作成されたプロジェクトでは、追加ワークロードは不要で、Node.jsに含まれるnpmをインストールすればよいと説明されています。また、TypeScript 2.1以降のnpmパッケージを入れると、対応するTypeScript言語サービスがエディターに読み込まれるとされています。(Microsoft Learn)
TypeScript npmパッケージを追加する
まだTypeScriptを入れていない場合は、プロジェクトルートで次のように追加します。
npm install --save-dev typescript
Visual Studio上では、プロジェクトルートの package.json を開き、ソリューションエクスプローラーのnpmノードと対応しているか確認します。パッケージインストールの進行状況は、出力ウィンドウのnpm出力で確認できます。(Microsoft Learn)
ここで失敗しやすいのは、グローバルインストール済みの tsc に頼ってしまうことです。個人PCでは動いても、CIサーバーや別の開発者環境で同じ結果になるとは限りません。プロジェクト内の node_modules に入ったTypeScriptを使うよう、npm scriptsに集約しましょう。
tsconfig.jsonを作成する
tsconfig.json は、TypeScriptコンパイラ tsc の設定ファイルです。公式ドキュメントでは、プロジェクトルートに tsconfig.json を追加し、include、outDir、sourceMap などを設定する例が示されています。(Microsoft Learn)
基本形は次のように考えると分かりやすいです。
{
"compilerOptions": {
"noEmitOnError": true,
"sourceMap": true,
"target": "es2020",
"module": "esnext",
"outDir": "dist",
"strict": true
},
"include": [
"src/**/*"
]
}
公式サンプルでは target に es5、outDir に dist を指定する例が掲載されていますが、実際のプロジェクトでは実行環境に合わせて調整します。古いブラウザー対応が必要なら低めのターゲットを選び、モダンブラウザーやNode.js中心なら、より新しいECMAScriptターゲットを検討します。(Microsoft Learn)
sourceMap はデバッグ時に重要です。公式ドキュメントでも、source mapを生成した場合は outDir に .js と .js.map が出力され、source mapファイルはデバッグに必要だと説明されています。(Microsoft Learn)
package.jsonにbuildとcleanを追加する
Visual Studioのビルド/クリーン操作と連動させるには、package.json の scripts に build と clean を定義します。
{
"scripts": {
"build": "tsc --build",
"clean": "tsc --build --clean"
}
}
公式ドキュメントでも、Visual Studioのbuildコマンドとcleanコマンドをサポートするため、build に tsc --build、clean に tsc --build --clean を追加する例が示されています。(Microsoft Learn)
この形にしておくと、開発者はVisual Studioからビルドでき、DevOps側はCI/CDで同じ npm run build を実行できます。つまり、IDE専用の設定ではなく、チーム全体で共有できるビルド定義になります。
webpackなどの外部ツールを使う場合の考え方
TypeScriptを単純にJavaScriptへ変換するだけなら tsc で十分ですが、実務ではwebpackなどのバンドラーを使うケースもあります。公式ドキュメントでは、webpackのようなサードパーティツールでビルドする場合、package.json にコマンドラインビルドスクリプトを追加する例が示されています。(Microsoft Learn)
例としては、次のような形です。
{
"scripts": {
"build": "webpack-cli app.tsx --config webpack-config.js"
}
}
重要なのは、Visual Studioの設定画面だけで外部ツールのパスを解決しようとしないことです。公式ドキュメントでは、JSPS/.esprojでサードパーティツールを構成する場合、Visual Studioの「External Web Tools」に設定されたパスを使わないよう注意されています。(Microsoft Learn)
実務では、webpack、Vite、Rollupなどの選定そのものよりも、次のルールを徹底するほうが効果があります。
- ビルドコマンドは
package.jsonに集約する - CI/CDもVisual Studioも同じnpm scriptsを使う
- ローカル専用パスやグローバルインストール前提のコマンドを避ける
node_modules/.bin経由で解決されるようにする
これにより、開発者PC、ビルドエージェント、コンテナ環境での差分を減らせます。
DevOps engineersとplatform teamsが確認すべきポイント
Visual StudioでのTypeScriptビルドは、個人開発では簡単に動いても、チーム運用では設定のばらつきが問題になります。DevOps engineersやplatform teamsは、次の項目を標準テンプレートに入れておくとトラブルを減らせます。
| 確認項目 | 推奨対応 | 失敗しやすい例 |
|---|---|---|
| TypeScriptバージョン | devDependencies と lockfileで管理する | グローバルの tsc に依存する |
| ビルドコマンド | npm run build に統一する | Visual Studio専用手順とCI手順が別々 |
| 出力先 | outDir を明示する | 生成された .js がソース配下に散らばる |
| デバッグ | sourceMap を必要に応じて有効化する | 本番ビルドと開発ビルドの設定差を把握していない |
| クリーン | tsc --build --clean を定義する | 古い生成物が残って原因不明の動作になる |
| ASP.NET Core | NuGet利用の是非を確認する | すべてのTypeScriptプロジェクトをnpm前提にする |
特にグローバルチームでは、OS、Node.js、Visual Studioの更新タイミングが揃いません。だからこそ、Visual Studioの画面操作に依存するより、package.json と tsconfig.json をリポジトリに含め、誰がどこでビルドしても同じコマンドになるように設計することが重要です。
よくあるエラーと対処法
Visual Studioではビルドできるが、CIで失敗する
原因として多いのは、ローカルPCにだけグローバルのTypeScriptやwebpackが入っているケースです。CIでは npm ci またはチームで決めたインストール手順を実行し、プロジェクト内の依存関係だけでビルドできるか確認してください。
確認するコマンドは次の2つです。
npm install
npm run build
CIでは、可能であればロックファイルを使ったインストールに統一します。これにより、依存関係の解決結果が毎回変わるリスクを抑えられます。
.jsファイルの出力先が分からない
tsconfig.json の outDir を確認します。公式ドキュメントでも、outDir は tsc によってトランスパイルされたJavaScriptファイルの出力フォルダーを指定するオプションとして説明されています。(Microsoft Learn)
出力先を明示しないと、ソースファイルの近くに生成物が出たり、チーム内で「どのファイルをコミットすべきか」が曖昧になります。業務プロジェクトでは、dist や build などの出力ディレクトリを明確にし、必要に応じて .gitignore も整備しましょう。
TypeScriptの型エラーが出てもJavaScriptが生成される
型エラー時に出力を止めたい場合は、noEmitOnError を有効にします。
{
"compilerOptions": {
"noEmitOnError": true
}
}
公式サンプルでも noEmitOnError が設定例に含まれています。チーム開発では、型エラーが残った状態で生成物だけ更新されると、後から原因調査が難しくなります。特に本番向けビルドでは、型エラー時に出力を止める設定を検討しましょう。(Microsoft Learn)
npm Task RunnerやWebpack Task Runnerを使うべきか迷う
Visual StudioにはTask Runner Explorerを使ってnpmやwebpackなどのタスクを自動化できる案内があります。また、NPM Task RunnerやWebpack Task Runnerに関する情報も公式ドキュメントで紹介されています。(Microsoft Learn)
ただし、チーム運用では「拡張機能を入れれば解決」と考えないほうが安全です。拡張機能は便利ですが、CI/CDでは動かないことがあります。まずは package.json のscriptsだけでビルドできる状態を作り、その上でVisual Studio上の操作性を改善する目的でTask Runnerを使う、という順序がおすすめです。
実務でのおすすめ構成
小規模なTypeScriptプロジェクトなら、まずは次の構成を標準形にすると扱いやすくなります。
project-root/
├─ package.json
├─ package-lock.json
├─ tsconfig.json
├─ src/
│ └─ index.ts
└─ dist/
└─ index.js
package.json は次のようにします。
{
"scripts": {
"build": "tsc --build",
"clean": "tsc --build --clean"
},
"devDependencies": {
"typescript": "^5.0.0"
}
}
tsconfig.json は、開発初期なら次のように始めると分かりやすいです。
{
"compilerOptions": {
"target": "es2020",
"module": "esnext",
"strict": true,
"noEmitOnError": true,
"sourceMap": true,
"outDir": "dist"
},
"include": [
"src/**/*"
]
}
この構成なら、Visual Studioからのビルド、ローカルCLIでの npm run build、CI/CDでの自動ビルドを同じ考え方で管理できます。チームで標準化する場合は、target、module、strict、sourceMap、outDir をテンプレート化しておくと、プロジェクトごとの差分レビューも簡単になります。
2026年4月更新を受けて、いま確認すべきこと
今回の「Transpile and build TypeScript code using npm – Visual Studio (Windows)」の更新は、少なくとも公開履歴上は大きな機能変更として読むものではありません。むしろ、Visual StudioでTypeScriptを扱う現場が、npm中心のビルド管理に移行できているかを見直すタイミングです。
まず確認すべきことは、次の3つです。
- TypeScriptをVisual Studio任せではなく、
package.jsonのdevDependenciesで管理しているか tsconfig.jsonのinclude、outDir、sourceMap、noEmitOnErrorが明確か- Visual Studio、ローカルCLI、CI/CDが同じ
npm run buildを使えるか
Visual StudioでTypeScriptをnpmビルドする運用は、単なる開発環境の設定ではありません。チーム全体の再現性、デバッグしやすさ、CI/CDの安定性に直結します。既存プロジェクトでは、まず package.json と tsconfig.json を確認し、グローバル依存やVisual Studio専用設定に頼っている箇所を洗い出すところから始めましょう。

コメント