Edited at

Hugo v0.56 新機能 Modules と deploy


Hugo v0.56 がリリース

今回のリリース Hugo v0.56 では Hugo Modules と Hugo deploy の二つの新機能が実装されました。この記事ではそれらの紹介をします。

homebrew-core の Hugo は既に v0.56 へ更新されています。Docker で試したい方は Docker image of Hugo extended version を使ってみてください。GitHub Actions で試したい方は GitHub Actions for Hugo extended をどうぞ。もちろん Release v0.56.0 - gohugoio/hugo からバイナリをダウンロードして実行もできます。


Hugo Modules


動作要件

Hugo Modules は Go Modules に似た機能であり、実際のところ Go Modules に依存しています。Hugo Modules を利用するには以下がインストールされている必要があります。


  • Go 1.12 以上

  • Git

v0.55.6 までの Hugo の実行に Go の実行環境は必要ありませんでしたが、今後 Hugo Modules を利用したい場合には必要となります。もちろん Hugo Modules を使わない場合は今まで通りGo言語の実行環境は必要ありません。

個人的には Netlify で Hugo Modules を利用できるのか が気になりましたが Netlify は Go 1.12 の実行環境を用意してくれているので、問題なく Hugo Modules を使えます。

「手元では Go を実行できるけど CI/CD をさせるリモート側でどうしても Go をインストールできない、それでも Hugo Modules の恩恵を受けたい」 のような場合は手元の環境で hugo mod vendor を実行して依存をすべて _vendor 以下に出力し、それもリモート側に送れば良いです。


できること

具体的に何ができるかと言うと、以下のような Hugo プロジェクトを構成するコンポーネントを


  • static

  • content

  • layouts

  • data

  • assets

  • i18n

  • archetypes

  • themes

外部のリポジトリからインポートして利用できるようになりました。Hugo テンプレートが書かれている HTML ファイルや JavaScript, CSS などを異なる Hugo プロジェクト間で使い回せます。

go get コマンドのような感じでコンポーネントをプロジェクトにインポートして管理できます。

hugo mod get -u github.com/bep/my-theme

これまでは公開されている Hugo theme を導入する方法として


  • Git submodule

  • Zip でダウンロードしてコンテンツ同様に扱う

が主な手段でした。今後は対象の Theme が Hugo Modules での導入に対応していれば、以下のように config.toml にテーマのパスを記載しておくだけでインポートができます。


config.toml

[module]

[[module.imports]]
path="github.com/bep/hugo-fresh"


デモ

動画は Hugo theme の切り替えと partials のインポートを行う様子です。hugo server で確認しながらインポート、つまりホットリロードが可能です。


コマンド

hugo mode clean   # キャッシュをクリアします。

hugo mode get # 現在の Hugo プロジェクトの依存を解決します。
hugo mode graph # モジュールの依存グラフを出力します。
hugo mode init # Hugo Module として現在のプロジェクトを初期化します。
hugo mode tidy # go.mod と go.sum から利用されていないものを削除します。
hugo mode vendor # _vendor ディレクトリにモジュールの依存を保存します。


Hugo Deploy

以下のホスティングサービスに hugo deploy コマンドでデプロイができるようになりました。


  • GCS (Google Cloud Storage )

  • S3 (Amazon Simple Storage Service)

  • Azure Storage