Skip to content

型に配慮したLint

型に配慮したLintは、TypeScriptの型システムに依存するルールを可能にします。たとえば、未処理のプロミスや安全でない代入の検出などが該当します。Oxlintでは、この機能は tsgolint によって提供され、Oxlint CLIおよび構成システムに統合されています。

この機能は現在 アルファ レベルです。ルールカバレッジ、パフォーマンス、互換性は継続的に改善されています。

概要

Oxlintは以下の2つのコンポーネント間で責任を分担しています:

  • Oxlint (Rust) ファイル走査、無視ロジック、構成、型に配慮しないルール、レポートの処理を行います。

  • tsgolint (Go)typescript-go を使ってTypeScriptプログラムをビルドし、型に配慮したルールを実行して、構造化された診断情報をOxlintに返却します。

インストール

型に配慮したLintには追加の依存関係が必要です:

sh
npm add -D oxlint-tsgolint@latest
sh
pnpm add -D oxlint-tsgolint@latest
sh
yarn add -D oxlint-tsgolint@latest
sh
bun add -D oxlint-tsgolint@latest

型に配慮したLintの実行

型に配慮したLintを有効にするには、--type-awareフラグを指定する必要があります:

bash
oxlint --type-aware

有効化すると、Oxlintは標準ルールとtypescript/*名前空間内の型に配慮したルールを実行します。

型に配慮したLintはオプトインであり、フラグが指定されない限り実行されません。

エディタやLSPベースの統合(例:VS Code)では、typeAwareオプションをtrueに設定することで有効化できます。詳細についてはエディタページをご覧ください。

モノレポとビルド出力

型に配慮したLintには解決済みの型情報が必要です。

モノレポの場合:

  • .d.tsファイルが利用可能になるように依存パッケージをビルドする
  • 実行前に依存関係がインストールされていることを確認する
bash
pnpm install
pnpm -r build
oxlint --type-aware

型チェックの診断

型チェックを有効にして、Lint結果と共にTypeScriptのエラーを報告することができます:

bash
oxlint --type-aware --type-check

このモードは、CI環境での別途tsc --noEmitステップを置き換えることができます:

bash
# 以前
tsc --noEmit
oxlint

# 以後
oxlint --type-aware --type-check

型に配慮したルールの設定

型に配慮したルールは、他のOxlintルールと同様に設定されます。

.oxlintrc.json
json
{
  "plugins": ["typescript"],
  "rules": {
    "typescript/no-floating-promises": "error",
    "typescript/no-unsafe-assignment": "warn"
  }
}

ルールは、そのtypescript-eslint版と同等のオプションをサポートしています。

.oxlintrc.json
json
{
  "plugins": ["typescript"],
  "rules": {
    "typescript/no-floating-promises": ["error", { "ignoreVoid": true }]
  }
}

無効化コメント

型に配慮したルールはインラインでの無効化コメントに対応しています:

ts
// oxlint-disable-next-line typescript/no-floating-promises
doSomethingAsync();

不要な無効化コメントを報告するには:

bash
oxlint --type-aware --report-unused-disable-directives

TypeScript互換性

型に配慮したLintはtypescript-goによって駆動されています。

  • TypeScript 7.0+ が必要
  • 一部のレガシーなtsconfigオプションはサポートされていません(例:tsconfig.json内のbaseUrl
  • TypeScript 6.0で非推奨になった、または7.0で削除された設定・機能を使用している場合、コードベースの移行が必要です
  • --type-checkが有効化されたときに無効なオプションが報告されます

詳細についてはTypeScript移行ガイドをご参照ください。また、tsconfigファイルのアップグレードにはts5to6の利用を検討してください。

安定性に関する注意点

型に配慮したLintは アルファ レベルです:

  • ルールカバレッジは完全ではありません
  • 非常に大きなコードベースでは高メモリ使用量が発生する可能性があります
  • パフォーマンスは継続的に改善されています

トラブルシューティング

パフォーマンスとデバッグ

型に配慮したLintが遅い、または過度なメモリを使用する場合:

  1. 両方のツールを更新します:
  • oxlint
  • oxlint-tsgolint
  1. デバッグログを有効化します:
bash
OXC_LOG=debug oxlint --type-aware

例の出力(キーパフォーマンスマイルストーンを示す):

2026/01/01 12:00:00.000000 tsgolintの起動開始
2026/01/01 12:00:00.001000 ファイルをプログラムに割り当てる処理を開始。対象ファイル数: 259
2026/01/01 12:00:01.000000 ファイルのプログラムへの割り当て完了。作成されたプログラム数: 8。一致しないファイル数: 75
2026/01/01 12:00:01.001000 12ワーカーでリンターを起動
2026/01/01 12:00:01.001000 ワークロード分布: 8プログラム
2026/01/01 12:00:01.002000 [1/8] プログラム上でリンターを実行中: /path/to/project/jsconfig.json
...
2026/01/01 12:00:01.100000 [4/8] プログラム上でリンターを実行中: /path/to/project/tsconfig.json
2026/01/01 12:00:02.500000 26140個のソースファイルでプログラムを作成
2026/01/01 12:00:14.000000 /path/to/project/oxlint-plugin.mts
...
2026/01/01 12:00:14.100000 [5/8] プログラム上でリンターを実行中: /path/to/project/apps/tsconfig.json
...
2026/01/01 12:00:15.000000 Lint完了
259ファイルに対して161ルールを12スレッドで16.4秒で処理完了。

ログの解釈方法:

  • ファイル割り当てフェーズ (Starting to assign files...Done assigning files...):ソースファイルをそのtsconfigプロジェクトにマッピングします。このフェーズは高速であるべきです。遅い場合は問題を報告してください。
  • プログラムのLint処理 ([N/M] Running linter on program...):各TypeScriptプロジェクトが個別にLintされます。著しく時間がかかるプログラムは、コストの高い型解決や巨大なプロジェクトを示唆している可能性があります。
    • ソースファイル数が異常に多いプログラム(例:Program created with 26140 source files)を確認してください。これは、tsconfigincludes/excludesの設定ミスによりnode_modulesなど不要なファイルが含まれている可能性を示します。
    • 各ファイルパスのログは、そのファイルがどの時点でLintされているかを示します。ファイル間のタイムギャップが大きい場合、特定のファイルの型解決にコストがかかっている可能性があります。

一般的なパフォーマンスの問題

ルートのtsconfigが多数のファイルを含んでいる

ルートのtsconfig.jsonincludeパターンが広すぎる場合、リポジトリ内のすべてのファイルが意図せず含まれ、大幅な遅延を引き起こすことがあります:

tsconfig.json
json
{
  "include": ["**/*"] // ❌ すべてのファイルをキャッチ
}

この設定は、ビルド出力やタイプチェックすべきでないファイルも含んでしまいます。

修正方法: includeパターンを明確に範囲指定し、適切なexcludeエントリを追加します:

tsconfig.json
json
{
  "include": ["src/**/*"], // ✅ ソースファイルのみ
  "exclude": ["dist", "build", "coverage"] // node_modulesはデフォルトで除外
}

モノレポでは、ルートtsconfig.jsonが直接ソースファイルを含まないことを確認してください:

tsconfig.json
json
{
  "files": []
}

問題の診断方法: デバッグログを有効化し、ソースファイル数が異常に多いプログラムを確認します:

2026/01/01 12:00:02.500000 26140個のソースファイルでプログラムを作成

1つのプログラムに数千ファイルが含まれている場合、tsconfiginclude/exclude設定を確認してください。

次のステップ