STICKY NOTES

11ty と TailwindCSS のビルド環境を整える - その2

2023-02-28
2023-03-01
yagasuke
website-builder

SUMMARY

11ty で TailwindCSS を組み込んだ最低限のビルド環境を整える。2回目は TailwindCSS の導入と PostCSS によるパースおよび npm run で前回の 11ty のビルドと、PostCSS の実行を同時に行う。

前回は 11ty の導入とディレクトリ構成について書いたので、TailwindCSS の導入から。

前回記事: 11ty と TailwindCSS のビルド環境を整える - その1

構成

  • 2019 の Intel Mac
  • macOS 13.2 (22D49)
  • node v18.14.0(brew でインストール)
  • npm 9.3.1(brew でインストール)

TailwindCSS のインストール

公式サイトを参考に進める。
今回は PostCSS も使うので、Using PostCSS に記載の手順がベース。

ルートディレクトリで以下のコマンドを叩いて TailwindCSS と PostCSS を入れる。

npm install --save tailwindcss postcss postcss-cli autoprefixer

公式だと postcss-cli が含まれていないが、これがないと npx postcss とした時にエラーになる。

この状態の package.json。

{
  "name": "11ty-hands-on",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build": "npx @11ty/eleventy",
    "dev": "npx @11ty/eleventy --serve"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@11ty/eleventy": "^2.0.0",
    "autoprefixer": "^10.4.13",
    "postcss": "^8.4.21",
    "postcss-cli": "^10.1.0",
    "tailwindcss": "^3.2.7"
  }
}

導入したパッケージについて

  • tailwindcss: CSS フレームワーク
  • postcss: 導入している PostCSS のプラグインに応じて、CSS に対して色々操作してくれるパーサー
  • postcss-cli: コマンドラインで postcss を使う時に必要になるインタフェース
  • autoprefixer: PostCSS がパースする際に、-webkit- などのベンダープレフィックスを自動でつけてくれるプラグイン

TailwindCSS の設定

公式の手順にある通り、以下のコマンドで設定ファイルを作成する。

npx tailwindcss init

現在のディレクトリ(ルート)直下に tailwind.config.js が生成されるので、エディタで編集する。

/** @type {import('tailwindcss').Config} */
module.exports = {
-  content: [],
+  content: ['_site/**/*.{html,js}'],
  theme: {},
  plugins: [],
}

content を修正し、11ty の出力先の HTML および JS のファイルを走査するように設定する。対象となるファイルが検査され、必要なスタイルを検出、出力先の CSS ファイルに定義される。

動作するか確認するために、src/assets/csstailwind.css というファイルを作成し、以下のように記述しビルドしてみる。

@tailwind base;
@tailwind components;
@tailwind utilities;

ビルド。

npx tailwindcss ./src/assets/css/tailwind.css -o ./src/assets/css/out.css

tailwind.css のビルド出力が out.css にされているので確認する。

PostCSS の設定

続いて PostCSS の設定ファイルを生成する。
tailwind.config.js 同様、現在のディレクトリ直下に postcss.config.js を作成し、以下のように記述する。

module.exports = {
  plugins: {
    tailwindcss: {},
    autoprefixer: {},
  }
}

plugins に TailwindCSS と Autoprefixer を設定する。
こうすることでパーサーの処理後、plugins に記述された順に実行され、結果を指定された出力先に CSS ファイルとして書き出す。

上記設定では、tailwindcss によって、前項で行った npx tailwindcss と同様にビルドされ、その後 autoprefixer によって必要に応じたベンダープレフィックスが追加される。

先程と同じように実行し、問題ないことを確認する。

npx postcss ./src/assets/css/tailwind.css -o ./src/assets/css/out.css

npm run で 11ty と postcss を同時に実行する

ここまでで、postcss 経由で tailwindcss が実行されることを確認できたので、npm run で 11ty のビルドと合わせて実行するようにする。

package.json の script を以下のように修正する。

"scripts": {
+  "build:css": "npx postcss src/assets/css/tailwind.css -o _site/assets/css/tailwind.css"
-  "build": "npx @11ty/eleventy",
+  "build": "npx @11ty/eleventy && npm run build:css",
  "dev": "npx @11ty/eleventy --serve"
},

CSS のみ更新したい場合は、npm run build:css を実行し、11ty 含めビルドする際は npm run build を実行する。
ビルド結果が _site に出力されるようになったが、このままだと生成された HTML の内容を確認できないので、npm run dev で確認できるようにする。

@11ty/eleventy --serve は、実行するとサーバが立ち上がり、内部でループ処理が行われるため制御が返ってこない。
PostCSS はその名の通りポスト処理なので、11ty のビルド結果に対して動作させる必要がある。

ので、

11ty build => server 実行

という流れを

11ty build => tailwindcss build => server 実行

にするために、@11ty/eleventy-dev-server を使用するよう修正する。

"scripts": {
  "build:css": "npx postcss src/assets/css/tailwind.css -o _site/assets/css/tailwind.css"
  "build": "npx @11ty/eleventy && npm run build:css",
-  "dev": "npx @11ty/eleventy --serve"
+  "dev": "npm run build && npx @11ty/eleventy-dev-server --dir=_site"
},

これで 11ty のビルド、tailwindcss のビルド結果をサーバが読み込んで確認できる環境になったので、ここからはレイアウトファイルなどを作成して実際にコンテンツを作成していく。