Nextjs

Next.js+Tailwind CSS+Sass+Eslint+Stylelint+PrettierでVSCodeの環境構築【APPルーターを使おう 第二回】

Next.js13.4から正式実装になったApp Routerを使うためのメモ。

第二回は開発環境の構築。

エディターはVSCode。

各種linterを追加し、VSCodeの設定をする。

Tailwind CSSとEslint

Next.js13.4をインストールしたときにインストールしていれば、Tailwind CSSとEslintはインストールされている。

以下は公式サイト。

Tailwind CSS - Rapidly build modern websites without ever leaving your HTML.
Tailwind CSS is a utility-first CSS framework for rapidly building modern websites without ever leaving your HTML.
Find and fix problems in your JavaScript code - ESLint - Pluggable JavaScript Linter
A pluggable and configurable linter tool for identifying and reporting on patterns in JavaScript. Maintain your code quality with ease.

Sassのインストール


#sassインストール
npm install -D sass

Tailwind CSSは便利だけど、全てのCSSをかけるわけではないというのが導入の理由の一つ。

もう一つの理由は、プレーンのCSSはかなり書きやすくなったけど、それでもまだScssの記法のほうが便利だからというもの。

別に無くても問題はないが、ブログ機能などで、マークダウンファイルを使う時に、Tailwind CSSだけではキツイので使うことが多い。

prettierのインストール

コードを規則にそって整形してくれるコードフォーマッターにprettierを使う。

VSCodeでも設定をして、ファイルを保存すると自動で整形されるようにする(後述)。


# prettier => 本体
# prettier-plugin-tailwindcss => クラス名を規定のルールで並び変えてくれる
# eslint-config-prettier => eslintとprettierで競合するルールはprettierを優先するためのeslint設定
npm install -D prettier prettier-plugin-tailwindcss eslint-config-prettier

Tailwind CSSの並びを人力に頼るとすぐにめちゃくちゃになるので、ここでもツールの力を借りる。

prettier-plugin-tailwindcssはTailwind公式が出している。

対応はTailwind CSS v3.0+ 用の Prettier v3+。

v0.5.xからはPrettier v3が必要で、ESM対応のみになる。

prettier.config.jsを作り以下を記述。


// prettier.config.js
module.exports = {
  plugins: ["prettier-plugin-tailwindcss"],
};

eslint-config-prettierはeslintとprettierで競合するルールの場合、prettierを優先したいので、それをしてくれるプラグイン。

以下のように、.eslintrc.jsonに設定を追加する。


//.eslintrc.json
{
  "extends": ["next/core-web-vitals", "prettier"]
}

VSCodeの設定はeslintなども合わせて後述する。

stylelintのインストール


# stylelint => 本体
# stylelint-config-standard-scss => 基本ルールのscss拡張バージョン
# stylelint-config-prettier-scss => 競合するルールはprettierを優先する
# stylelint-config-recess-order => Scssのプロパティを自動的に並び変えする

npm install -D stylelint stylelint-config-prettier-scss stylelint-config-standard-scss stylelint-config-recess-order

stylelintはルールの拡張がたくさんあるので、どれを使うのか迷うが、ここでは基本的なものだけインストールしている。

Scssを使うため、基本ルールのscss拡張バージョンを採用している。さらに競合ルールのprettier優先、自動並び変えを追加している。

各種設定を有効にするために、.stylelintrc.jsonを作り設定を追加する。

extendのルールは後ろのものが優先なので、stylelint-config-prettier-scssは最後。

また、Tailwind CSSの@applyに警告が出ないように除外ルールも記載する。


//.stylelintrc.json
{
  "extends": [
    "stylelint-config-standard-scss",
    "stylelint-config-recess-order",
    "stylelint-config-prettier-scss"
  ],
  "rules": {
    "scss/at-rule-no-unknown": [
      true,
      {
        "ignoreAtRules": ["apply", "layer", "responsive", "screen", "tailwind"]
      }
    ]
  }
}

VSCodeの拡張機能を追加

Tailwind CSS IntelliSense

Tailwind CSS IntelliSense - Visual Studio Marketplace
Extension for Visual Studio Code - Intelligent Tailwind CSS tooling for VS Code

オートコンプリートとかしてくれる。

マウスオーバーするとTailwindのクラスがプレーンのCSSで何を設定しているのかもわかる。

Prettier

Prettier - Code formatter - Visual Studio Marketplace
Extension for Visual Studio Code - Code formatter using prettier

VSCode上でprettierを使うための拡張機能。

settings.jsonでprettierをデフォルトに設定し、保存したときに整形が実行されるようにすると便利。

eslint

ESLint - Visual Studio Marketplace
Extension for Visual Studio Code - Integrates ESLint JavaScript into VS Code.

VSCodeでeslintを使うための拡張機能。

stylelint

Stylelint - Visual Studio Marketplace
Extension for Visual Studio Code - Official Stylelint extension for Visual Studio Code

VSCode上でstylelintを使うための拡張機能。

settings.jsonに追加

複数の言語を使う場合、各ワークスペースごとに追加の設定ができる。

VSCodeの左下の歯車(管理)⇒ 設定 ⇒ タブのワークスペースを選択 ⇒ 右上アイコン(設定jsonを開く)とすると、プロジェクト直下に.vscodeフォルダができて、その中にワークスペース用のsettings.jsonができる。ここに追加することで、メインの設定にワークスペース専用の設定を追加できる。


{
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "editor.formatOnSave": true,
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": true,
    "source.fixAll.stylelint": true
  },
  "eslint.validate": [
    "html",
    "javascript",
    "javascriptreact",
    "typescript",
    "typescriptreact"
  ],
  "css.validate": false,
  "scss.validate": false,
  "stylelint.enable": true,
  "stylelint.validate": ["css", "scss"]
}

デフォルトのフォーマッターをprettierにし、保存したときに自動で整形が実行されるようにしている。

v2までのprettierはマークダウンファイルを整形すると、全角日本語と半角英数字の間に不自然にスペースが入る謎の仕様だったのでマークダウンファイルは自動整形から外していたのだけど、v3で解消されていた。嬉しい。

eslintとstylelintの整形もファイル保存時に実行される。

VSCodeのデフォルトチェック機能はfalseにして、eslintではhtml、js、ts、jsx、tsxを、stylelintではcssとscssを対象範囲にしている。

これでファイルを保存したときにルール通りに整形される。

scssとか、プロパティの順番を適当に書いても、ファイルを保存すれば自動で並び変えられるの、ほんと便利。

まとめ

linterは便利なので、もうこれがないとVSCode使えないぐらいにはお世話になっている。

複数の人間が関わる場合、いくらルールを決めたって手動ではどこかで限界がくるので、linterは本当に素晴らしいと思う。

linterのめんどくささは設定。

とりあえず満足する環境を作るのに時間がかかるのが辛いところ。

ある程度テンプレートみたいなのを作っておくと楽だけど、各種linterはどんどんアップグレードされていくので、それはそれで難しい。

適宜アップデートしていくしかないかと。

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