Hugo ページバンドル入門
ページバンドルは、コンテンツファイルとその関連リソース(画像、ドキュメントなど)を一つのディレクトリにまとめることで、コンテンツ管理を論理的かつ効率的に行うための仕組みです。
ページバンドルとは?
ページバンドルは、コンテンツ (.md, .html など) と、それに関連するリソース (画像、PDF、他のMarkdownファイルなど) を含むディレクトリのことです。バンドル内のリソースは「ページリソース」と呼ばれ、ページの .Resources メソッドでアクセスできます。
例:
content/
├── about/ # ← これはページバンドル (Leaf Bundle)
│ ├── index.md # コンテンツファイル
│ └── welcome.jpg # 関連リソース
└── privacy.md # ← これは通常のページ
コンテンツと関連リソースをまとめて管理できるディレクトリ構造。
バンドル内のリソースは .Resources でアクセス可能。
バンドルには「リーフバンドル」と「ブランチバンドル」の2種類がある。
リーフバンドル vs ブランチバンドル
ページバンドルは、その役割と構造によって2つのタイプに分けられます。
| 特徴 | リーフバンドル (Leaf Bundle) | ブランチバンドル (Branch Bundle) |
|---|---|---|
| インデックスファイル | index.md (または index.html 等) |
_index.md (または _index.html 等) |
| 具体例 | content/about/index.md |
content/posts/_index.md |
| ページの Kind | page (単一ページ) |
home, section, taxonomy, term (リストページ等) |
| テンプレートの種類 | single (例: _default/single.html) |
list (例: _default/list.html), home, section, taxonomy, term |
| 子孫ページの有無 | なし (枝の末端) | あり (他のバンドルやページを含むことができる) |
| リソースの場所 | インデックスファイルと同じ階層か、その下のサブディレクトリ | リーフバンドルと同様だが、子孫バンドル内のファイルは含まない |
| リソースの種類 | page, image, video 等、全てのタイプがリソース扱い |
page タイプ以外 (image, video 等) がリソース扱い。( .md等は通常のコンテンツページになる) |
注意: インデックスファイルの拡張子 (.md, .html, .adoc 等) は、使用するコンテントフォーマットによって決まります。
リーフバンドル (Leaf Bundle) の詳細
リーフバンドルは、index.md ファイルを含むディレクトリです。物理的な葉のように、ブランチの末端に位置し、子孫を持つことはできません。主に個別のコンテンツページとそのリソースを管理するために使用されます。
content/
├── posts/
│ └── my-post/ # ← リーフバンドル
│ ├── index.md # このバンドルのメインコンテンツ
│ ├── content-1.md # ページリソース (page type)
│ ├── content-2.md # ページリソース (page type)
│ ├── image-1.jpg # ページリソース (image type)
│ └── image-2.png # ページリソース (image type)
└── about/ # ← リソースなしのリーフバンドル
└── index.md
index.md を持つディレクトリ。
中に含まれる他の .md ファイルは、独立したページとしてはレンダリングされず、.Resources 経由でのみアクセス可能なページリソースとなる。
他のバンドルを含むことはできない。
ブランチバンドル (Branch Bundle) の詳細
ブランチバンドルは、_index.md ファイルを含むディレクトリです。物理的な枝のように、他のリーフバンドルやブランチバンドルを子孫として持つことができます。セクションのトップページやホームページなど、リストページのコンテンツとリソースを管理するために使用されます。トップレベルディレクトリ(例:content/posts/)も、_index.md がなくてもブランチバンドルとして扱われます。
content/
├── blog/ # ← ブランチバンドル
│ ├── _index.md # セクションのトップページコンテンツ
│ ├── banner.jpg # ページリソース (image type)
│ ├── introduction.md # 通常のコンテンツページとしてレンダリングされる
│ └── post-1/ # ← 子孫のリーフバンドル
│ └── index.md
└── _index.md # ← ホームページのブランチバンドル
_index.md を持つディレクトリ(またはトップレベルディレクトリ)。
中に含まれる他の .md ファイルは、通常の子ページとしてレンダリングされる。
画像などの非ページファイルはページリソースとなる。
他のバンドルを含むことができる(階層構造を作れる)。
ヘッドレスバンドル (Headless Bundles)
フロントマターで headless: true を設定することで、公開されない(=単独のURLを持たない)バンドルを作成できます。ヘッドレスバンドルのコンテンツやリソースは、他の通常ページから .Site.GetPage などを使って参照・利用するために使われます。
---
title: "共有リソース"
headless: true # これでヘッドレスバンドルになる
---
このバンドルは直接公開されませんが、中のリソースは他から使えます。
headless: true を設定したバンドル。
独立したページとして公開されない。
共有リソースや再利用可能なコンテンツの管理に便利。