【30日間無料体験】AI初心者が無料で基礎知識を学ぶなら「Audible」

ViteにTypeScriptを追加導入する方法【手順と注意点を解説】

記事には広告が含まれています

Viteは高速なビルドツールとして多くのフロントエンドプロジェクトで採用されていますが、「最初はJavaScriptで始めたプロジェクトに、途中からTypeScriptを導入したい」という場面は少なくありません。フレームワークの規模が大きくなるにつれて型安全性の重要性が増し、後からTypeScriptを追加したいというニーズは現場でも頻繁に発生します。

本記事では、既存のViteプロジェクトにTypeScriptを後から追加する具体的な手順を、設定ファイルの内容も含めてわかりやすく解説します。新規プロジェクトをTypeScriptテンプレートで作成する方法も合わせて紹介するので、状況に合わせて参考にしてください。

ViteとTypeScriptの関係をまず押さえよう

ViteはデフォルトでTypeScriptをサポートしています。ただし、Vite自体は型チェックは行わず、esbuildによってTypeScriptをJavaScriptへトランスパイルするだけという点が重要です。つまり、型エラーがあってもビルドは通ってしまうため、型チェックを厳密に行いたい場合は別途 tsc を実行する設定が必要になります。

Viteのトランスパイルについて

ViteはesbuildでTypeScriptをJSに変換します。この処理はvanillaのtscに比べて約20〜30倍高速で、HMR(ホットモジュールリプレースメント)の更新は50ミリ秒未満で反映されます。型チェックはCI等でtscを別途実行する構成が一般的です。

新規プロジェクトにTypeScriptを追加する場合(テンプレートを使う方法)

これからViteプロジェクトを新規作成する場合は、最初からTypeScriptテンプレートを選ぶのが最もシンプルです。以下のコマンドでTypeScript対応のプロジェクトを作成できます。

新規プロジェクトの作成(React + TypeScript の例)

npm create vite@latest my-app -- --template react-ts cd my-app npm install npm run dev

フレームワークなしのVanilla TypeScriptを使いたい場合は、--template vanilla-ts を指定します。テンプレートを使うことで、tsconfig.jsontsconfig.node.jsonvite-env.d.ts が自動生成されます。

既存のViteプロジェクトにTypeScriptを後から追加する手順

すでにJavaScriptで動いているViteプロジェクトにTypeScriptを追加する場合は、以下の手順を順番に進めてください。

Step 1:TypeScriptをインストールする
まずTypeScript本体をdevDependenciesに追加します。Reactを使っている場合は型定義パッケージも合わせてインストールします。

TypeScriptと型定義パッケージのインストール

# TypeScript本体 npm install -D typescript # Reactを使っている場合は型定義も追加 npm install -D @types/react @types/react-dom

インストール後、package.jsondevDependenciestypescript が追加されていることを確認してください。

Step 2:tsconfig.jsonを作成する
プロジェクトルートに tsconfig.json を作成します。以下は基本的な設定例です。Viteの公式ドキュメントでは "isolatedModules": true の設定が推奨されています。

tsconfig.json(基本設定例)

{ "compilerOptions": { "target": "ESNext", "module": "ESNext", "moduleResolution": "bundler", "strict": true, "skipLibCheck": true, "isolatedModules": true, "noEmit": true, "jsx": "react-jsx" }, "include": ["src"] }

Vite 5以降では "moduleResolution": "bundler" が推奨設定です。

Step 3:vite-env.d.tsを作成・設定する
src/ ディレクトリ内に vite-env.d.ts ファイルを作成します。このファイルは Viteが提供する型定義を読み込むためのエントリーポイントとなるもので、import.meta.envimport.meta.hot などVite固有のAPIを TypeScript上で正しく認識させるために必要です。 最低限の設定は以下の1行です。

src/vite-env.d.ts(最小構成)

 /// <reference types="vite/client" />

この1行だけで、以下のような Vite 組み込みの環境変数が型補完の対象になります。

  • import.meta.env.MODE(現在のモード。例:development / production)
  • import.meta.env.BASE_URL(ベースURL)
  • import.meta.env.PROD(本番環境かどうかの真偽値)
  • import.meta.env.DEV(開発環境かどうかの真偽値)

カスタム環境変数の型定義を追加する

プロジェクトで .env ファイルにカスタム変数(VITE_ プレフィックスが必須)を定義している場合は、同ファイルに ImportMetaEnv インターフェースを拡張することで型補完が効くようになります。

src/vite-env.d.ts(カスタム環境変数の型定義あり)

/// interface ImportMetaEnv { readonly VITE_APP_TITLE: string readonly VITE_API_BASE_URL: string readonly VITE_FEATURE_FLAG: string // 追加した環境変数の分だけ定義する } interface ImportMeta { readonly env: ImportMetaEnv }

import文を書くと型拡張が壊れることがある

vite-env.d.ts の中に import 文を書いてしまうと、TypeScriptがこのファイルを「モジュール」として扱うようになり、グローバルな型拡張が機能しなくなります。型定義の拡張が上手く動かない場合はファイル内の import 文を確認してください。

VITE_ プレフィックスについて

Viteはセキュリティ上の理由から、VITE_ で始まる環境変数のみをクライアントサイドのコードに公開します。DB_PASSWORD のようなプレフィックスなしの変数は import.meta.env から参照しても undefined になります。APIキーなどの秘密情報は VITE_ プレフィックスを使わないようにしましょう。

Step 4:既存ファイルの拡張子を変更する
既存のJavaScriptファイルをTypeScriptへ移行するには、ファイルの拡張子を変更します。対応表は以下のとおりです。

変更前 変更後 使用場面
.js .ts 通常のTypeScriptファイル
.jsx .tsx JSX(Reactコンポーネント等)を含むファイル

移行時の実践的なアプローチ

一度に全ファイルを変換しようとすると大量の型エラーが発生し、収拾がつかなくなりがちです。現場では以下のような段階的な移行が有効です。

  1. まず tsconfig.json"strict": false にして全ファイルの拡張子だけ変更する
  2. ビルドが通ることを確認してから、ファイルごとに型を付けていく
  3. 全ファイルの型付けが完了したら "strict": true に戻す

それでも対応が難しいファイルは、一時的に // @ts-nocheck をファイル先頭に追加することで型チェックを無効化できます。段階的な移行中の逃げ道として覚えておくと安心です。

型エラーを一時的にスキップする方法

 // @ts-nocheck // このファイルの型チェックを一時的に無効化(移行期間中の暫定対応) export function someFunction() { // ... } 

vite.config.js も .ts に変更する

Vite設定ファイルを vite.config.js から vite.config.ts に変更することも推奨です。TypeScriptで書くことでIDEの補完が効き、設定ミスを防ぎやすくなります。変更時は defineConfig ヘルパーを使うと型サポートが自動的に有効になります。

Step 5:package.jsonのスクリプトを更新する
TypeScriptを追加しただけでは、ビルド時の型チェックは行われません。package.json の各スクリプトを以下のように更新することで、ビルドと型チェックを連携させられます。

package.json のscripts更新例

 { "scripts": { "dev": "vite", "build": "tsc && vite build", "type-check": "tsc --noEmit", "preview": "vite preview" } } 

各スクリプトの役割

  • buildtsc で型チェックを先に実行し、エラーがなければ vite build でバンドル。型エラーがあるとビルドが止まる
  • type-check:型チェックのみを単独で実行するスクリプト。CIパイプラインや開発中の確認に便利

開発中にリアルタイムで型チェックしたい場合

vite-plugin-checker を導入すると、開発サーバー起動中もブラウザのオーバーレイで型エラーを通知してくれます。型エラーに気づかないまま開発が進んでしまうリスクを大幅に減らせます。

vite-plugin-checkerのインストール

 npm install -D vite-plugin-checker 

vite.config.tsへの追加(React + TypeScriptの例)

import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' import checker from 'vite-plugin-checker' export default defineConfig({ plugins: [ react(), checker({ typescript: true, }), ], }) 

これにより、開発サーバー起動時(npm run dev)から型エラーがブラウザ画面に表示されるようになります。ただし、大規模プロジェクトでは型チェックに時間がかかることがあるため、チームの状況に合わせて導入を検討してください。

tsconfig.jsonの主要設定項目と意味

Viteプロジェクト向けのtsconfig.jsonでは、いくつかの設定項目の意味を理解しておくと運用がスムーズです。

設定項目 推奨値 意味・理由
isolatedModules true esbuildの制約に合わせた分離トランスパイルモード。Vite利用時は必須に近い
moduleResolution bundler Vite 5以降の推奨。バンドラー向けのモジュール解決ルール
noEmit true tscはJSファイルを出力しない(出力はViteに任せる)
skipLibCheck true 依存ライブラリの型チェックをスキップ。ビルド速度の向上と競合回避に有効
strict true 厳格な型チェックを有効化。新規プロジェクトでは必ず有効にする
tsconfig.node.json とは

Viteのテンプレートでプロジェクトを生成すると tsconfig.node.json も作成されます。これは vite.config.ts など、Node.js環境で動作するファイル向けの設定ファイルです。ブラウザ向けコードとNode.js向けコードで異なるコンパイル設定が必要なため、Viteでは設定ファイルを分けるアーキテクチャが採用されています。

よくあるエラーと対処法

「Cannot find module ‘vite/client’」と表示される

vite-env.d.ts が存在しないか、tsconfig.jsonincludesrc が含まれていない可能性があります。ファイルの配置場所と include パスを確認しましょう。

「Property ‘env’ does not exist on type ‘ImportMeta’」が出る

vite-env.d.ts の1行目に /// <reference types="vite/client" /> が書かれているか確認してください。また、このファイルが tsconfig.jsoninclude 対象に含まれているかも合わせて確認が必要です。

型エラーがあってもビルドが通ってしまう

前述のとおり、ViteはTypeScriptの型チェックをしません。型エラーを検知したい場合は build スクリプトに tsc を含めるか、vite-plugin-checker を導入してください。

「isolatedModules」に関するエラーが出る

isolatedModules: true の設定下では、型のみのインポートに import type 構文を使う必要があります。

isolatedModules エラーの修正例

// NG:通常のimportで型だけをインポートしている import { SomeType } from './types' // OK:import type を使う import type { SomeType } from './types' 

移行時の注意点

JavaScriptからTypeScriptへの移行は、一度に全ファイルを変換しようとすると大量のエラーが発生しがちです。まず strict: false にして動作確認を行い、徐々に strict: true に移行するか、ファイルを1つずつ変換していくアプローチが現場では安全です。

ViteにTypeScriptを追加導入する方法まとめ

ViteにTypeScriptを追加する手順まとめ
  • ViteはesbuildでTSをトランスパイルするが、型チェックは自動では行わない
  • 新規プロジェクトは --template react-ts などのテンプレートを使うのが最短
  • 既存プロジェクトへの追加は、①typeScriptインストール → ②tsconfig.json作成 → ③vite-env.d.ts追加 → ④拡張子変更 → ⑤buildスクリプト更新 の順で進める
  • isolatedModules: truenoEmit: true はVite環境では必須に近い設定
  • 型チェックを開発中にも行いたい場合は vite-plugin-checker の導入を検討する
  • 大規模プロジェクトの移行では段階的に進め、一度に全ファイルを変換しない

ViteとTypeScriptの組み合わせは、現在のフロントエンド開発における定番構成の一つです。最初の設定さえ整えてしまえば、その後の開発体験は大きく向上します。本記事の手順を参考に、ぜひ型安全な開発環境を整えてみてください。


参考
特徴 | Vite 公式ドキュメント(TypeScript)ja.vite.dev