ESLint
Next.jsは、箱から出してすぐに使える統合されたESLintエクスペリエンスを提供します。package.json
にスクリプトnext lint
を追加します:
次にnpm run lint
またはyarn lint
を実行します:
まだアプリケーションでESLintが設定されていない場合、インストールと設定のプロセスをガイドされます。
次のようなプロンプトが表示されます:
? ESLintをどのように設定しますか?
❯ Strict(推奨)
Base
キャンセル
次の3つのオプションから選択できます:
-
Strict: Next.jsのベースESLint設定と、より厳格なCore Web Vitalsルールセットが含まれます。これは、ESLintを初めて設定する開発者に推奨される設定です。
-
Base: Next.jsのベースESLint設定が含まれます。
-
Cancel: ESLint設定を含みません。独自のカスタムESLint設定を行う予定がある場合にのみ、このオプションを選択してください。
2つの設定オプションのいずれかが選択された場合、Next.jsは自動的にeslint
とeslint-config-next
を依存関係としてアプリケーションにインストールし、プロジェクトのルートに選択した設定を含む.eslintrc.json
ファイルを作成します。
エラーを検出するためにnext lint
を実行できるようになりました。ESLintが設定されると、毎回のビルド(next build
)中に自動的に実行されます。エラーはビルドを失敗させ、警告は失敗させません。
next build
中にESLintを実行したくない場合は、ESLintの無視に関するドキュメントを参照してください。
開発中にコードエディターで直接警告とエラーを表示するために、適切な統合を使用することをお勧めします。
ESLint設定
デフォルトの設定(eslint-config-next
)には、Next.jsで最適な箱から出してすぐに使えるリンティングエクスペリエンスに必要なすべてが含まれています。アプリケーションにまだESLintが設定されていない場合、この設定と共にESLintを設定するためにnext lint
を使用することをお勧めします。
他のESLint設定と共に
eslint-config-next
を使用する場合は、競合を引き起こさずに設定する方法については、追加の設定セクションを参照してください。
eslint-config-next
内で、以下のESLintプラグインからの推奨ルールセットがすべて使用されます:
これはnext.config.js
からの設定よりも優先されます。
ESLintプラグイン
Next.jsは、ベース設定内にバンドルされているESLintプラグインeslint-plugin-next
を提供しており、Next.jsアプリケーションで一般的な問題や課題を検出することを可能にします。ルールの完全なセットは以下の通りです:
推奨設定で有効
ルール | 説明 | |
---|---|---|
@next/next/google-font-display | Google Fontsでのfont-display動作を強制します。 | |
@next/next/google-font-preconnect | Google Fontsでpreconnect を使用することを確認します。 | |
@next/next/inline-script-id | インラインコンテンツがあるnext/script コンポーネントでid 属性を強制します。 | |
@next/next/next-script-for-ga | Google Analyticsのインラインスクリプトを使用する際にnext/script コンポーネントを推奨します。 | |
@next/next/no-assign-module-variable | module 変数への代入を防止します。 | |
@next/next/no-async-client-component | クライアントコンポーネントが非同期関数になることを防止します。 | |
@next/next/no-before-interactive-script-outside-document | pages/_document.js の外でnext/script のbeforeInteractive 戦略の使用を防止します。 | |
@next/next/no-css-tags | 手動のスタイルシートタグを防止します。 | |
@next/next/no-document-import-in-page | pages/_document.js の外でnext/document のインポートを防止します。 | |
@next/next/no-duplicate-head | pages/_document.js での<Head> の重複使用を防止します。 | |
@next/next/no-head-element | <head> 要素の使用を防止します。 | |
@next/next/no-head-import-in-document | pages/_document.js でのnext/head の使用を防止します。 | |
@next/next/no-html-link-for-pages | 内部Next.jsページへ移動するための<a> 要素の使用を防止します。 | |
@next/next/no-img-element | 低速なLCPとより高い帯域幅のため、<img> 要素の使用を防止します。 | |
@next/next/no-page-custom-font | ページ固有のカスタムフォントを防止します。 | |
@next/next/no-script-component-in-head | next/head コンポーネントでのnext/script の使用を防止します。 | |
@next/next/no-styled-jsx-in-document | pages/_document.js でのstyled-jsx の使用を防止します。 | |
@next/next/no-sync-scripts | 同期スクリプトを防止します。 | |
@next/next/no-title-in-document-head | next/document からのHead コンポーネントでの<title> の使用を防止します。 | |
@next/next/no-typos | Next.jsのデータフェッチ関数での一般的な入力ミスを防止します | |
@next/next/no-unwanted-polyfillio | Polyfill.ioからの重複ポリフィルを防止します。 |
すでにアプリケーションでESLintが設定されている場合、いくつかの条件を満たさない限り、eslint-config-next
を含めるのではなく、このプラグインから直接拡張することをお勧めします。詳細については、推奨プラグインルールセットを参照してください。
カスタム設定
rootDir
Next.jsがルートディレクトリにインストールされていないプロジェクト(モノレポなど)でeslint-plugin-next
を使用している場合、.eslintrc
のsettings
プロパティを使用して、Next.jsアプリケーションの場所を指定できます:
rootDir
は、パス(相対または絶対)、グロブ(例:"packages/*/"
)、またはパスとグロブの配列にすることができます。
カスタムディレクトリとファイルのリント
デフォルトでは、Next.jsはpages/
、app/
、components/
、lib/
、src/
ディレクトリ内のすべてのファイルに対してESLintを実行します。ただし、本番ビルドのnext.config.js
のeslint
設定でdirs
オプションを使用して、どのディレクトリをリントするかを指定できます:
同様に、next lint
で特定のディレクトリとファイルをリントするために、--dir
と--file
フラグを使用できます:
キャッシング
パフォーマンス向上のため、ESLintで処理されたファイルの情報がデフォルトでキャッシュされます。これは.next/cache
または定義されたビルドディレクトリに保存されます。単一のソースファイルの内容以上に依存するESLintルールを含む場合にキャッシュを無効にするには、next lint
で--no-cache
フラグを使用します。
ルールの無効化
サポートされているプラグイン(react
、react-hooks
、next
)によって提供されるルールを変更または無効にする場合は、.eslintrc
のrules
プロパティで直接変更できます:
Core Web Vitals
next/core-web-vitals
ルールセットは、next lint
を初めて実行し、厳格オプションを選択したときに有効になります。
next/core-web-vitals
は、Core Web Vitalsに影響するデフォルトで警告となっているルールの一部をエラーに更新します。
next/core-web-vitals
エントリーポイントは、Create Next Appで新しく作成されたアプリケーションに自動的に含まれます。
TypeScript
Next.js ESLintルールに加えて、create-next-app --typescript
はnext/typescript
を使用して、TypeScript固有のリントルールも設定に追加します:
これらのルールはplugin:@typescript-eslint/recommended
に基づいています。
詳細については、typescript-eslint > Configsを参照してください。
他のツールとの使用
Prettier
ESLintにはコード整形ルールも含まれており、既存のPrettier設定と競合する可能性があります。ESLintとPrettierを連携させるために、ESLint設定にeslint-config-prettierを含めることをお勧めします。
まず、依存関係をインストールします:
次に、既存のESLint設定にprettier
を追加します:
lint-staged
lint-stagedでnext lint
を使用してステージングされたgitファイルにリンターを実行する場合、--file
フラグの使用を指定するために、プロジェクトのルートに.lintstagedrc.js
ファイルを追加する必要があります。
既存の設定の移行
推奨プラグインルールセット
すでにアプリケーションにESLintが設定されており、以下のいずれかの条件に該当する場合:
- 以下のプラグインのいずれかが既にインストールされている(別々にまたは
airbnb
やreact-app
などの異なる設定を通じて):react
react-hooks
jsx-a11y
import
- Next.jsのBabelで設定されているものとは異なる特定の
parserOptions
を定義している(Babelの設定をカスタマイズしていない限り推奨されません) - Node.jsおよび/またはTypeScriptのリゾルバーを定義してインポートを処理する
eslint-plugin-import
をインストールしている
その場合、これらのプロパティがeslint-config-next
内でどのように設定されているかを優先する場合は、これらの設定を削除するか、Next.js ESLintプラグインから直接拡張することをお勧めします:
プラグインは、next lint
を実行する必要なく、通常のようにプロジェクトにインストールできます:
これにより、複数の設定間で同じプラグインやパーサーをインポートすることによって発生する衝突やエラーのリスクを排除できます。
追加の設定
すでに別のESLint設定を使用しており、eslint-config-next
を含める場合は、他の設定の後に最後に拡張されることを確認してください。例:
next
設定は既にparser
、plugins
、settings
プロパティのデフォルト値を設定しています。ユースケースに応じて異なる設定が必要でない限り、これらのプロパティを手動で再宣言する必要はありません。
他の共有設定を含める場合、これらのプロパティが上書きまたは変更されないようにする必要があります。そうでない場合は、next
設定と動作を共有する設定を削除するか、上記のようにNext.js ESLintプラグインから直接拡張することをお勧めします。