2018年のHugoリリースを振り返る


# はじめに

静的サイトジェネレータ[Hugo][]の1年間を振り返ってみます。
ただし、0.xx.y形式のバグフィックスや小さい改善のみのバージョンは除きます。

# Page Bundlesサポート

いきなり2017年のリリースから始まってますが、[Page Bundles][]のサポートが入りました。
[Page Resources][]をまとめるための機能で、画像を多く使うサイトで便利です。
(逆に言えば自分は使ってない・・・)

- 2017-12-31: [Hugo 0.32: Page Bundles and Image Processing! | Hugo](https://gohugo.io/news/0.32-relnotes/)
- 2018-01-18: [Hugo 0.33: The New Kinder Surprise! | Hugo](https://gohugo.io/news/0.33-relnotes/)
- 2018-01-22: [Hugo 0.34: Pattern matching to filter images and other resources | Hugo](https://gohugo.io/news/0.34-relnotes/)
- 2018-01-31: [Hugo 0.35: Headless Bundles! | Hugo](https://gohugo.io/news/0.35-relnotes/)
- 2018-02-05: [Hugo 0.36: Smart Image Cropping! | Hugo](https://gohugo.io/news/0.36-relnotes/)
- 2018-02-27: [Hugo 0.37: Preserve PNG Colour Palette | Hugo](https://gohugo.io/news/0.37-relnotes/)

Page BundlesにはLeaf Bundleという形式があり、部品に分けて管理することができます。
Wikipediaでのテンプレートのような機能が実現できるようです。

# 地味な改善(0.38〜0.41)

内部を整理したり、機能的には地味なものが多いです。

- 2018-04-02: [Hugo 0.38: The Easter Egg Edition | Hugo](https://gohugo.io/news/0.38-relnotes/)
- 2018-04:16: [Hugo 0.39: The Nat King Cole Stabilizer Edition | Hugo](https://gohugo.io/news/0.39-relnotes/)
- 2018-04-23: [Hugo 0.40: The Revival of the Shortcodes | Hugo](https://gohugo.io/news/0.40-relnotes/)
- 2018-05-25: [Hugo 0.41: Privacy Configuration for GDPR | Hugo](https://gohugo.io/news/0.41-relnotes/)

# テーマコンポーネント(0.42)

ここまでは個人的にグッとくる機能はなかったのですが、
0.42で導入されたテーマコンポーネント機能は気に入っています。

- 2018-06-12: [Hugo 0.42: Theme Composition and Inheritance! | Hugo](https://gohugo.io/news/0.42-relnotes/)

これは何かというと、テーマを分割する機能です。
これまではテーマは1つしかなかったため、どうしてもごった煮になってしまいました。
0.42からは、ショートコードのみのテーマなど、小さく分割することができます。

自分は以下のようなテーマコンポーネントを作成しました。

- [hugo-amazon-jp](https://github.com/ikemo3/hugo-amazon-jp): Amazonのアフィリエイトリンク作成
- [hugo-external-site](https://github.com/ikemo3/hugo-external-site): 外部サイトをFront Matterで設定
- [hugo-related](https://github.com/ikemo3/hugo-related): 関連ページを明示的に指定
- [hugo-interactive](https://github.com/ikemo3/hugo-interactive): インタラクティブ化
- [hugo-random](https://github.com/ikemo3/hugo-random): ランダムジャンプページ
- [hugo-toc-fix](https://github.com/ikemo3/hugo-toc-fix): 目次の修正
- [hugo-prism](https://github.com/ikemo3/hugo-prism): コードのハイライト
- [hugo-search](https://github.com/ikemo3/hugo-search): 全文検索

# Hugo Pipes(0.43〜0.44)

今年一番の機能は、このHugo Pipesです。

- 2018-07-09: [And Now: Hugo Pipes! | Hugo](https://gohugo.io/news/0.43-relnotes/)
- 2018-07-13: [Hugo 0.44: Friday the 13th Edition | Hugo](https://gohugo.io/news/0.44-relnotes/)
- 2018-07-22: [Hugo 0.45: Revival of ref, relref and GetPage | Hugo](https://gohugo.io/news/0.45-relnotes/)
- 2018-08-01: [The Summer of Hugo | Hugo](https://gohugo.io/news/0.46-relnotes/)
- 2018-08-17: [Output Minification, Live-Reload Fixes and More | Hugo](https://gohugo.io/news/0.47-relnotes/)

このHugo Pipesにより、以下のような機能がサポートされました。

- Cache Busting
- Minify
- Sass/SCSSのサポート
  - ただしNetlifyでは以下の問題により、サポートされていません。
    - [install necessary packages for using a CGO-extension compiled version of Hugo · Issue #183 · netlify/build-image](https://github.com/netlify/build-image/issues/183)

地味ですが個人的に嬉しかったのが0.45での[.GetPage][]の改善で、

```
{{ with .Site.GetPage "section" "blog" }}
```

以前はこう書いていたのが、より自然な形で書けるようになりました。

```
{{ with .Site.GetPage "/blog" }}
```

# Go 1.11対応(0.48)

- 2018-08-29: [This One Goes to 11! | Hugo](https://gohugo.io/news/0.48-relnotes/)

Hugoのテンプレートの書きづらかった点が、変数のスコープでした。
以前は回避するために[.Scratch][]を使っていましたが、不要になりました。

# Directory Based Archietypes(0.49)

- 2018-09-24: [Hugo 0.49: Directory Based Archetypes | Hugo](https://gohugo.io/news/0.49-relnotes/)

[Archetypes][]という、新規コンテンツのためのテンプレートの仕組みがありますが、
これが[Page Bundles][]に対応しました。

# エラー処理の改善(0.50〜0.51)

- 2018-10-29: [Hugo 0.50: Errors so Good, You’ll Want to Fail! | Hugo](https://gohugo.io/news/0.50-relnotes/)
- 2018-11-07: [Hugo 0.51: The 30K Stars Edition! | Hugo](https://gohugo.io/news/0.51-relnotes/)

エラー処理を改善した結果、**5%速くなって8%メモリ消費が減った**という嬉しい副作用がありました。

# インラインショートコード(0.52)

- 2018-11-28: [And Now: Hugo 0.52 | Hugo](https://gohugo.io/news/0.52-relnotes/)

Markdownの中にショートコードが書ける機能が追加されました。
これは、BootstrapのドキュメントをHugoに移行するというIssueで出た機能です。

- [Switch to Hugo · Issue #24475 · twbs/bootstrap](https://github.com/twbs/bootstrap/issues/24475)

# 現在のHugo

[ikemo memo](https://www.ikemo3.com/)という個人的なメモサイトを作っていますが、
ガリガリにカスタマイズしたテンプレートに、1200記事、1800ページを作って、わずか4〜5秒でビルドされます。

今のHugoで足りないのは、日付によるアーカイブ機能くらいでしょうか。

- [Add ability to generate per-{year, month, day} archives · Issue #448 · gohugoio/hugo](https://github.com/gohugoio/hugo/issues/448)

[StaticGen][]を見ると、スターの勢いはJavaScript系に押されていますが、
Hugoはビルドの速さではダントツです。
なので、今後も独自の立ち位置で進化し続けるかなと。

[Hugo]: https://gohugo.io/
[Archetypes]: https://gohugo.io/content-management/archetypes/
[Page Bundles]: https://gohugo.io/content-management/page-bundles/
[Page Resources]: https://gohugo.io/content-management/page-resources/
[StaticGen]: https://www.staticgen.com/
[.GetPage]: https://gohugo.io/functions/getpage/
[.Scratch]: https://gohugo.io/functions/scratch/