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
にテーマのパスを記載しておくだけでインポートができます。
[module]
[[module.imports]]
path="github.com/bep/hugo-fresh"
デモ
Did we mention that we just released Hugo 0.56.0!? Here's a short preview of Hugo Modules: #gohugo #golang #jamstack #webdev #staticgenhttps://t.co/42WTmhG9EI pic.twitter.com/sr7HdhGc1W
— GoHugo.io (@GoHugoIO) July 25, 2019
動画は Hugo theme の切り替えと partials のインポートを行う様子です。hugo server
で確認しながらインポート、つまりホットリロードが可能です。
コマンド
hugo mod clean # キャッシュをクリアします。
hugo mod get # 現在の Hugo プロジェクトの依存を解決します。
hugo mod graph # モジュールの依存グラフを出力します。
hugo mod init # Hugo Module として現在のプロジェクトを初期化します。
hugo mod tidy # go.mod と go.sum から利用されていないものを削除します。
hugo mod vendor # _vendor ディレクトリにモジュールの依存を保存します。
Hugo Deploy
以下のホスティングサービスに hugo deploy
コマンドでデプロイができるようになりました。
- GCS (Google Cloud Storage )
- S3 (Amazon Simple Storage Service)
- Azure Storage