メインコンテンツへスキップ

Hugo Page Bundles

·252 文字·2 分
Hugo ページバンドル解説

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 を設定したバンドル。 独立したページとして公開されない。 共有リソースや再利用可能なコンテンツの管理に便利。