T-CREATOR

【早見表】TypeScriptでよく使うESLintルール一覧

 【早見表】TypeScriptでよく使うESLintルール一覧

型安全とコード品質を両立させる近道は、ESLint ルールを適切に選択し継続運用することです。ここでは TypeScript プロジェクトで頻繁に利用される 35 ルールを、よく使う場面と合わせて整理いたしました。

導入目的

TypeScript でもケアレスミスは発生いたします。静的解析ツール ESLint と @typescript-eslint プラグインを導入することで、型安全とスタイル統一を同時に実現できます。
導入例(Yarn):

bashyarn add -D eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin
yarn eslint --init

早見表一覧

#ルール名分類よく使う場面概要
1@typescript-eslint/no-unused-varsバグ防止新規 UI 実装で不要変数が散乱しがちなとき未使用変数・引数を検出
2@typescript-eslint/consistent-type-importsスタイルモノレポで JS 出力を軽量化したいときimport type 統一
3@typescript-eslint/no-explicit-any型安全JS→TS 移行初期段階で any が氾濫any 濫用を警告
4@typescript-eslint/explicit-function-return-type型安全公開 SDK で戻り値互換性を守るとき戻り値型を明示
5@typescript-eslint/strict-boolean-expressionsバグ防止API 実装で undefined 判定漏れが怖いとき真偽値以外の条件禁止
6@typescript-eslint/prefer-readonly設計Redux ストアなど不変データを扱うときreadonly 推奨
7@typescript-eslint/member-orderingスタイル大規模クラスで順序バラツキ解消メンバー並び順統一
8@typescript-eslint/consistent-indexed-object-styleスタイルDTO を大量に定義するライブラリ開発Record かインデックスを統一
9@typescript-eslint/no-floating-promisesバグ防止非同期 I/O が多いバックエンドawait 漏れ検出
10@typescript-eslint/prefer-nullish-coalescingスタイルAPI レスポンスの既定値設定?? でデフォルト値
11@typescript-eslint/prefer-optional-chainスタイルネストオブジェクト多用の UI 層?. へ統一
12@typescript-eslint/consistent-type-definitionsスタイルコードレビューで typeinterface 混在対策どちらか統一
13@typescript-eslint/no-non-null-assertion型安全他人のコードで ! 乱用が目立つとき非 null アサーション抑止
14@typescript-eslint/no-inferrable-typesスタイル初学者が冗長な型注釈を書きがちなとき推論可能型を省略
15@typescript-eslint/no-unnecessary-type-assertion型安全キャスト癖を持つプロジェクトで不要な as を警告
16@typescript-eslint/array-typeスタイル配列型表記を一本化したいモノレポT[] or Array<T> 統一
17@typescript-eslint/prefer-for-ofパフォーマンスループ最適化を優先する Node.js 処理for...of 推奨
18@typescript-eslint/no-misused-promisesバグ防止DOM/イベントで async ハンドラを使うとき誤用 Promise を検知
19@typescript-eslint/no-unsafe-assignment型安全外部 JSON を直接扱うツール型不明値代入を警告
20@typescript-eslint/no-unsafe-member-access型安全動的キーアクセスが多いとき不明型プロパティ禁止
21@typescript-eslint/no-unsafe-call型安全任意スクリプト実行のプラグイン機構不明型関数呼び出し禁止
22@typescript-eslint/promise-function-async型安全内部ユーティリティを整理するとき非同期関数は async 必須
23@typescript-eslint/switch-exhaustiveness-check型安全Enum 状態遷移を網羅確認switch 漏れ防止
24@typescript-eslint/restrict-template-expressionsバグ防止国際化メッセージで型安全確保テンプレ式安全化
25@typescript-eslint/no-duplicate-enum-valuesバグ防止既存 Enum を拡張するとき重複値禁止
26@typescript-eslint/no-extra-semiスタイルPrettier 非導入環境でセミ誤挿入防止余計セミ削除
27@typescript-eslint/no-empty-interfaceスタイルDTO 生成ツール利用で空インタフェース発生意味の無い空型禁止
28@typescript-eslint/default-param-lastスタイル可読性重視の関数 API 設計既定値引数を末尾へ
29@typescript-eslint/no-redundant-type-constituents型安全巨大ユニオンを整理するとき重複ユニオン排除
30@typescript-eslint/prefer-reduce-type-parameterパフォーマンス複合計算処理で reduce 多用型パラメータ活用
31@typescript-eslint/consistent-generic-constructorsスタイルジェネリック new 演算子乱立表記統一
32@typescript-eslint/no-unnecessary-conditionバグ防止古い if ガードの整理常時真偽条件を警告
33@typescript-eslint/no-extraneous-classスタイルヘルパ関数だけの空クラス抑止不要クラス禁止
34@typescript-eslint/return-awaitバグ防止エラースタックが必要な APIreturn await 最適化
35@typescript-eslint/no-require-importsスタイルES Modules へ全面移行require 禁止

TypeScript プロジェクトで“最も遭遇しやすい 35 ルール”について、よく使う場面・サンプルコード・詳しい解説をセットで並べました。各ルールをピンポイントで検索できるよう小見出しにルール ID をそのまま用いております。実務でコピペできるよう before / after 形式で示していますので、レビューやリファクタリングの際にご活用ください。

読み方のガイド

  • 場面 … そのルールが真価を発揮する代表シチュエーション
  • before / after … 違反例と修正例
  • 解説 … 挙動・オプション・運用 Tips など

1 @typescript-eslint/no-unused-vars — 未使用変数削除

属性説明
分類バグ防止
場面新規 UI 実装で変数が残骸化しやすいとき
ts// ❌ before
function greet(name: string, unused: string) {
  console.log(`Hello ${name}`);
}

// ✅ after
function greet(name: string) {
  console.log(`Hello ${name}`);
}

このルールは コンパイル時に削除されない“影だけの変数” を検出します。argsIgnorePatternvarsIgnorePattern オプションで _ プレフィックスを許可するなどプロジェクトポリシーに合わせて緩和できます。CI に --max-warnings 0 を組み込み「未使用ゼロ」を守る運用が効果的です。


2 @typescript-eslint/consistent-type-imports — 型専用インポート統一

属性説明
分類スタイル
場面モノレポで JS 出力を軽量化したいとき
ts// ❌ before
import { User } from './types';

// ✅ after
import type { User } from './types';

import type を強制することで、バンドル後の不要な import 文を削除し Tree-Shaking 効果を最大化します。prefer: "type-imports""no-type-imports" を選択できるため、既存コードに合わせ段階的移行も可能です。


3 @typescript-eslint/no-explicit-any — any 濫用抑止

属性説明
分類型安全
場面JS→TS 移行初期で any が氾濫
ts// ❌ before
function parse(raw: any) {
  return JSON.parse(raw);
}

// ✅ after
interface User { id: string; name: string; }
function parse(raw: string): User {
  return JSON.parse(raw) as User;
}

any は型安全の抜け穴です。違反箇所を eslint-ignore で一時的に白抜き → 型を付けて戻すワークフローが移行期の定番パターンです。ignoreRestArgs で可変引数だけ緩和するなど、警告フラッドを防ぎながら導入できます。


4 @typescript-eslint/explicit-function-return-type — 戻り値型明示

属性説明
分類型安全
場面公開 SDK で API 変更を防ぎたいとき
ts// ❌ before
export const sum = (a: number, b: number) => a + b;

// ✅ after
export const sum = (a: number, b: number): number => a + b;

暗黙推論に頼らず戻り値型を固定することで 破壊的変更をコンパイラが検知 します。allowExpressions: true にすると式ベースの関数を許可でき、テストコードで煩雑になりがちな return 型注釈を省略可能です。


5 @typescript-eslint/strict-boolean-expressions — 真偽値判定厳格化

属性説明
分類バグ防止
場面API 実装で undefined 判定漏れが怖いとき
ts// ❌ before
if (user.id) { /* string でも 0 でも truthy */ }

// ✅ after
if (user.id !== undefined && user.id !== null) { /* 厳密 */ }

不確定値を条件式に渡すと “隠れ falsy” バグが発生します。allowString, allowNumber などの細分化オプションで 段階的に厳しさを上げる と導入がスムーズです。


6 @typescript-eslint/prefer-readonly — 不変変数推奨

属性説明
分類設計
場面Redux ストアやコンテキストで不変データを扱うとき
ts// ❌ before
interface Todo { id: string; text: string; }
let todo: Todo = { id: '1', text: 'draft' };
todo.id = '2';

// ✅ after
interface Todo { readonly id: string; text: string; }
const todo: Todo = { id: '1', text: 'draft' }; // 再代入不可

副作用を排除することで タイムトラベルデバッグやメモ化 が機能しやすくなります。onlyInlineLambdas: true で短命オブジェクトを除外可能です。


7 @typescript-eslint/member-ordering — クラス順序統一

属性説明
分類スタイル
場面大規模クラスで可読性を保ちたいとき
tsclass UserService {
  // ❌ バラバラ
  get name(): string { … }
  private cache = new Map();
  constructor(private repo: Repo) {}
  static version = '1.0';
}

推奨順に並べ替えると…

tsclass UserService {
  static version = '1.0';                 // public-static-field
  private cache = new Map();              // private-instance-field
  constructor(private repo: Repo) {}      // constructor
  get name(): string { … }                // public-instance-getter
}

読み慣れたレイアウト が保たれレビュー効率が向上します。順序は独自プリセットを JSON 配列で自由に定義できます。


8 @typescript-eslint/consistent-indexed-object-style — Record 統一

属性説明
分類スタイル
場面DTO を大量生成するツールチェーン
ts// ❌ before
type Dict = { [key: string]: number };

// ✅ after
type Dict = Record<string, number>;

スタイル統一で 各種コード生成器との互換性も向上 します。"index-signature" を指定すれば逆にインデックスシグニチャへ統一も可能です。


9 @typescript-eslint/no-floating-promises — await 漏れ検出

属性説明
分類バグ防止
場面非同期 I/O が多いバックエンド
ts// ❌ before
fetchUser();   // 戻り値の Promise が無視され例外が握りつぶされる

// ✅ after
await fetchUser();      // 例外は呼び出し元へ伝搬
// あるいは
void fetchUser();       // 戻り値を意図的に無視

void キャストを使うことで 「無視は意図的」 であると静的に宣言できます。オプション ignoreIIFE: true で即時呼び出し関数を除外可能です。


10 @typescript-eslint/prefer-nullish-coalescing — Null 合体演算子推奨

属性説明
分類スタイル
場面API レスポンスの既定値設定
ts// ❌ before
const title = data.title || 'Untitled'; // 空文字も Untitled になる

// ✅ after
const title = data.title ?? 'Untitled'; // null/undefined だけを補完

?? を使うと 空文字・0 などの有効値を保持 できます。ignoreConditionalTests でテスト系演算子を緩和可能です。


11 @typescript-eslint/prefer-optional-chain — オプショナルチェーン推奨

属性説明
分類スタイル
場面ネストデータを多用する UI 層
ts// ❌ before
const city = user && user.address && user.address.city;

// ✅ after
const city = user?.address?.city;

可読性向上に直結します。Babel 変換が不要な ES2020 以降ターゲットで特に有効です。


12 @typescript-eslint/consistent-type-definitions — type / interface 統一

属性説明
分類スタイル
場面コードレビューで表記バラツキが目立つとき
ts// "type" 派の場合
{
  "@typescript-eslint/consistent-type-definitions": ["error", "type"]
}

全ファイル同一表記となり 差分レビューが見やすく なります。


13 @typescript-eslint/no-non-null-assertion — 非 null アサーション抑止

属性説明
分類型安全
場面フォーム値など optional プロパティが多いとき
ts// ❌ before
submit(user!.id); // 落ちるかもしれない

// ✅ after
if (user) submit(user.id);

! は “最後の手段” に限定することで 実行時例外を激減 させます。


14 @typescript-eslint/no-inferrable-types — 冗長型注釈排除

属性説明
分類スタイル
場面初学者コードで明らかに推論できる型注釈が多いとき
ts// ❌ before
const count: number = 0;

// ✅ after
const count = 0;

型推論を信用し コードを短く保つ ルールです。ignoreParameters などで柔軟に調整できます。


15 @typescript-eslint/no-unnecessary-type-assertion — 不要キャスト警告

属性説明
分類型安全
場面“念のため as” が常態化しているプロジェクト
ts// ❌ before
const name = (value as string).trim();

// ✅ after
const name = value.trim();

余計な as を排除し キャストの本当の必要箇所を浮き彫り にします。


16 @typescript-eslint/array-type — 配列表記統一

属性説明
分類スタイル
場面モノレポで複数チームが混在
jsonc{ "@typescript-eslint/array-type": ["error", { "default": "array-simple" }] }

T[] に統一すると 読みやすさと入力コストが両立 します。


17 @typescript-eslint/prefer-for-of — for-of 推奨

属性説明
分類パフォーマンス
場面Node.js CPU バウンド処理で微細最適化
ts// ❌ before
for (const key in list) { /* hasOwnProperty を忘れがち */ }

// ✅ after
for (const item of list) { /* 安全かつ高速 */ }

for...inプロトタイプ汚染リスク も回避できます。


18 @typescript-eslint/no-misused-promises — Promise 誤用検知

属性説明
分類バグ防止
場面DOM/イベントで async ハンドラを登録するとき
ts// ❌ before
button.addEventListener('click', async () => await save());

// ✅ after
button.addEventListener('click', () => { void save(); });

イベントハンドラが返す Promise はブラウザが無視するため 握りつぶしを明示 します。


19 @typescript-eslint/no-unsafe-assignment — 型不明代入禁止

属性説明
分類型安全
場面外部 JSON をパースして内部で利用
tsconst raw = JSON.parse(input);     // any
// ❌ 次行で警告
const id: string = raw.id;         // 不安全

型ガードやスキーマ検証 (zod.parse) を挟むことで 安全に内部型へ昇格 できます。


20 @typescript-eslint/no-unsafe-member-access — 不明型プロパティ禁止

属性説明
分類型安全
場面プラグインで外部オブジェクトを扱うとき
ts// ❌ before
const version = plugin.meta.version;

// ✅ after
if ('meta' in plugin && typeof plugin.meta === 'object') {
  const version = (plugin.meta as { version: string }).version;
}

ランタイムチェックを伴う安全アクセス を強制できます。


21 @typescript-eslint/no-unsafe-call — 不明型呼び出し禁止

属性説明
分類型安全
場面DI コンテナから動的取得した関数を呼ぶとき
ts// ❌ before
handler(req); // any 型

// ✅ after
const safe = handler as (r: Request) => Response;
safe(req);

インターフェース境界を明示 して可読性を保ちます。


22 @typescript-eslint/promise-function-async — async 宣言必須

属性説明
分類型安全
場面コールバック API を Promise 化するとき
ts// ❌ before
function save(): Promise<void> { … }

// ✅ after
async function save(): Promise<void> { … }

async を付けることで 暗黙のラップが回避 されスタックトレースが分かりやすくなります。


23 @typescript-eslint/switch-exhaustiveness-check — 列挙型網羅

属性説明
分類型安全
場面状態遷移ロジックを switch で実装
tsenum Status { Idle, Loading, Success, Error }
function label(s: Status) {
  switch (s) {
    case Status.Idle:
    case Status.Loading:
    case Status.Success:
      return s;
    default:
      const _exhaustive: never = s; // ❌ Error が漏れていれば TSC も赤線
      return _exhaustive;
  }
}

TSC と ESLint の二重チェック で漏れをゼロにできます。


24 @typescript-eslint/restrict-template-expressions — テンプレ式安全化

属性説明
分類バグ防止
場面国際化メッセージで数値・日付を統一フォーマット
ts// ❌ before
const msg = `Score: ${score}`; // score が number でも警告

// ✅ after
const msg = `Score: ${String(score)}`;

暗黙 toString() が暴走して ロケール依存の差異 を防げます。


25 @typescript-eslint/no-duplicate-enum-values — Enum 重複禁止

属性説明
分類バグ防止
場面既存 Enum を改修する大型 PR
tsenum Role { Admin = 1, Owner = 1 } // ❌ Duplicate

CI 段階で 早期に衝突を検出 できます。


26 @typescript-eslint/no-extra-semi — 余分セミコロン排除

属性説明
分類スタイル
場面Prettier 未導入リポジトリ
tsconst a = 1;; // ❌ 二重セミ

プリプロセッサを介さない環境でも コードフォーマットを一定に 保てます。


27 @typescript-eslint/no-empty-interface — 空インタフェース禁止

属性説明
分類スタイル
場面自動生成 DTO に空型が混入
tsinterface Empty {} //

type Empty = Record<string, never>; // ✅ 目的が明確

意図が曖昧な型 を排除しリーダビリティを高めます。


28 @typescript-eslint/default-param-last — 既定値引数は末尾

属性説明
分類スタイル
場面関数 API をデザインするとき
ts// ❌ before
function range(end = 10, start = 0) { … }

// ✅ after
function range(start: number, end = 10) { … }

型推論と呼び出し側の 可読性が両立 します。


29 @typescript-eslint/no-redundant-type-constituents — 重複ユニオン排除

属性説明
分類型安全
場面巨大ユニオン型を手動編集
tstype A = string | string | number; //
type A = string | number;          //

ユニオン縮約で IDE 補完も高速化 します。


30 @typescript-eslint/prefer-reduce-type-parameter — reduce 型パラメータ推奨

属性説明
分類パフォーマンス
場面複雑な Accumulator 型を伴う reduce
ts// ❌ before
list.reduce((sum, n) => sum + n, 0);

// ✅ after
list.reduce<number>((sum, n) => sum + n, 0);

型パラメータ指定で 初期値と戻り値の型不一致 を防ぎます。


31 @typescript-eslint/consistent-generic-constructors — ジェネリック new 統一

属性説明
分類スタイル
場面new Map<K,V>()Map<K,V>() が混在
ts// "constructor" を採用
const ids = new Set<string>();

全ファイル同表記 で差分が縮小します。


32 @typescript-eslint/no-unnecessary-condition — 余分条件警告

属性説明
分類バグ防止
場面レガシーコードで古い if ガードが残存
tsfunction always(id: string) {
  if (id) {           // ❌ 文字列は常に truthy
    return id;
  }
  return '';
}

デッドコードを早期発見 できリファクタリング効率が上がります。


33 @typescript-eslint/no-extraneous-class — 不要ラッパークラス禁止

属性説明
分類スタイル
場面静的メソッドしか持たないユーティリティ
ts// ❌ before
class MathUtil {
  static sum(a: number, b: number) { … }
}

// ✅ after
export const sum = (a: number, b: number) => …;

関数化で ツリーシェイク効果とテスト容易性 が向上します。


34 @typescript-eslint/return-await — return await 最適化

属性説明
分類バグ防止
場面スタックトレースが必要なエラーハンドラ
ts// ❌ before
return fetchUser();      // 呼び出し元にスタックが紛れる

// ✅ after
return await fetchUser(); // 現在の関数がトレースに残る

try/catch と組み合わせる際に デバッグ効率を確保 できます。


35 @typescript-eslint/no-require-imports — require 禁止

属性説明
分類スタイル
場面ES Modules へ全面移行中
ts// ❌ before
const fs = require('fs');

// ✅ after
import fs from 'fs';

CommonJS を撲滅して バンドラー最適化や Top-Level Await を活用できます。

まとめ

今回よく使うESLintのルールを35個まとめました。 運用の視点として、 ルールは「型安全」「バグ防止」「スタイル統一」「設計支援」「パフォーマンス最適化」の5個の軸で優先順位を付けると、選択が容易になります。

そしてまずは バグ防止系と型安全系 を CI で必須設定し、--fix を通して自動修正の文化を作ることを目指しましょう。

次にプロジェクトの規模やメンバー構成を踏まえてスタイル系ルールを拡充し、コードレビューでの認知負荷を軽減いたします。
設計支援系・パフォーマンス系は導入効果と警告ノイズのバランスを見ながら段階的に厳格化すると、移行ストレスを最小限に抑えられます。

すべてのルールに共通する運用ポイントは、「違反ゼロの状態を維持できるルールセットだけを常時オンにする」 ことです。
運用しきれないルールを惰性で残すと警告で埋もれて効果が薄れるため、定期的なルール棚卸しと eslint --print-config を用いた設定の可視化を習慣化していきましょう。

最終的には CI とエディタプラグインの二段構え で即時フィードバックを得られる環境を整備し、型安全・品質・開発体験を同時に底上げできる継続的インテグレーション体制を完成させてください。

関連リンク

TypeScriptの記事Typescript