Q.

mdファイルから静的サイトを高速で作成できるhugoは、あるページ数を超えるとかなり速度が遅くなるというような限界というものはあるのでしょうか?


A.

はい、Hugoは非常に高速な静的サイトジェネレーターとして知られていますが、ページ数が増えるとビルド速度が徐々に低下するという限界は確かに存在します。ただし、その「限界」は状況や構成により大きく異なります。以下に詳細を解説します。


Hugoの基本的な高速性

  • Go言語で書かれており、数千ページ程度までは他の静的サイトジェネレーターよりも圧倒的に速い。
  • 公式でも「数千〜数万ページでも対応可能」とされています。

⚠️ ビルド速度が遅くなる主な要因

  1. ページ数(Markdownファイル数)

    • 数千ページ:通常は数秒〜数十秒程度でビルド。
    • 1万ページ以上:ビルド時間が数十秒〜数分に達する場合あり。
    • 10万ページ以上:ビルド時間が大幅に増加し、最適化が必須。
  2. テンプレートの複雑さ

    • .Site.RegularPages, .Site.Pages, .Site.Data のループが多いと遅くなる。
    • wheresortunion などのフィルターや操作が複雑だと負荷が大きい。
  3. カテゴリ・タグ・カスタム分類(taxonomies)

    • 多数のタクソノミーを持つと、各タクソノミーの一覧ページやRSSも生成されるため負荷増。
  4. 画像処理

    • .Resources.Get.Fit, .Resize を大量に使うと、画像処理のたびにビルド時間が長くなる。
  5. リビルド時の --watch モード

    • ファイル変更のたびに全体再ビルドになると、開発時のレスポンスが悪化。

🚀 速度低下への対処法

対策説明
--gc, --minify をオフ開発時はガーベジコレクションと圧縮を無効化することで速度改善。
パーシャルテンプレートのキャッシュ活用{{ partialCached "テンプレート名.html" . .Params.id }}
.Site.RegularPages のフィルタ処理削減不要な whererange を見直す。
.Data への依存軽減巨大なYAML/JSONデータの読み込みを抑える。
コンテンツ分割サイトを複数の小規模サイトに分割して、ビルド後に統合する構成もあり。

🧪 事例・ベンチマーク(参考)

ページ数ビルド時間(目安)
500 ページ約1〜2秒
5,000 ページ約5〜10秒
20,000 ページ約30〜60秒(最適化次第)
100,000ページ以上数分以上(構成により大差)

✅ 結論

Hugoには他のジェネレーターより高いスケーラビリティがありますが、数万ページを超える規模ではテンプレートの設計やデータ構成を意識的に最適化する必要があります。商用や大規模サイトでも十分使われているので、「限界」はありますが、工夫次第でかなりのページ数にも対応可能です。


ご希望があれば、あなたの構成に応じた「高速化チェックポイントリスト」も作成できますよ!