HUGOのテンプレートファイルの優先順位を理解する
HUGOでは、content
の下にあるMarkdownファイルを、テンプレートファイルを使用してHTMLに変換しています。
レンダリングに利用するテンプレートファイルは、ページの種類(コンテンツファイルのパス)に応じて用いられるファイルが異なります。 この記事では、サイトのコンテンツがどのテンプレートファイルを使用してレンダリングされるかについて説明します。
動作を確認した環境
- HUGO v0.58.2/extended
コンテンツファイルの構成
content
ディレクトリが、次のようなファイル構成だったとします。
.
├── ...
├── content
│ ├── _index.md # Home page
│ ├── page-01.md # Single page
| ├── posts
| | ├── _index.md # Section page
| | ├── post-01.md # Single page
| | └── post-02.md # Single page
| └── quote
| | ├── quote-01.md # Single page
| | └── quote-02.md # Single page
├─ ...
- Home page
content
直下にある_index.md
ファイルは、「Home page」と呼ばれ、サイトのトップページにあたるページになります。
- Section pages
- contents次のディレクトリは「Section」と呼ばれ、そのディレクトリ直下の
_index.md
はセクションページと呼ばれます。
- contents次のディレクトリは「Section」と呼ばれ、そのディレクトリ直下の
- Single page
- 個々の記事ページにあたるページです。
- List pages
- コンテンツの一覧を表示することを目的としたページです。
- Taxonomy Terms Pages
- HUGOでは、Taxonomy(タクソノミー)と呼ばれる項目を記事ファイルのFront matterにつけて、記事をグルーピングできます。たとえば、「タグ」や「カテゴリ」といった項目がTaxonomyにあたります。また、Taxonomyに割り当てられる具体的な値をTermと呼びます。たとえば、記事に「開発」というタグを付け足場合、「開発」がTermにあたります。
- Taxonomy Terms Pagesは、Taxonomyに割り当てられたTermをもつ記事の一覧ページです。
テンプレートファイルを参照するディレクトリの優先順位
HUGOは、コンテンツをHTMLに変換するとき、あるルールにもとづいてテンプレートファイルを参照しています。
HUGOは、大まかには次の優先度でテンプレートファイルのあるディレクトリを探索します。
layouts/
以下themes/{テーマ名}/layouts
以下
探索しているディレクトリのうち、後述するファイル名の優先順位にもとづいて最初に見つかったファイルがテンプレートとして利用されます。 見つからなければ、次に優先度の高いディレクトリでファイルを探します。 最後まで見つからなければ、そのコンテンツはレンダリングされないので、真っ白なページになります。
このディレクトリの優先順位があります。 テーマファイルを一部修正したいときはlayouts
以下へ変更したいテンプレートファイルと同名のファイルを置くと、そのページのレイアウトだけを独自に変更できます。
テンプレートファイルを参照するファイル名の優先順位
Home page
Home pageはホームページテンプレートを使って、HTMLへレンダリングされます。
ホームページテンプレートは、次のファイルのうち、最初に見つかったファイルが利用されます(参考:Layout Lookup for Home Page)。
- index.html
- home.html
- list.html
- _default/index.html
- _default/home.html
- _default/list.html
list.html
は、List pageを生成します。 トップページがランディングページではなく記事一覧のみでよい場合は、index.html
やhome.html
を作らずに、list.html
だけを作ります。
Section page
Section pageは、セクションテンプレートを使って、HTMLへレンダリングされます。
セクションテンプレートは、次のファイルのうち、最初に見つかったファイルが利用されます(参考:Layout Lookup for Section Page)。
- {セクション名}/{セクション名}.html
- {セクション名}/section.html
- {セクション名}/list.html
- section/{セクション名}.html
- section/section.html
- section/list.html
- _default/{セクション名}.html
- _default/section.html
- _default/list.html
Home pageと同様に、セクションにランディングページを作りたい場合は、section.html
を作ります。 {セクション名}/{セクション名}.html
や{セクション名}/section.html
のように、セクション名ごとに別々のランディングページを作ることもできます。
Single page
Single pageは、セクションテンプレートを使って、HTMLへレンダリングされます。
シングルページテンプレートは、次のファイルのうち、最初に見つかったファイルが利用されます(参考:Layout Lookup for Single Page)。
- {セクション名}/single.html
- _default/single.html