ここまで、サイトデザインの調整は static/css/style.css という生のCSSファイルを直接編集することによって行ってきました。
しかし、実際のWeb制作現場や本格的なテーマ開発においては、生のCSSではなく SCSS (Sass) というメタ言語(プリプロセッサ)技術が広く標準的に使われています。
SCSSを使うと、CSSの記述を「入れ子(ネスト)」構造にできたり、色やサイズを「変数」として使い回せるなど、コードの記述量が減り劇的に見やすく管理しやすくなります。
Hugoには 「Hugo Pipes」 という強力なアセット処理パイプライン機能が内蔵されており、外部のビルドツール(Node.js環境など)をわざわざ導入・設定しなくても、SCSSを自動的に標準のCSSへと変換(コンパイル)してくれます。
今回は、これまで使ってきた既存のCSSファイルを、よりモダンで管理しやすいSCSS環境へとアップグレードする手順を解説します!
1. フォルダの移動
まず、ファイルの置き場所が変わります。
Hugo Pipesで処理するファイルは assets フォルダに入れます。
themes/my-tutorial-theme/assets/scss/フォルダを作成します。themes/my-tutorial-theme/static/css/style.cssをコピーして、themes/my-tutorial-theme/assets/scss/style.scssにリネームして配置します。
※ static のファイルは「そのまま」配信されますが、assets のファイルは「加工してから」配信されます。
【注意】エラーが出る場合
もしerror: type <nil> not supportedというエラーが出たら、Hugoが新しいassetsフォルダを認識できていない可能性があります。
一度hugo serverを再起動してください。Hugo Pipesはサーバー起動時に新しいフォルダ構成をスキャンします。
参考: assets フォルダの優先順位
実は、assets フォルダは「テーマの中」だけでなく「プロジェクトのルート(一番上の階層)」にも作ることができます。
Hugoは以下の順番でファイルを探します。
- プロジェクトルートの
assets/(最優先) - テーマの中の
themes/my-tutorial-theme/assets/
どう使い分けるの?
- テーマ開発者(あなた): 基本的に テーマの中 (
themes/my-tutorial-theme/assets/) に置きます。 - テーマ利用者: テーマのデザインを少しだけ変えたい場合、プロジェクトルート に同名のファイルを置くことで、テーマのファイルを「上書き」できます。
今回はテーマ自体を自作しているのでテーマの中に置きますが、既存のテーマを使う場合は「ルートの assets に置いて上書きする」というテクニックをよく使います。
2. SCSSの書き方(入れ子構造)
.scss ファイルでは、CSSを入れ子(ネスト)にして書くことができます。
例えば、これまでこう書いていたコードが…
/* 従来のCSS */
header {
background: #333;
}
header h1 {
color: white;
}
header a {
text-decoration: none;
}
こう書けるようになります!
/* SCSS */
header {
background: #333;
h1 {
color: white;
}
a {
text-decoration: none;
}
}
親要素 (header) の中に子要素 (h1, a) を書けるので、関係性がひと目で分かりますね。
3. baseof.html の修正
テンプレート側で、このファイルを読み込む処理を書き換えます。layouts/baseof.html を開いてください。
<!-- layouts/baseof.html -->
<head>
...
<!-- 変更前 -->
<!-- {{ $style := "css/style.css" }} -->
<!-- <link rel="stylesheet" href="{{ $style | relURL }}"> -->
<!-- 変更後: Hugo Pipesで処理する -->
{{ $style := resources.Get "scss/style.scss" | toCSS | minify | fingerprint }}
<link rel="stylesheet" href="{{ $style.RelPermalink }}">
</head>
何をしているの?
resources.Get:assetsフォルダからファイルを取得。toCSS: SCSSをCSSに変換。minify: 改行や空白を削除してファイルサイズを軽量化。fingerprint: ファイル名にハッシュ値を付けて、キャッシュ問題を解決(例:style.min.abcdef...css)。
Hugo Pipesでモダンなフロントエンド開発環境を構築しよう
SCSS(入れ子構造や変数の活用)を導入することで、特にCSSファイルが長大になってきた際に見通しが良くなり、コードの修正・管理が劇的に楽になります。
さらにメリットとして、Hugo Pipesの強力なアセット処理(toCSS, minify, fingerprint)を通すことで、面倒な外部のビルドツール(WebpackやVite, Gulpなど)を用意・学習しなくても、サイトを公開した際「軽量で高速かつキャッシュの更新も自動化された」最適なスタイルシート配信環境が整います。
ぜひテーマ制作の早い段階でHugo Pipesを用いたSCSS環境に移行しておきましょう!✨


