【入門編】ESLintの自動修正でバグを生む罠:–fixで壊れやすいコードパターンと安全な運用術 – デバッグ・コード品質・テストツール生産性向上バイブル

エンジニアの皆さん、こんにちは。開発環境の深淵を探求するアーキテクトです。

ESLintとPrettier。今やモダンなJS/TS開発において「空気」のような存在ですが、皆さんはこれらを「単なるコード整形ツール」だと思っていませんか?実は、自動修正(`–fix`)という強力すぎる機能は、時に諸刃の剣となります。

今回は、ESLintがコードを「破壊」する瞬間と、それを防ぎながら開発生産性を最大化する「プロの運用術」を伝授します。

—

1. なぜ「自動修正」がバグを呼ぶのか?

ESLintの自動修正は、AST(抽象構文木)を操作してコードを書き換えます。しかし、AST上の論理的な修正が、実行時の振る舞いを変えてしまうケースが存在します。

危険なルールの筆頭格:`prefer-destructuring`

例えば、配列の要素を定数に代入するコードを考えてみましょう。

const user = users[0];
const name = user.name;

`prefer-destructuring` はこれを以下のように直そうとします。

const [user] = users; // ここに罠がある
const { name } = user;

一見スマートですが、元のコードが `users` が空配列(`[]`)の場合、`user` は `undefined` になりますが、代入は成功します。しかし、分割代入を行うと、存在しないインデックスへのアクセスでランタイムエラーを誘発する可能性が激増します。ESLintは「コードの見た目」は整えますが、「実行時の境界条件」までは完全に保護できないのです。

—

2. 安全な「自動修正」を構築するためのセットアップ

初心者のうちは、「とりあえず全部 `–fix` する」設定にしがちですが、それは非常に危険です。まずは、最も堅牢でモダンな構成を構築しましょう。

必要なパッケージのインストール

`eslint-config-prettier` を使い、Prettierと競合するESLintのルールを完全に無効化するのが鉄則です。

ESLint本体と、Prettierとの衝突を防ぐ設定を導入
npm install –save-dev eslint prettier eslint-config-prettier

最も重要な設定ファイル:`.eslintrc.json`

ルールは「厳しく」設定し、自動修正は「慎重に」行うのがエンジニアの矜持です。

{
“extends”: [
“eslint:recommended”,
“prettier” // Prettierのルールを優先し、競合を抑制する魔法の行
],
“rules”: {
// 自動修正でバグりやすいルールはあえて warn に留める
“prefer-destructuring”: [“warn”, { “object”: true, “array”: false }],
// 無意味なリネームは自動修正させない
“no-useless-rename”: “error”
}
}

—

3. HelloWorld的動作確認:安全なフィードバックループ

いきなり全てのファイルを書き換えるのではなく、まずは「検知」と「修正」のサイクルを分離しましょう。

ステップ1: 検知する(CI/ローカル)

まずは修正せず、問題だけを特定します。

–fixを付けずに実行し、エラー箇所を人間が確認する
npx eslint src/

ステップ2: 修正する(限定的)

全自動ではなく、特定のルールのみを対象にするのがプロの流儀です。

安全が確認されているルールだけを自動修正する
npx eslint –fix –rule “no-unused-vars: error” src/

—

4. 伝説のDevOpsリードからの「現場の知恵」

最後に、現場で事故を起こさないための「2つの鉄則」を授けます。

① `lint-staged` でコミット前に防波堤を作る

`git commit` 時に、変更したファイルだけを対象にlintを走らせます。これにより、破壊的な修正がメインブランチに混入するのを物理的に防げます。

// package.json に追記
“lint-staged”: {
“.{js,ts}”: [
“eslint –fix”,
“prettier –write”
]
}

② 「自動修正」はあくまで補助と心得よ

もし複雑なロジック修正を自動化したいなら、ESLintではなく jscodeshift を使った「コード変換(Codemod)」を検討してください。これらはASTレベルでの安全な変換を保証するために設計されており、ESLintの `–fix` よりも遥かに安全で強力です。

—

まとめ:ツールを「飼い慣らす」ということ

ESLintやPrettierは、あなたの「思考の補助」をするツールであって、「思考の代行」をするツールではありません。

  • 自動修正は「整形」に留め、「ロジックの変更」は慎重に行う。
  • 危険なルールは `warn` に設定し、警告を無視しない文化を作る。
  • CI/CDパイプラインには常に `lint` を含め、人間が気づかない破壊を検知する。

これをマスターすれば、あなたのコードは美しく、そして何より「壊れにくい」ものへと進化します。さあ、安全で快適な開発ライフへ飛び込みましょう!

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