tsconfig.json コンパイルオプションと設定テンプレート

最終更新:2026-10-22

tsconfig.json コンパイルオプションと設定テンプレート

tsconfig.json は TypeScript プロジェクトの「マスタースイッチ」のファイルです。プロジェクトのルートに置かれ、コンパイラ(tsc)にどのファイルを何にコンパイルするかを伝えます。中でも strict が最も重要なスイッチです。1つのフラグで厳格な一式(strictNullChecks、noImplicitAny など)を有効にし、空値や型の危険のほとんどをコンパイル時に捉えられます。

グループ設定と実践
種類設定
strict モード不要

ℹ️ 説明 エディタは TypeScript を JavaScript にトランスパイルして実行します(型チェックなし)。型チェック結果は各サンプルの出力を参照してください。

📝 構文

// tsconfig.json(最小限の strict 設定)
{
  "compilerOptions": {
    "target": "ES2020",     // 出力 JS の言語バージョン
    "module": "commonjs",   // モジュール形式(Node では commonjs、バンドラでは ESNext が一般的)
    "outDir": "./dist",     // 出力ディレクトリ
    "rootDir": "./src",     // ソースのルートディレクトリ
    "paths": { "@utils/*": ["./src/utils/*"] }, // モジュールパスのエイリアス
    "strict": true          // strict 系のチェックを一括で有効化
  },
  "include": ["src"]        // src 以下のファイルのみコンパイル対象
}

⚙️ パラメータ

strict厳格チェックの総スイッチです。strictNullChecks、noImplicitAny、strictFunctionTypes などを同時に有効にします。新しいプロジェクトでは迷わず有効にしましょう
target / moduletarget は成果物の JS の言語バージョンを決めます(使える組み込み型もそれに応じて変わります)。module は成果物のモジュール形式を決めます
outDir / rootDir / paths成果物のディレクトリ/ソースのルートディレクトリ/パスの別名です。paths はコンパイル時の名前の対応にすぎず、実行時の解決にはバンドラや Node のサブパス設定の協力が必要です

戻り値:戻り値はありません。tsconfig.json は設定ファイルであり、コンパイル時にのみ作用し、それ自体は実行に参加しません。

▶ サンプル

下のコードを編集して「試す」を押すと、トランスパイル実行結果を確認できます:

出力:

length = 5
sum = 5

(トランスパイル後の実行出力。型チェックは tsc が行います。?? のフォールバックを削除すると error TS18047 になり、sum の引数から型注釈を外すと error TS7006 になります)

💡 ポイント

ℹ️ 説明 strict は単一の検査ではなく、検査の一式をまとめたスイッチです。strictNullChecks、noImplicitAny、strictFunctionTypes、strictBindCallApply、strictPropertyInitialization、useUnknownInCatchVariables などが含まれます。
💡 ヒント 新しいプロジェクトでは tsc --init でテンプレートを生成してから整理しましょう。paths のパス別名はバンドラ(Vite/webpack の alias)と同期して設定してください。さもないとコンパイルは通るのに、実行時にモジュールが見つからなくなります。
⚠️ 注意 既存のプロジェクトで無理に strict を一気に上げる必要はありません。まず strictNullChecks 単独を有効にして少しずつ修正し、すべて綺麗になったら strict 全体を有効にします。一気にやると何百何千ものエラーが一度に出てしまいます。
ケースは今後追加予定です。

📚 関連チュートリアル

❓ よくある質問

Q strict: true は具体的にどの検査を有効にしますか?
A 検査の一式をまとめたスイッチです。strictNullChecks(null/undefined を明示的に扱うことを要求)、noImplicitAny(暗黙の any を禁止)、strictFunctionTypes(関数パラメータの反変チェック)、strictPropertyInitialization(クラスのプロパティは初期化が必須)、useUnknownInCatchVariables(catch 変数は unknown)など。漸進的な移行のために個別に無効化できます。
Q target と module の違いは何ですか?
A target は新しい構文をどの JS のバージョンまで下げるかを決めます(たとえば ES2020 はオプショナルチェーンに対応)。module は成果物がどんなモジュールシステムを使うか(commonjs / ESNext / node16)を決めます。前者は言語の機能を、後者は import/export がどんな形にコンパイルされるかを扱います。
Q paths のパス別名を設定したのに実行時にモジュールが見つからないときは?
A paths はコンパイラに見せる名前の対応にすぎず、成果物の中に別名がそのまま残ります。実行時にも認識させる必要があります。バンドラを使うプロジェクトでは Vite/webpack の resolve.alias を設定し、素の Node プロジェクトでは package.json の imports フィールドか、tsconfig-paths のような実行時のパッチを使いましょう。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%