HugoのTheme(テーマ)を管理する方法

2020-03-12

Hugoでは色々なテーマを簡単に利用することが可能です。配られたテーマをそのまま使う分には問題ないのですが、自分で何か変更したい場合、どのようにテーマを管理すれば良いかが迷います。

今回はどんなやり方があるのか、またその中からどれを選べば良いのかについて探っていきます。

管理の選択肢

  1. Gitコマンドで管理: submodule
  2. Gitコマンドで管理: subtree
  3. テーマをダウンロードして管理

1. Gitコマンドで管理: submodule

「git submodule」はざっくり言うと誰かのリモートレポジトリを自分のローカルレポジトリから特定のコミットを「参照」するだけ。ちなみにHugoのチュートリアル: Quickstartではこちらの方法が紹介されています。

参考にしたもの: Git のさまざまなツール - サブモジュール

メリット

  • 自分でコードを管理する必要がない
  • カスタマイズしなければアップデートが楽ちん

デメリット

  • カスタマイズすればするほどアップデートする際に元のレポジトリとコンフリクト(コードの差)が出始める

使い方例

テーマを追加する

$ git submodule add https://github.com/cntrump/hugo-notepadium.git themes/hugo-notepadium
$ tree -d -L 2
.
├── archetypes
├── content
│   └── posts
├── data
├── layouts
├── resources
│   └── _gen
├── static
│   ├── fonts
│   ├── images
│   └── thumbnails
└── themes
    ├── hugo-notepadium <-- これが追加される

テーマレポジトリを更新する

$ cd themes/hugo-notepadium
$ git submodule update --remote

特にカスタマイズをしていなければ、updateコマンドを実行してもエラーは出ません。ただあなたが手を加えたファイルがリモートレポジトリでも変更されていた場合、その差分を修正しない限りアップデートは行われません。

更にHugoで単にテーマを使う場合、リモートレポジトリを基本的に更新すること(git push)することは無いので、カスタマイズすればするほど最新版へのアップデートが複雑化していきます。

2. Gitコマンドで管理: subtree

「git subtree」はざっくり言うと誰かのリモートレポジトリを自分のローカルレポジトリに1つのコミットとして取り込みます。squash(複数のコミットを1つに省略できる)を忘れたまま取り込むとgitの履歴がとんでもないことになるので気をつけたいですね。

参考にしたもの: Git subtree: the alternative to Git submodule

メリット

  • 完全にローカル環境で作業可能

デメリット

  • 管理が複雑で面倒になる

3. テーマをダウンロードして管理

これはgitを使わない超簡単なやり方です。

メリット

  • 初心者でも分かり易い
  • カスタマイズが簡単

デメリット

  • アップデートするときに苦労する

使い方例

  1. hugo-notepadiumにアクセスします。
  2. zipでダウンロードします。
  3. 解凍した際に作られるフォルダ「hugo-notepadium-master」を下記のように配置
$ tree -d -L 2
.
├── archetypes
├── content
│   └── posts
├── data
├── layouts
├── resources
│   └── _gen
├── static
│   ├── fonts
│   ├── images
│   └── thumbnails
└── themes
    ├── hugo-notepadium <-- themesフォルダを作り、hugo-notepadiumの名前に変えるだけ!

アップデートする際には、自分が変更したものを全て覚えておいて全て作り直すケースも出てきます。

結論

  • Git初心者は「3. テーマをダウンロードして管理」で慣れるべき。
  • Gitに慣れている人でHugo初心者の場合は「1. Gitコマンドで管理: submodule」から始めることをオススメします。
  • カスタマイズ箇所が増えて、リモートレポジトリとコンフリクトする回数が多くなった場合は「2. Gitコマンドで管理: subtree」あるいは「3. テーマをダウンロードして管理」が良いのかも。

自分はしばらく「1. Gitコマンドで管理: submodule」で運用してみます。理由は自分の変更箇所が分かり易いから。(記事作成など、あとで何を変更したかを明確にするためでもあります。)

...SNSにもシェアしてみる?
サーバレスブログhugohugo-custom
(C) 2020, All Rights Reserved.

「hugo/notepadium」にカスタムCSSとfontawesomeの導入

HugoでTwitterカード画像を自動生成する方法