HUGOの.Permalinkでlocalhostが指定されてしまう場合の対処法

結論

hugo serveコマンドはデバッグ用のコマンドなので、hugoコマンドやhugo buildコマンドで本番用にビルドしてあげる必要があります(当たり前体操)。

下記の記事を参考にしました。

なぜこの記事を書いたか

このブログではブログ内検索にAlgoliaを使っているのですが、検索結果の記事のBaseUrlが何故かlocalhost:1313(ローカル環境でのURL)になってしまっていたため、検索した記事に飛べない状況になってしまっていました… 😿

原因

元々、ローカル環境でのデバッグは次の手順で行っていました。

  1. 何らかの編集
  2. hugo serverコマンドを実行して動作確認
  3. npm scriptで設定したコマンドを使って自動的にAlgoliaにデータをアップロード
  4. githubにも変更点をプッシュして自動デプロイ

今までは特に気にしたことも無かったのですが、手順2のhugo serverコマンドによってビルドされたファイルの.Permalinklocalhost:1313になってしまいます。Algoliaへのデータの反映はこのビルド時のデータを元にしていたので、Algolia経由での検索結果のURLがおかしくなっていました…😿

対策

編集 ~ ビルド ~ デプロイまでの手順を次の様に変えました。

  1. 何らかの編集
  2. hugo serverコマンドを実行して動作確認
  3. hugoコマンドを実行
  4. npm scriptで設定したコマンドを使って自動的にAlgoliaにデータをアップロード
  5. githubにも変更点をプッシュして自動デプロイ

手順3により、.Permalinkがちゃんとconfig.toml等で指定したbaseUrlになりました。

なお、実際には手順3, 4はほぼ同時に行われるようにしており、package.jsonscript内では次のようなコマンドを定義し、サイトのビルドとAlgoliaへのアップロードをシームレスに実行しています。

"scripts": {
  "algolia": "algoliaへの自動アップロード処理"
  "build": "hugo --minify --gc && npm run algolia"
}

蛇足

本業並に時間があればAlgoliaの検索機能のテストコードも書いて実装したいんだけどそんな余裕はない…