JavaScript / TypeScriptプロジェクトで定番のツールとして、ESLintとPrettierがあります。両者は似て非なる役割で、組み合わせて使うのが基本です。本記事では、ESLintとPrettierの違いと共存設定方法を解説します。
役割の違い
- ESLint:コードの品質チェック(バグ・不適切な書き方の検出)
- Prettier:コードフォーマット(見た目の整形)
「未使用変数を警告する」のはESLint、「インデントやセミコロンを整える」のはPrettierの仕事です。
セットアップ
# インストール
npm i -D eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin \
prettier eslint-config-prettier
共存のポイント
競合を避けるため、フォーマット系のESLintルールは無効化します。eslint-config-prettierを入れて、設定の最後に展開します。
// eslint.config.js(Flat Config)
import tseslint from 'typescript-eslint';
import prettier from 'eslint-config-prettier';
export default [
...tseslint.configs.recommended,
prettier, // フォーマット系のルールを上書きでoff
];
Prettier設定
// .prettierrc
{
"semi": true,
"singleQuote": true,
"tabWidth": 2,
"printWidth": 100,
"trailingComma": "all"
}
運用フロー
- 保存時にPrettierで自動整形(VS Code設定 + Prettier拡張)
- コミット前にESLintを実行(lint-staged + husky)
- CIでlintとformat checkを必須化
scripts例
// package.json
"scripts": {
"lint": "eslint .",
"lint:fix": "eslint . --fix",
"format": "prettier --write .",
"format:check": "prettier --check ."
}
近年の選択肢:Biome
ESLint + Prettierの代替としてBiomeが注目されています。Rust製で爆速・設定一元化・ゼロセットアップが特徴。新規プロジェクトで「ESLint+Prettier or Biome」の比較検討が増えています。
まとめ
ESLintは品質、Prettierは見た目。役割の異なる2つを共存させ、保存時整形 + コミット前lint + CIチェックのワークフローを組めば、コード品質と一貫性が保たれます。新規プロジェクトではBiomeも検討に値します。