前提
今回Stylelintを導入するプロジェクトは、Astroを使ったもの。
SCSSを使用してて、だいたい半分くらいのスタイルは *.scss
ファイルに書いてimport、もう半分くらいのスタイルは *.astro
ファイル内の <style lang="scss">
タグ内に記述してる。また、部分的にはSCSSを使わず *.css
ファイルをimportしている箇所もある。
MDXは使用していないことを留意のうえ、上記全部をカバーしていきたい。
Stylelint導入
だいたいStylelintのGetting Startedと、AstroのエディタのセットアップのStylelint項を見る。
まず、各種パッケージをインストール。
次に、プロジェクトルートに以下の内容で .stylelintrc.mjs
を作成。これがstylelintの設定ファイルとなる。
あと、自分はthe-new-css-resetをCSSファイルにコピペしてimportしているので、stylelintの対象から除外するために .stylelintignore
も作成。
最後に、自分はVSCodeを使っているので、VSCode用のstylelint拡張機能をインストール。
この拡張機能用に、VSCodeの settings.json
に以下を追加。
実行してみる
どんなもんか見てみましょう
あばばばばwwww そんなにだめ!?
以下の通りにコマンドラインから実行して、総エラー件数を確認してみる。
思ったより……か?
次項に、ここまでの設定を使って自分のプロジェクトで出たものをいくつか抜粋して掲載しておく。
Note
pnpmを使ってるから実行コマンドは pnpm dlx
でもいいはずだと思うんだけど、Error: Cannot resolve custom syntax module "postcss-html". Check that module "postcss-html" is available and spelled correctly.
エラーが出るので諦めて npx
使った。一応、GitHubのIssueにそれっぽいのがあったので↓に貼っておく。
Cannot resolve custom syntax module "postcss-scss" · Issue #2 · stylelint-scss/stylelint-config-standard-scss
出てきたもの実例
Tip
だいたいのルールは、オプションでどの書き方に統一するかを指定できる。
存在しない疑似クラスが使われている。
……が、:global
はAstroで使える疑似クラスなので、指摘してほしくない。
.stylelintrc.mjs
に以下を追加して無視してもらう。
カスタムプロパティがケバブケースでない。
……が、Astroの define:vars
で渡したカスタムプロパティは公式サンプルでもキャメルケースなので、指摘してほしくない。
.stylelintrc.mjs
に以下を追加して、*.astro
ファイル内のカスタムプロパティは無視してもらう。
url()
関数の引数にクォートが無い。
クォートつけられるの知らなかった。
疑似要素の ::
が :
になっている。
シンプルに書き間違いで恥ずかしい。感謝。
ルールのブロックの前に空行が無い。
これは見逃してほしい。OFFにする。
Autoprefixerがなんとかしてくれるプロパティにベンダープレフィックスが書かれている。
-webkit-text-size-adjust
に関しては思考停止で書いてた……。
クラスセレクタがケバブケースでない。
昔から使ってる汎用クラスだから移行が面倒で……。
色の指定方法が古い。
知らなかった。そんな違ったのか。
範囲指定するメディアクエリは >=
とか <=
とかで書くべき (Media Queries Level 4)。
Retinaディスプレイ用に高解像度の素材を用意してたやつ。主要ブラウザは軒並み対応したらしいけど、他ならぬ自分がiOSのアップデートをサボってる人種だからなんとも……。今回はオプション prefix
で従来の表記にしておく。
より具体的なセレクタ=優先度が高いセレクタが、それよりも低い優先度のセレクタの手前に書かれている。
セレクタの優先度とソース上の順序を合わせるべきということです。
言われてみると「なるほど」と思うが、絶対に併用しないことがわかってるところまで言われると厳しく感じるかも。行単位で無効化するのがよさそう。
フォント名にクォートがついている。
なぜ Meiryo
だけエラー? と思ったけど、空白・数字・ハイフン以外の句読点が入ってないからつけなくていいよ、ということらしい。個人的にはそういうの面倒だから、オプション always-unless-keyword
でキーワード以外全部クォート必須に変更する。
//
コメントの前に空行が無い。
お試しで書いたものをコメントアウトしてそのまま残したりするので、これはほっといてほしい。OFFにする。
最終的な設定ファイル
今回はこんな感じになった。
これで --fix
かけたら軒並み消えたので、終わり。