Hugoにtailwindcssを導入する

2021年06月13日

Hugo tailwindcss

Hugoにtailwindcssを導入する手順を記載しています。

Hugo とは

The world’s fastest framework for building websites https://gohugo.io/

ページ数が多くても高速で動作する静的サイトジェネレータです。 Go 言語で書かれています。 データベースの状態を持たず Git のリポジトリだけで完結するので使いやすいです。

Netlify CMS を利用すれば Web から記事を書くこともできます。

tailwindcss とは

A utility-first CSS framework for rapidly building custom user interfaces. https://tailwindcss.com/

個人的には、プリミティブなクラスを利用してデザインを構築する CSS フレームワークというイメージです。

CSS は一切書かないでもいい感じの Web サイトが作れます。

なぜ Hugo に tailwindcss を導入するのか

tailwindcss typography などの便利なプラグインは CDN からは利用できず、インストールする必要があるため。

導入方法

postcss のフローに tailwindcss の導入処理を書きます。 https://gohugo.io/hugo-pipes/postcss/

$ pwd
/your/project/root/
$ npm install autoprefixer tailwindcss postcss-cli postcss-import

下記3ファイルを作成します。

// /<root>/themes/<theme>/assets/css/postcss.config.js
const themeDir = __dirname + "/../../";

const purgecss = require("@fullhuman/postcss-purgecss")({
  content: ["./hugo_stats.json"],
  defaultExtractor: (content) => {
    let els = JSON.parse(content).htmlElements;
    return els.tags.concat(els.classes, els.ids);
  },
});

module.exports = {
  plugins: [
    require("postcss-import")({
      path: [themeDir],
    }),
    require("tailwindcss")(themeDir + "assets/css/tailwind.config.js"),
    require("autoprefixer")({
      path: [themeDir],
      grid: true,
    }),
    ...(process.env.HUGO_ENV === "production" ? [purgecss] : []),
  ],
};
// /<root>/themes/<theme>/assets/css/tailwind.config.js
module.exports = {
  purge: [],
  darkMode: false, // or 'media' or 'class'
  theme: {
    extend: {},
  },
  variants: {
    extend: {},
  },
  plugins: [],
};
/* /<root>/themes/<theme>/assets/css/main.css */
@tailwind base;
@tailwind components;
@tailwind utilities;

head タグに main.css を指定します。

~~ {{ $css := resources.Get "css/main.css" }} {{ $css = $css | resources.PostCSS
(dict "config" "./assets/css/postcss.config.js") }} {{ if hugo.IsProduction }}
{{ $css := $css | minify | fingerprint | resources.PostProcess }} {{ end }}
<link href="{{ $css.RelPermalink }}" rel="stylesheet" />
~~

以上で Hugo に tailwindcss を導入することが出来ます。