beta

HUGOでコンテンツディレクトリを別レポジトリで管理する

HUGOでサイトレイアウトデータとコンテンツを同時に管理していたらと、レポジトリのコミットが汚れて訳わからなくなってしまったので、コンテンツを別管理できないか方法を考えてみました。

公開日:2020年4月27日

Themeを使う

基本的には、この方法がベストです。コンテンツを別にするというより、「コンテンツ以外を別にする」という感じですね。

仮にThemeとして一般公開していないオレオレThemeだったとしても、layoutディレクトリやサイトロゴなどの固定ファイルを別レポジトリで管理してThemeとして登録することで、

  • git上でcontents系とlayout系のコミットがごちゃごちゃにならない
  • ビルド時にgit Submodule updateをかければ常に最新になる
  • サイトの更新をcontentディレクトリ主体にできるからCMSっぽく使える

というメリットがあります。

ただし、git submoduleは「git submodule updateをしない限り勝手にアップデートはしない」というルールがあるので、この点は注意が必要です。

Themeの作り方

これは難しいところはなくて、

コマンドで、

hugo new theme テーマ系

これでHUGOテーマを新規作成して、layoutディレクトリに必要ファイルを設置。できたらGithubなどのレポジトリにアップ。

続いて、HUGOプロジェクトのルートで

git submodule add レポジトリURL themes/テーマ名

として、submodule登録。

あとは、config.tomlに

theme : テーマ名

と入れればOKです。

contentsをSubmoduleを使う

これはあまりオススメなではないんですが、Themeを使う方法とは全く逆で、contentディレクトリをcontentだけのレポジトリで管理する方法です。

HUGOサイトとして公開する方法は、Themeを使う方法と同じでgit submoduleでcontentディレクトリに最新データを引っ張ってくるのですが、

  • contentレポジトリの更新がHUGOの更新トリガーにならない
  • contentを更新したら何かのトリガーでビルドを走らせる必要がある

という問題があります。

ただ、contentしかないレポジトリになるので、文章管理としてはかなりキレイになりますし、下書きレベルでもビルドが走らないなどのメリットもあります。

HUGOをバックグランドのページ生成エンジンにしたCMSサービスとかだったら、この方式が良いのかもしれませんけどね。

HUGOでコンテンツディレクトリを別レポジトリで管理する方法をみてきました。

無難にTheme化するのがベストですね。