【実務・中級編】PrettierとESLintの重複ルールを完全排除する:『eslint-config-prettier』の依存関係に頼らない最新のクリーン設定術 – デバッグ・コード品質・テストツール生産性向上バイブル

脱・設定の迷宮:ESLint v9 “Flat Config” 時代の Prettier 連携と、真にモダンなコード品質管理術

多くのチームが「ESLint と Prettier の競合問題」という泥沼に足を取られています。`eslint-config-prettier` をインストールし、`extends` の末尾に記述して祈る……そんな時代はもう終わりました。

ESLint v9(Flat Config)の登場は、単なる設定ファイルの変更ではありません。これは「ツールを重ねる」という負債から脱却し、「役割を分離する」というアーキテクチャの転換を意味します。本稿では、依存関係を極限まで削ぎ落とし、CIの実行速度と開発者の認知負荷を最小化する「真のモダン設定」を伝授します。

—

1. なぜ「設定の重ね塗り」は技術的負債となるのか

従来の ESLint 設定(`.eslintrc`)は、プラグインを読み込めば読み込むほど、ルールがカスケードされ、どのプラグインがどのルールを上書きしているのか判別不能な「ブラックボックス」と化していました。

Flat Config(`eslint.config.js`)の哲学は明確です。「ESLint はコードの構造と論理的なエラーを監視し、Prettier は文字列のレイアウトだけを担当する」。この境界線を曖昧にせず、設定ファイル側で強制的に切り離すのが、現代のテックリードが行うべき責務です。

—

2. 【実践】依存関係に頼らない「最小構成」の構築

`eslint-config-prettier` をインストールして満足していませんか? 実は、Flat Config においては、特定のプラグインがルールを競合させるケースは極めて限定的です。まずは、`eslint-config-prettier` を捨て、明示的な「ルール無効化」を行うことで、依存ツリーをクリーンに保ちます。

`eslint.config.js` の設計思想

import js from “@eslint/js”;
import prettierRecommended from “eslint-plugin-prettier/recommended”;

export default [
// 1. ESLint 標準の推奨ルールを適用
js.configs.recommended,

// 2. Prettier 関連の競合するルールを無効化する最もクリーンな手法
// eslint-plugin-prettier/recommended を使うことで、
// 競合するルールを自動的にオフにし、Prettier を ESLint のルールとして実行する
prettierRecommended,

{
// 3. ここでプロジェクト固有のルールを定義
// ここには「フォーマット」に関するルールは一切書かないこと
rules: {
“no-console”: “warn”,
“prefer-const”: “error”,
// 「セミコロンをつけるか否か」といった議論はPrettierに全投げする
}
}
];

なぜこれが最強なのか?
この構成であれば、ESLint は「コードの品質」のみを評価し、Prettier は「コードの整形」のみを制御します。ESLint のルールセットがどれだけ巨大になっても、Prettier 側の設定が汚染されることはありません。

—

3. 開発スピードを極限まで加速させる「神テクニック」

VS Code 設定の「完全自動化」

開発者の手をわずらわせる「保存時の挙動」は、`settings.json` で完全に統一します。チーム全員が同じ挙動を強制される環境こそが、コンテキストスイッチを最小化します。

{
// 保存時に ESLint で自動修正を行い、Prettier で整形する
“editor.codeActionsOnSave”: {
“source.fixAll.eslint”: “explicit”
},
// ファイルタイプごとのデフォルトフォーマッタ指定
“[javascript][typescript][typescriptreact]”: {
“editor.defaultFormatter”: “esbenp.prettier-vscode”,
“editor.formatOnSave”: true
}
}

隠れたキーボードショートカット:`F8` を制する

ESLint のエラーをわざわざマウスでホバーしていませんか?

  • `F8` / `Shift + F8`: 次のエラー / 前のエラーへジャンプ。
  • `Cmd + .` (Mac) / `Ctrl + .`: クイックフィックスの呼び出し。

この2つを体に染み込ませるだけで、コーディング中の修正速度は2倍になります。

—

4. チーム開発における「品質の防波堤」:CIの最適化

大規模プロジェクトにおいて、毎回全ファイルをLintするのは時間の浪費です。差分だけをLintし、高速なCI環境を構築しましょう。

`package.json` のベストプラクティス

`lint-staged` を活用し、Git のステージング領域のみをターゲットにします。

{
“lint-staged”: {
“.{js,ts,tsx}”: [
“eslint –fix”, // ロジックの修正を先に適用
“prettier –write” // 最後にフォーマットを適用
]
}
}

アーキテクトの視点:
この順序が重要です。`eslint –fix` でコードの論理的な修正を行い、その結果生じた微妙な空白や改行の乱れを、最後に `prettier` が修正する。このパイプラインを維持することで、フォーマット不備によるコミット履歴の汚染を100%防ぐことができます。

—

最後に:ツールを使いこなすのではなく「制約」を愛せ

コード品質管理において最も重要なのは、ツールを入れることではありません。「人間が判断しなくてもいいこと」をすべてマシンに委ねるという設計思想です。

今回紹介した構成は、複雑な依存関係を排除し、ESLint v9 のパワーを最大限に引き出すための最小単位です。まずは皆さんのプロジェクトの `package.json` から、不要な `eslint-config-xxxx` 系を1つ削除することから始めてみてください。その瞬間に、プロジェクトのビルド時間は短縮され、開発者の認知負荷は劇的に軽くなるはずです。

エンジニアの時間は、ルールの競合をデバッグするためにあるのではありません。プロダクトの価値を最大化するためにあるのです。

タイトルとURLをコピーしました