Hugoで開発環境と本番環境を区別する方法

Hugoで開発環境と本番環境で動作を分けたいことがあるかと思います。例えば開発環境では Google Analytics を無効にしたいとか、広告を表示したくないなど。

動作環境

MacのHomebrewでインストールした以下の環境で確認しています。

$ hugo version
hugo v0.121.1-00b46fed8e47f7bb0a85d7cfc2d9f1356379b740+extended darwin/arm64 BuildDate=2023-12-08T08:47:45Z VendorInfo=brew

本番環境かどうかの判定

Hugoでは本番環境かどうかを判定するには以下の条件式を使います。

{{ if hugo.IsProduction }}
  <!-- なんらかの処理 -->
{{ end }}

これをテーマディレクトリのしかるべきファイルに記載することで、例えば冒頭に書いたように Google Analytics を本番環境のみ適用することなどが可能です。

{{ if hugo.IsProduction }}
  <!-- Google tag (gtag.js) -->
  <script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
  <script>
    window.dataLayer = window.dataLayer || [];
    function gtag(){dataLayer.push(arguments);}
    gtag('js', new Date());

    gtag('config', 'G-XXXXXXXXXX');
  </script>
{{ end }}

詳細

Hugoでは環境を表す変数が定義されています。

ローカルで動作確認をするときのコマンド hugo server はデフォルトでここに development が設定されます。一方で本番用にビルドするときに使うであろう hugo コマンドはデフォルトで production が設定されます。

これらの値自体を参照することも可能です。

{{ if eq hugo.Environment "production" }}
  <!-- なんらかの処理 -->
{{ end }}

が、その場合は上のように環境名を表す文字列をハードコードする必要があり、バグの元となりやすいので、個人的には以下のように想定する環境かどうかを確認する関数を用いる方がよいと考えます。

余談

この件について調べていたところいろいろな情報があったので整理しておきます。

HUGO_ENV

とある記事で HUGO_ENV を使うという例がありました。

しかし私の環境では動作せず。どうやらnetlifyで動作させるときに用いるカスタムの変数のようで、Hugoがデフォルトで用意しているものではなさそうです。

私はnetlifyを使っていないのでわざわざこの変数を定義することはしませんでした。またnetlifyを使っているとしても、デプロイ先に依存した処理でなければなるべくHugo自身が用意した方法を用いるのがよいかと思います。

.Hugo.Environment

別の記事にて .Hugo.Environment を使うという例もありました。

\https://right-tech.net/tips/hugo-env-switch/ (2024年6月現在リンク切れ)

しかしこれも私の環境では動作せず。これも独自に設定した変数でしょうか。詳細はわかりませんが、ご自身の環境に合った方法をお試しください。

最終更新 2024-06-19

広告

本記事はお役に立てたでしょうか。本ブログでは匿名でのコメントや少額から(15円~)の寄付などを受け付けております。もしお役に立てたのであればご支援いただけると大変励みになります。

Built with Hugo
テーマ StackJimmy によって設計されています。