Hugoのthemeをgit Submoduleからhugo Modでの管理に移行する
概要
hugoのthemeはこれまではgit submoduleで導入するのが一般的でしたが、 Hugo v0.56 からは Hugo Modulesという機能が実装されthemeや各種拡張などを管理できます。
おそらく今後はHugo Modulesを利用する形が推奨されると思うので、本ブログでもmoduleを使う形に移行しました。
その手順をまとめておきます。
ちなみに本ブログで設定反映させた時の内容は下記になります。
feature: migrate theme from git submodule to hugo mod
前提
本ブログでの動作確認です。
バージョンやthemeの違いによって動作が変わる可能性があります。
1% go version
2go version go1.21.0 darwin/arm64
3% hugo version
4hugo v0.117.0-b2f0696cad918fb61420a6aff173eb36662b406e+extended darwin/arm64 BuildDate=2023-08-07T12:49:48Z VendorInfo=brew
5%
theme: m10c
手順
1. hugo moduleのinit
hugo mod init [project]
を実行します。
1% hugo mod init github.com/koh-sh/blog
2go: creating new go.mod: module github.com/koh-sh/blog
3go: to add module requirements and sums:
4 go mod tidy
2. configの修正
configにthemeの設定があると思うのでそこの修正、およびmodule importの記述を追加します。
1diff --git a/config.toml b/config.toml
2index acf71d5..f1480b1 100644
3--- a/config.toml
4+++ b/config.toml
5@@ -1,6 +1,6 @@
6 baseURL = "https://blog.koh-sh.com"
7 title = "koh's blog"
8-theme = "m10c"
9+theme = "github.com/vaga/hugo-theme-m10c"
10 paginate = 5
11 hasCJKLanguage = true
12 summaryLength = 150
13@@ -64,3 +64,7 @@ tags = [
14
15 [outputs]
16 home = ["HTML", "RSS", "JSON"]
17+
18+[module]
19+ [[module.imports]]
20+ path = 'github.com/vaga/hugo-theme-m10c'
3. get module
module importとgo.modへの反映をします。
1hugo mod get -u
4. git submodule関連の設定の削除
submodule関連の設定やファイルを削除します。
.git/config
がsubmodule関連の設定を持っている場合があるため、その場合はそこの記述も削除します。
1% rm -rf themes
2% rm .gitmodules
5. 動作確認
これでhugo serverなどで動作確認できます。
go.mod
がgoのversionを持つので外部サービスでホスティングしている場合バージョンが合わないとデプロイが失敗するケースがあるので確認が必要です。
CloudFlare Pagesの場合deployの環境変数でGoとHugoのバージョン指定ができます。
まとめ
やはりgit submoduleよりは管理しやすくなったと思うので嬉しいですね。
Theme以外にもhugo module色々あるようなので試してみたい。