前提
- 事前にyarnのインストールが必要
どうやら「Rails new」時に、postcss
や、esbuild
が「yarn」を使用してインストールされる模様
※別にnpmでいいや〜の私はこのせいで少し戸惑った💦
プロジェクトの作成
rails new . -j esbuild -c postcss
- jオプションで
JavaScript
のビルダー指定 - cオプションで使用するCSSフレームワークに
postCSS
を指定
色々インストールされる(適当)
package.jsonにscriptsが登録
yarn
+ 以下のコマンドで、ビルド処理が可能。
-
yarn build
=> JavaScriptのバンドル -
yarn build:css
=> CSSファイルのバンドル処理
但し、Rails7にはbin/dev
コマンドが用意されているため、こちらを使用するのが一般的。
(CSS,JSの変更を検知して、自動でビルド処理してくれる優れもの)
gem "jsbundling-rails"
と gem "cssbundling-rails"
を使用しているよ〜
"scripts": {
"build": "esbuild app/javascript/*.* --bundle --sourcemap --outdir=app/assets/builds --public-path=assets",
"build:css": "postcss ./app/assets/stylesheets/application.postcss.css -o ./app/assets/builds/application.css"
}
ビルド
CSS
$ yarn build:css
yarn run v1.22.19
$ postcss ./app/assets/stylesheets/application.postcss.css -o ./app/assets/builds/application.css
✨ Done in 1.09s.
JavaScript
yarn build
yarn run v1.22.19
$ esbuild app/javascript/*.* --bundle --sourcemap --outdir=app/assets/builds --public-path=assets
PostCSSの設定
プロジェクトのルートディレクトリに、postcss.config
が作成されています。
module.exports = {
plugins: [
require('postcss-nesting'),
require('autoprefixer'),
],
}
デフォルトでは、以下のプラグインを読み込んでいる
-
postcss-nesting
=> CSSのネスト記法をサポート -
autoprefixer
=> ベンダープレフィックスの補完
このファイルに登録したプラグインがbuild:css
時に実行されるよ〜
※ プラグインを追加登録したい場合は、従来通り、npm / yarn
でインストールし、postcss.config.js
に登録
PostCSS便利なプラグインについて
-
autoprefixer
デフォルトで実装されている
ベンダープレフィックスを自動付与 -
postcss-nested
デフォルトで導入されているpostcss-nesting
では、ネストされたクラス属性へのスタイル適用が行えないため、Sass
に慣れた私はこちらを使用している。 -
postcss-import
@import
記法をサポートしてくれる。ファイル分割が可能となる。 -
cssnano
CSSをminify処理してくれる。本番環境では必須。 -
stylelint
CSSのリンター。
他のプラグインとは導入方法が異なるので、下で別途解説
Stylelint 導入方法
- インストール
npm install stylelint --save-dev
- プロジェクトのルートフォルダに、
.stylelintrc.json
を作成- 独自ルールを
"rule"
でオーバーライド - 基本的なコーディングルールを
stylelint-config-standard
から継承
※事前にnpm install stylelint-config-standard --save-dev
が必要
- 独自ルールを
{
"extends": "stylelint-config-standard",
"rules": {
"indentation": 2,
}
}
- Stylelintの実行用スクリプトの登録
package.json
に以下を追記
"scripts": {
"lint:css": "stylelint ./app/assets/stylesheets/*.{postcss,css,scss,sass}",
"lint:fix": "stylelint --fix ./app/assets/stylesheets/*.{postcss,css,scss,sass}"
},
以下のコマンドでstylelint
の実行が可能
-
lint:css
-> コードの検証 -
lint:fix
-> コードの検証+構文の修正
まとめ
以上で作業完了です〜