モジュールしたい(go.mod)

$ hugo mod init モジュール名
$ hugo mod get テーマのモジュールパス
$ hugo mod tidy

Hugoは内部でGo言語のパッケージ管理の仕組み(go.mod/go.sum)を使って、 テーマや依存関係を管理できます。 これを「Hugoモジュール」と呼びます。

テーマしたいで紹介したgit submoduleによるテーマ追加とは別の方法で、 pyproject.tomlのように依存関係をファイルで宣言的に管理できるのが特徴です。

モジュールを初期化したい(hugo mod init)

$ hugo mod init github.com/ユーザー名/リポジトリ名
1# go.mod
2module github.com/ユーザー名/リポジトリ名
3
4go 1.26.7

hugo mod initでサイトのルートにgo.modが生成され、サイト自体がひとつのモジュールになります。 モジュール名にはGitHubなどのリポジトリパスを使うのが一般的です。

テーマを追加したい(hugo mod get)

$ hugo mod get github.com/nunocoracao/blowfish/v2
1# hugo.toml
2[module]
3  [[module.imports]]
4    path = "github.com/nunocoracao/blowfish/v2"

hugo.tomlの[module.imports]にテーマのモジュールパスを指定してからhugo mod getを実行すると、 テーマをダウンロードしてgo.mod・go.sumに依存関係が追記されます。 themes/ディレクトリにサブモジュールを追加する必要がなく、リポジトリがすっきりします。

依存関係を整理したい(hugo mod tidy)

$ hugo mod tidy

go.mod・go.sumから使われていない依存関係を削除し、必要な依存関係を補います。 pyproject.tomlに対するuv lockのような役割です。

依存関係を確認したい(hugo mod graph)

$ hugo mod graph
github.com/ユーザー名/リポジトリ名 github.com/nunocoracao/blowfish/v2@v2.106.0

サイトが依存しているモジュールの一覧を、依存関係のグラフ形式で表示します。

注釈

go.sumにはモジュールのハッシュ値が記録されるため、gitに含めてバージョン管理しておくとよいです。 チーム開発や別環境でのビルド時に、同じバージョンの依存関係を再現できます。

リファレンス