Hugo
Quick Start
hugo new site ${PROJECT_NAME}
cd ${PROJECT_NAME}
git init
# テーマの追加
git submodule add ${GIT_REPO_OF_THEME} themes/${THEME_NAME}
# configファイルで使用するテーマを指定する
echo 'theme = "ananke"' >> config.toml
# コンテンツの作成
hugo new posts/my-first-post.md
# サーバを起動
hugo server -D
hugo new
で記事を作成するとドラフト記事として作成される(fontmatter のdraft
が true
になる)。
ドラフト記事は、hugo server
で-D
オプションをつけないと表示されないので注意する。
Go Template
こちらを参照
Config
baseURL = "https://yoursite.example.com/"
footnoteReturnLinkContents = "↩"
title = "My Hugo Site"
[params]
AuthorName = "Jon Doe"
GitHubUser = "spf13"
ListOfFoo = ["foo1", "foo2"]
SidebarRecentLimit = 5
Subtitle = "Hugo is Absurdly Fast!"
[permalinks]
post = "/:year/:month/:title/"
詳細は公式ドキュメントを参照
params
params の内容は、.Site.Params
としてテンプレート内から利用できる。
日付の調整
日付、最終編集日、公開開始日、公開終了日をどのように設定するかをカスタマイズできる。詳細はドキュメントを参照
Blackfriday
デフォルトの Markdown パーサーである Blackfriday の調整ができる。詳細はドキュメントを参照
環境変数で Config を設定する
env HUGO_TITLE="My Hugo Site" hugo
CLI
hugo
プロジェクトをビルドしpublic
フォルダに出力する。
Hugo はpublic
フォルダ内のファイルを削除しないので、ビルドの前に手動でpublic
フォルダを削除しておくこと。
下記に該当するコンテンツはビルドされないので注意する。 この挙動を変更したい場合はドキュメントを参照すること。
- front matter に
publishdate
が設定されている - front matter に
expirydate
が設定されている - front matter の
draft
がtrue
に設定されている
hugo
hugo server
開発用のサーバをhttp://localhsot:1313
で立ち上げる。
hugo server -D
Directory Structure
archetypes
hugo new post/***
を実行した際の Front Matter の雛形を管理する。
assets
Hugo Pipes で処理する必要のあるファイルを管理する。.Permalink
又は.RelPermalink
が使われているファイルのみ、public
ディレクトリに出力される??
config.toml
Hugo の Config ファイル
content
全てのコンテンツを管理する。
好きなだけネストさせるこができる。ただし、content
フォルダ直下は特別で、配置できるファイルは次の通り。
- _index.md (トップページになる)と関連する画像ファイルなど
- フォルダ
content
直下のフォルダは、conetnt section
として認識される。例えば、blog
,articles
, tutorials
というセクションを作りたい場合は、その名前のついたフォルダをcontent
フォルダ直下に作成する。
デフォルトでは、各セクションの配下に作成された記事には、セクションの名前(blog
など)がContent Type
として自動的に設定される。Content Type
は、どのレイアウトの選択等に使用される。
data
コンテンツの中で、json, yaml, toml といったデータを扱う場合、ここで管理する。 Data templatesを使えば、動的にデータを取得することもできる。
layouts
テンプレートを管理する。テンプレートの形式は HTML であり、下記の種類がある。
- list page templates
- homepage templates
- taxonomy templates
- partial templates
- single page templates
- ...and more
static
images, CSS, Javascript といった静的コンテンツを管理する。
そのままpublic
フォルダのルートに配置される。
Resources
Resouces とは
content
フォルダ内の全てのファイルはResources
になる。Hugo が MIME type を認識できる限り。content
フォルダ直下がsection
になる
全ての Resources を一覧表示
{{ range .Resources }}
<li><a href="{{ .RelPermalink }}">{{ .ResourceType }}</a></li>
{{ end }}
絶対パスが必要なら.Permalink
をつかうこと。
Type を指定して一覧表示
タイプ名は、ページの場合はpage
、その他の場合は image
やjson
などの MIME タイプで指定する。
{{ range .Resources.ByType "image" }} {{ .ResourceType }} {{ end }}
特定の条件にあてはまる Resouces を表示
例:ファイル名がlogo
で始まるリソースを表示する
<!-- 当てはまるもの全てを取得 -->
{{ range .Resources.GetMatch "logo*" }} {{ . }} {{ end }}
<!-- 当てはまる最初の一つのみを取得 -->
{{ $logo = .Resources.Match "logo*" }} {{ $logo.ResourceType }}
コンテンツを表示
Page Resources = カレントページから見た他の page, images, pdfs, etc...
{{ range .Resources.ByType "image" }} {{ .Content }} {{ end }}
Themes
- テーマの一覧
- テーマごとに設定方法が異なるため、README.md をよく読むこと
インストール方法
git の submodule 機能を使ってインストールするとよい。
git submodule add ${GIT_REPO_OF_THEME} themes/${THEME_NAME}
echo 'theme = "THEME_NAME"' >> config.toml
テーマの Config
テーマ自身もconfig.toml
を持つことができる。ただし、設定できる項目は下記だけ。
params
(global and per language)menu
(global and per language)outputformats
andmediatypes
複数のテーマを使う
- 複数のテーマを指定した場合は、マージされる。左側が優先される。
i18n
,data
,config.toml
は deep merge される。static
,layouts
,archetypes
はファイルベースで merge され る。
theme = ["my-shortcodes", "base-theme", "hyde"]
Content Management
Page Bundles
Page Resources を管理する方法のこと。下記の赤い枠が Page Bundles を表す。
Leaf Bundle
content
フォルダ内のindex.md
を含むフォルダのことsingle
レイアウトが使用される- ネストできない
- レイアウトファイルにおいて、page, non-page(images, PDFs, etc...) のどちらもリソースとして使用できる。
Branch Bundle
content
フォルダ内の_index.md
を含むフォルダのことlist
レイアウトが使用される- 他のコンテンツを列挙したい時に使う
- レイアウトファイルにおいて、page はリソースとして使用できない。
Front Matter
Pre-defined
特にweight
は並び替えによく使う。
User-defined
ユーザ定義の Front Matter を記述することもできる。その場合、テンプレートから.Params.some_frontmatter_name
でアクセスできる。
Page Resources
カレントページから利用できる、画像、他のページ、PDF 等ドキュメントのこと。
.Resources
でリソースの配列を取得できる。
Properties
- ResourceType
- Name
- Title
- Permalink
- RelPermalink
- Content
Methods
- ByType
- Match
- GetMatch(
match
と同じだが、最初のひとつだけを取得する点が異なる)
Image Processing
画像処理にはResize
, Fit
, Fill
の 3 種類がある。オプションについてはドキュメントを参照すること。
Resize
{{ $logo.Resize "200x" }} // アスペクト比は維持される {{ $logo.Resize "200x100"
}} // アスペクト比は変更される
Fit
指定したサイズで、かつサイズ内に収まるように画像を縮小する。アスペクト比は維持される。
{{ $logo.Fit "200x100" }}
Fill
指定したサイズで、かつサイズ全体が埋まるように画像を切り出す。アスペクト比は維持される。
{{ $logo.Fill "200x100" }} // 真ん中を基準にして切り出し {{ $logo.Fill "200x100
right" }} // 右端を基準にして切り出し {{ $logo.Fill "200x100 left" }} //
左端を基準にして切り出し
画像の表示
<img src="{{$logo.RelPermalink }}" />
処理後の画像の取扱い
処理された画像は/resources
フォルダに格納される。
Hugo のパフォーマンスが向上するため、このフォルダは、git の管理対象としたほうがよい。
Shortcode
Markdown の中で使えるスニペット。2 つの呼び出し方がある。
<!-- 中のコンテンツがMarkdownの場合 -->
{{% mdshortcode %}} **something** {{% /mdshortcode %}}
<!-- 中のコンテンツの処理が必要ない場合 -->
{{< highlight go >}} somethin {{< /highlight >}}
Built-in Shortcode
- figure
- gist
- highlight(コードハイライト)
- ref, relref(リンクの作成)
- tweet
- vimeo
- youtube
Sections
content
フォルダ内のフォルダが section になる- 第一階層のフォルダが root sections になる
- section は branch bundles である必要があるため、フォルダ内に
_index.md
を作成すること。index.md
を作成した場合は、leaf bundles になる。 - section は、入れ子にできる。この際、最下層の section は必ず
_index.md
を持たなければならない。 - section は、front matter で上書きできない
Section Page で使える Variables
.CurrentSection
現在のページのカレントセクションを取得する。現在のページがセクションページやホームページだった場合、自分自身を返す。.InSection $anogherPage
あるページが現在のセクションに属するか判定する.IsAncestor $anotherPage
あるページが現在のセクションの祖先に当たるか判定する.IsDescendant $anotherPage
現在のページが有るページの子孫に当たるか判定する.Parent
現在のページが属する root section を取得する.Sections
現在のセクションに属する子セクションを取得する