【Nuxt 2】Stylelintの導入
Stylelint とは
Stylelint は、CSS の静的解析ツールです。 別の記事で紹介している ESLint の CSS 版みたいなイメージです。
ESLint と同様に、ルールの設定によりコード解析を行います。 ルールの一覧は、以下に記載されています。
Stylelint の導入
インストール
NuxtJS に Stylelint を導入するために、以下のパッケージをインストールします。
$ npm install -D stylelint stylelint-config-standard stylelint-config-recommended-vue postcss-html
stylelint(14.3.0)
:Stylelint の本体stylelint-config-standard(24.0.0)
:推奨ルールの設定stylelint-config-recommended-vue(1.1.0)
:Vue ファイル解析用に必要postcss-html(1.3.0)
:recommended-vue
のために必要
バージョンについては、この記事を執筆する際に使用したものです。 特にこだわりはありませんが、バージョンにより動作が異なる場合があります。
実際に、create-nuxt-app(v3.7.1)
で導入される Stylelint のバージョンは13.13.1
となっており、
上記のstylelint-config-recommended-vue
とpostcss-html
はインストールしなくても動作します。
この理由は、Stylelint の14.0.0
から Vue ファイルなど CSS ファイル以外のものを解析する場合、専用のモジュールが必要になっているからです。
これがないとCssSyntaxError
が発生します。
そのため、今回はstylelint-config-recommended-vue
とpostcss-html
をインストールしています。
参照: https://stylelint.io/migration-guide/to-14/#syntax-option-and-automatic-inferral-of-syntax
設定ファイル
次に Stylelint の設定ファイルとして、プロジェクトのルートフォルダにstylelint.config.js
を作成します。
module.exports = {
extends: [
'stylelint-config-standard',
'stylelint-config-recommended-vue',
],
rules: {},
}
rules
に独自のルールを設定していきますが、今回はextends
にstylelint-config-standard
とすることで、Stylelint で推奨されているルールを適用するようにしています。
具体的なルールの設定は以下に記載されています。
https://github.com/stylelint/stylelint-config-standard/blob/main/index.js
このリンク先にextends: 'stylelint-config-recommended'
とあるように、stylelint-config-standard
はstylelint-config-recommended
を拡張したものになります。
stylelint-config-recommended
は、stylelint-config-standard
よりもさらに基本的なルールが設定されています。
具体的なルールの設定は以下に記載されています。
https://github.com/stylelint/stylelint-config-recommended/blob/main/index.js
stylelint-config-standard
のルールが厳しいという場合は、stylelint-config-recommended
を代わりに使用することもできます。
$ npm install -D stylelint-config-recommended
module.exports = {
extends: [
'stylelint-config-recommended',
'stylelint-config-recommended-vue',
],
rules: {},
}
実行
Stylelint を実行するために、package.json
のscripts
に以下を追加します。
"scripts": {
//...
"lint:style": "stylelint \"**/*.{vue,css}\" --ignore-path .gitignore",
}
簡単に解説をすると、カレントフォルダ配下の Vue または CSS ファイルに対してコード解析を行います。
ただし、--ignore-path .gitignore
とあるように、.gitignore
に設定されたフォルダ、ファイルは解析対象外とします。
これにより以下のコマンドで Stylelint を実行できます。
$ npm run lint:style
エラーがある場合は、以下のように表示されます。
components/NuxtLogo.vue
22:3 ✖ Unexpected unknown property "hoge" property-no-unknown
見ての通りですが、components/NuxtLogo.vue
ファイルの 22 行目にあるhoge
は存在しないプロパティというエラーとなっています。
具体的にproperty-no-unknown
というルールによるエラーです。
ルールの設定
先述したように、stylelint-config-standard
などの設定があるため、無理に変更する必要はないはありません。
ただし、独自に設定したいなどの場合は、stylelint.config.js
のrules
に記述していきます。
ルールの設定は、ルール毎に異なります。 そのため、上述したルール一覧から各ルールのドキュメントを参考にしてください。
例えば、先程のproperty-no-unknown
というルールの設定を行ってみます。
property-no-unknown | Stylelint
property-no-unknown
は、true
を設定することで有効になります。
無効にする場合は、null
を設定します。
rules: {
//有効化
'property-no-unknown': true,
//無効化
'property-no-unknown': null
}
その他オプションとして、ignoreProperties
、ignoreSelectors
、ignoreAtRules
、checkPrefixed
という設定があります。
各オプションの説明は割愛しますが、以下のように設定します。
rules: {
'property-no-unknown': [
true,
{
'ignoreProperties': ['/^my-/', 'custom'],
'ignoreSelectors': [':root'],
'ignoreAtRules': ['supports'],
'checkPrefixed': true
}
]
}
配列の 1 つ目に基準となる値を設定し、2 つ目にオプションの情報を持つオブジェクトを設定します。 その他のルールについても同様の設定方法です。
SCSS への対応
パッケージの追加
SCSS を利用する場合は追加で以下のパッケージをインストールし、読み込む設定をします。
$ npm install -D stylelint-config-standard-scss postcss
stylelint-config-standard-scss(3.0.0)
:SCSS 用の推奨ルールの設定postcss(8.4.5)
:CSS をパースするためのもの@nuxt/postcss8
:NuxtJS で PostCSS@8 を使用するためのもの
module.exports = {
extends: [
'stylelint-config-standard-scss',
'stylelint-config-recommended-vue/scss',
],
rules: {},
}
stylelint-config-standard-scss
は、依存関係としてstylelint-config-standard
とstylelint-config-recommended-scss
を持ちます。
そのためstylelint-config-standard
を個別でインストールする必要はなくなります。
stylelint-config-recommended-scss
は、通常の CSS と同じくstandard
よりも基本的なルールが設定されています。
recommended
のルールだけを適用する場合は、stylelint-config-recommended-vue/scss
のみを設定します。
これは、stylelint-config-recommended-vue/scss
にstylelint-config-recommended-scss
の設定が含まれているからです。
module.exports = {
extends: [
'stylelint-config-recommended-vue/scss',
],
rules: {},
}
PostCSS をインストールしているのは、SCSS 用の Stylelint を動作させるためです。
NuxtJS プロジェクトには、バージョン7
のpostcss
が含まれていますが、SCSS の Stylelint を動作させるためにはバージョン8
が必要となります。
もう少し具体的な話をすると、stylelint-config-recommended-scss
の依存関係にあるpostcss-scss
を動作させるためにバージョン8
のpostcss
が必要となります。
また、バージョン8
の PostCSS を NuxtJS で使用する場合には、@nuxt/postcss8
をnuxt.config.js
のbuildModules
に設定する必要があります。
これが無いと、警告がバンバンでます。
export default {
buildModules: [
'@nuxt/postcss8'
]
}
対象ファイルの変更
解析対象のファイルを変更するために、package.json
のscripts
を変更します。
"scripts": {
//...
"lint:style": "stylelint \"**/*.{vue,css,scss}\" --ignore-path .gitignore",
}
以下は必須ではありませんが、ファイル種類毎にルールの設定を厳密に行いたい場合は、以下のようにstylelint.config.js
を設定します。
module.exports = {
extends: [
'stylelint-config-standard',
],
overrides: [
{
files: ['*.scss', '**/*.scss'],
extends: [
'stylelint-config-standard-scss',
]
},
{
files: ['*.vue', '**/*.vue'],
extends: [
'stylelint-config-standard-scss',
'styleling-config-recommended-vue/scss'
],
}
]
}
プロパティのソート
プロパティの順序を統一させるために、stylelint-config-recess-order
をインストールします。
$ npm install -D stylelint-config-recess-order
module.exports = {
extends: [
'stylelint-config-standard',
'stylelint-config-recommended-vue',
'stylelint-config-recess-order'
],
rules: {}
}
実行時に、--fix
オプションを指定することでコードフォーマットを行います。
"scripts": {
//...
"lint:style": "stylelint --fix \"**/*.{vue,css,scss}\" --ignore-path .gitignore",
}
プロパティの順序は、以下のリンク先を参照してください。
プロパティのソートについては、stylelint-config-recess-order
以外にも様々なパッケージがありますので、興味がある方は調べてみてください。
Prettier との併用
コードフォーマッターとして Prettier を使用する場合は、Prettier と重複しているルールを無視するため以下をインストールします。
$ npm install -D stylelint-config-prettier
stylelint.config.js
に設定する場合は、一番最後に読み込むようにします。
module.exports = {
extends: [
'stylelint-config-standard',
'stylelint-config-recommended-vue',
'stylelint-config-prettier'
],
rules: {}
}
Prettier については、以下の記事を参考にしてください。
ビルド時に実行
ホットリロードなどビルドのタイミングで Stylelint を実行するためには、@nuxtjs/stylelint-module
をインストールしてnuxt.config.js
に設定します。
$ npm install -D @nuxtjs/stylelint-module
export default {
buildModules: [
'@nuxt/postcss8',
'@nuxtjs/stylelint-module'
]
}
--fix
オプションを適用したい場合は、以下のようにnuxt.config.js
に設定を追加します。
export default {
stylelint: {
fix: true
},
}
Visual Studio Code の設定
エディターとして Visual Studio Code(VSCode)を使用している場合、以下の拡張機能をインストールすることで、エディタ上に Stylelint のエラーや警告が表示されるようになります。
Stylelint - Visual Studio Marketplace
Stylelint を適用するためには、.settings.json
に解析対象のファイルを指定する設定が必要です。
"stylelint.validate": ["css", "scss", "vue"],
また保存時に--fix
オプションを実行するためには、追加で以下の設定が必要です。
"editor.codeActionsOnSave": {
"source.fixAll.stylelint": true
}