Help us understand the problem. What is going on with this article?

Hugoで環境によって設定を変える方法

動作確認環境

  • Hugo v0.71 extended
  • Ubuntu 18.04, macOS Catalina

TL;DR

基本的には、以下のようにすればいいだろう。

.
├── config/
│   ├── development/
│   │   └── config.toml  # hugo serverで使う設定
│   └── production/
│       └── config.toml  # hugoコマンドで使う設定
└── config.toml          # 共通設定

解説

hugo には、所定のディレクトリに置かれた設定ファイル群を読み込む機能がある。1

https://gohugo.io/getting-started/configuration/#configuration-directory

以下、仕様の要点を記す:

  • デフォルトでは config/ 以下を参照するが、オプション --configDir <DIRECTORY> で別のディレクトリを指定可能。以下では $configDir とする
  • $configDir/_default/ 以下に置かれた設定ファイル群は常に読み込まれる
  • 更に、オプション --environment <ENVIRONMENT> で指定された $configDir/<ENVIRONMENT>/ 以下の設定ファイル群が読み込まれ、デフォルトの設定を上書きする形で適用される

また、最後の --environment オプションについては、コマンドによって下のようにデフォルト値がある:

  • hugo server 実行時はデフォルトで --environment development となる
  • hugo 実行時(サイトビルド時)はデフォルトで --environment production となる

以上から、冒頭で示したディレクトリ構成によって、共通する設定は config.toml にまとめた上で、特にオプションを指定することなく、hugo server 実行時と hugo コマンド実行時の設定を切替えることができる。

この --environment オプションのデフォルト値は、多くの人のユースケースを考慮したものだろう。
私自身もそうだが、ローカルでコンテンツを編集しながらサイトの表示を確認する際には hugo server を使い、公開用にサイトをビルドする際に hugo コマンドを実行することが多い。

config.toml については、上の仕様に従うと config/_default/ に移してもいいのだが、分割しないなら別に移す必要もないので、今回はそのままとした。

他のやり方

--config オプションで使用する設定ファイルを与える

https://gohugo.io/getting-started/configuration/#configuration-file

利用する設定ファイルを明に示したい場合は、こちらのやり方を好む人もいるかもしれない。
このオプションではカンマ区切りで複数の設定ファイルを指定することができ、後ろで指定した設定ファイルが、先に読み込まれた設定内容を上書きするようだ。

例:

# 共通設定とローカル開発用の設定を読み込む
hugo server --config config.toml,config-local.toml

# 共通設定と公開用の設定を読み込む
hugo --config config.toml,config-production.toml

環境変数で一部の設定値を上書きする

https://gohugo.io/getting-started/configuration/#configure-with-environment-variables

少なくとも、トップレベルの設定値と、 [params] 直下の設定値(Site Params)は環境変数で上書きすることができるようだ。

例:

# title, baseURLを上書き
env HUGO_TITLE="[開発中] My Site" \
  HUGO_BASEURL="http://localhost/path/to/dev" \
  hugo server

# params.author = "Bob" に設定
env HUGO_PARAMS_AUTHOR="Bob" hugo

以上。

脚注


  1. Hugo v0.53で追加された機能のようだ 

progrhyme
Software Engineer. Was @key-amb
https://progrhy.me/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away