ディレクトリ構造
サイトのスケルトン
Hugo において新たなサイトを生成すると、プロジェクトのスケルトンを作り出します。 たとえば以下のコマンドを実行します。
hugo new site my-site
そうすると以下のディレクトリ構造が生成されます。
my-site/
├── archetypes/
│ └── default.md
├── assets/
├── content/
├── data/
├── i18n/
├── layouts/
├── static/
├── themes/
└── hugo.toml <-- サイト設定
必要に応じて、サイト設定はサブディレクトリに置くこともできます。
my-site/
├── archetypes/
│ └── default.md
├── assets/
├── config/ <-- サイト設定
│ └── _default/
│ └── hugo.toml
├── content/
├── data/
├── i18n/
├── layouts/
├── static/
└── themes/
サイトをビルドすると Hugo は public
ディレクトリを生成します。
さらに resources
という文字通りのリソースディレクトリも生成します。
my-site/
├── archetypes/
│ └── default.md
├── assets/
├── config/
│ └── _default/
│ └── hugo.toml
├── content/
├── data/
├── i18n/
├── layouts/
├── public/ <-- サイトビルド時に生成
├── resources/ <-- サイトビルド時に生成
├── static/
└── themes/
ディレクトリ
各サブディレクトリは、コンテント、ドキュメント構造、ふるまい、ドキュメント表現をなすものとして構成されます。
archetypes
archetypes
(アーキタイプ) ディレクトリは、新たに含めるコンテントのテンプレートを含めます。
詳しくは アーキタイプ を参照してください。
assets
assets
ディレクトリは、アセットパイプラインを通じて受け渡されるグローバルリソースを含めます。
そのリソースとは、イメージ、CSS、Sass、Javascript、TypeScrit などです。
詳しくは Hugo パイプライン を参照してください。
config
config
ディレクトリは、サイトの設定を含めます。
複数のサブディレクトリ、複数のファイルに分けることも行われます。
環境によって異なる動作を必要とはしない、最小限の設定あるいはプロジェクトである場合は、ただ一つの設定ファイル hugo.toml
をプロジェクトのルートディレクトリに置くだけで十分です。
詳しくは 設定ディレクトリ を参照してください。
content
content
(コンテント) ディレクトリは、サイト内容を表現するマークアップファイル (一般にはマークダウン)、ページリソースを含めます。
詳しくは コンテントの構成 を参照してください。
data
The data
directory contains data files (JSON, TOML, YAML, or XML) that augment content, configuration, localization, and navigation. See details.
i18n
The i18n
directory contains translation tables for multilingual sites. See details.
layouts
The layouts directory contains templates to transform content, data, and resources into a complete website. See details.
public
The public
directory contains the published website, generated when you run the hugo
or hugo server
commands. Hugo recreates this directory and its content as needed. See details.
resources
The resources
directory contains cached output from Hugo’s asset pipelines, generated when you run the hugo
or hugo server
commands. By default this cache directory includes CSS and images. Hugo recreates this directory and its content as needed.
static
The static
directory contains files that will be copied to the public directory when you build your site. For example: favicon.ico
, robots.txt
, and files that verify site ownership. Before the introduction of page bundles and asset pipelines, the static
directory was also used for images, CSS, and JavaScript.
themes
The themes
directory contains one or more themes, each in its own subdirectory.
Union file system
Hugo creates a union file system, allowing you to mount two or more directories to the same location. For example, let’s say your home directory contains a Hugo project in one directory, and shared content in another:
home/
└── user/
├── my-site/
│ ├── content/
│ │ ├── books/
│ │ │ ├── _index.md
│ │ │ ├── book-1.md
│ │ │ └── book-2.md
│ │ └── _index.md
│ ├── themes/
│ │ └── my-theme/
│ └── hugo.toml
└── shared-content/
└── films/
├── _index.md
├── film-1.md
└── film-2.md
You can include the shared content when you build your site using mounts. In your site configuration:
module:
mounts:
- source: content
target: content
- source: /home/user/shared-content
target: content
[module]
[[module.mounts]]
source = 'content'
target = 'content'
[[module.mounts]]
source = '/home/user/shared-content'
target = 'content'
{
"module": {
"mounts": [
{
"source": "content",
"target": "content"
},
{
"source": "/home/user/shared-content",
"target": "content"
}
]
}
}
After mounting, the union file system has this structure:
home/
└── user/
└── my-site/
├── content/
│ ├── books/
│ │ ├── _index.md
│ │ ├── book-1.md
│ │ └── book-2.md
│ ├── films/
│ │ ├── _index.md
│ │ ├── film-1.md
│ │ └── film-2.md
│ └── _index.md
├── themes/
│ └── my-theme/
└── hugo.toml
You can mount directories to archetypes
, assets
, content
, data
, i18n
, layouts
, and static
. See details.
You can also mount directories from Git repositories using Hugo Modules. See details.
Theme skeleton
Hugo generates a functional theme skeleton when you create a new theme. For example, this command:
hugo new theme my-theme
Creates this directory structure (subdirectories not shown):
my-theme/
├── archetypes/
├── assets/
├── content/
├── data/
├── i18n/
├── layouts/
├── static/
├── LICENSE
├── README.md
├── hugo.toml
└── theme.toml
Using the union file system described above, Hugo mounts each of these directories to the corresponding location in the project. When two files have the same path, the file in the project directory takes precedence. This allows you, for example, to override a theme’s template by placing a copy in the same location within the project directory.
If you are simultaneously using components from two or more themes or modules, and there’s a path collision, the first mount takes precedence.