Hugoとは何か ― Go製の高速な静的サイトジェネレーター

Hugo(ヒューゴ)は、Go言語で開発されたオープンソースの静的サイトジェネレーター(SSG)です。Markdown で記述したコンテンツをもとに、HTML/CSS/JavaScript だけで構成される静的ファイル群を生成します。Apache License 2.0 のもとで公開されており、GitHub のスター数は 86,000 を超えています(2026年2月時点)。

WordPressのようなCMSはリクエストのたびにサーバーサイドでHTMLを生成しますが、Hugoはビルド時にすべてのHTMLを事前生成します。データベースやPHPランタイムが不要なため、表示速度・セキュリティ・運用コストの面で大きなメリットがあります。

Hugoが選ばれる3つの理由

観点Hugoの特徴
ビルド速度1ページあたり1ms以下で処理でき、数千ページのサイトも数秒で生成
環境構築コンパイル済みバイナリ1ファイルのみで動作。Node.jsやRubyなどのランタイム不要
テーマ・拡張性公式テーマサイトに数百種のテーマがあり、Hugo ModulesやHugo Pipesによるカスタマイズも柔軟

他の主要SSGとの違い

静的サイトジェネレーターは Hugo 以外にも複数存在します。用途や技術スタックに応じた選定が重要です。

項目HugoJekyllAstroEleventyNext.js(SSG)
実装言語GoRubyJavaScriptJavaScriptJavaScript
ランタイム依存なし(単体バイナリ)Ruby + gemNode.jsNode.jsNode.js
ビルド速度(1000ページ)約1〜2秒約30〜60秒約5〜10秒約3〜8秒約10〜20秒
テンプレート言語Go TemplateLiquidJSX/AstroNunjucks/Liquid等JSX/TSX
学習コスト中(Go Template特有の構文)低〜中高(React知識が必要)
動的コンテンツ対応JavaScript埋め込みで可能限定的部分的ハイドレーションJavaScript埋め込みで可能SSR/ISRに対応
GitHub Stars86,000+51,000+56,000+19,000+138,000+

Hugoの最大の強みはビルド速度とランタイム依存の少なさです。ブログや技術ドキュメント、コーポレートサイトなど、コンテンツ主体のサイトに適しています。一方、インタラクティブなWebアプリケーションを構築する場合は、AstroやNext.jsが向いています。

OS別インストール手順

Hugoのインストールはパッケージマネージャーを使う方法が最も簡単です。

macOS

# Homebrew
brew install hugo

# Extended版(Sass/SCSS対応が必要な場合)
brew install hugo
# ※ HomebrewのHugoはデフォルトでExtended版がインストールされます

Windows

# winget
winget install Hugo.Hugo.Extended

# Chocolatey
choco install hugo-extended

# Scoop
scoop install hugo-extended

Linux(Debian/Ubuntu系)

# Snap
sudo snap install hugo

# APTリポジトリから
sudo apt install hugo

バージョン確認

hugo version
# 出力例: hugo v0.155.2-... extended ...

「extended」の文字が含まれていれば、Sass/SCSS のトランスパイルに対応した Extended 版です。多くのテーマが Extended 版を前提としているため、特別な理由がなければ Extended 版を選んでください。

プロジェクト作成から初回ビルドまで

新規サイトの作成

hugo new site my-blog
cd my-blog

生成されるディレクトリ構成は以下のとおりです。

my-blog/
├── archetypes/     # 記事テンプレート(front matter の雛形)
│   └── default.md
├── assets/         # Hugo Pipes で処理する CSS/JS/画像
├── content/        # Markdown 記事ファイル
├── data/           # JSON/TOML/YAML のデータファイル
├── i18n/           # 多言語対応の翻訳ファイル
├── layouts/        # テンプレート(テーマ上書き用)
├── static/         # そのまま出力される静的ファイル
├── themes/         # テーマディレクトリ
└── hugo.toml       # 設定ファイル

テーマの導入

Hugo Modules を使ってテーマを導入する方法が公式で推奨されています。ここでは、人気テーマ「PaperMod」を例に Git submodule 方式でも紹介します。

# Git を初期化
git init

# PaperMod テーマを submodule として追加
git submodule add --depth=1 https://github.com/adityatelange/hugo-PaperMod.git themes/PaperMod

設定ファイルにテーマ名を追加します。

# hugo.toml
baseURL = 'https://example.com/'
languageCode = 'ja'
title = 'My Hugo Blog'
theme = 'PaperMod'

記事の作成

hugo new content posts/first-post.md

生成されたファイルを編集します。

---
title: "はじめての記事"
date: 2026-02-08T10:53:51+09:00
draft: false
tags: ["Hugo", "入門"]
---

Hugoで最初の記事を書きました。Markdownで自由に記述できます。

## 見出しの例

- リスト項目1
- リスト項目2

コードブロックも使えます。

```go
package main

import "fmt"

func main() {
    fmt.Println("Hello, Hugo!")
}

### 開発サーバーの起動

```bash
hugo server -D

-D フラグは draft: true の下書き記事も表示するオプションです。ブラウザで http://localhost:1313/ を開くと、リアルタイムプレビューが確認できます。ファイルを保存するたびにブラウザが自動リロードされるため、執筆とプレビューを同時に進められます。

本番用ビルド

hugo

public/ ディレクトリに HTML/CSS/JS ファイル一式が生成されます。このフォルダの中身をWebサーバーにアップロードするだけで公開できます。

設定ファイルの書き方

Hugo は TOML・YAML・JSON の3形式に対応しています。デフォルトは TOML 形式の hugo.toml です。

基本設定(TOML)

baseURL = 'https://example.com/'
languageCode = 'ja'
title = 'サイトタイトル'
theme = 'PaperMod'

# パーマリンク設定
[permalinks]
  posts = '/:year/:month/:slug/'

# メニュー
[[menus.main]]
  name = 'Home'
  pageRef = '/'
  weight = 10

[[menus.main]]
  name = 'Archives'
  pageRef = '/archives/'
  weight = 20

[[menus.main]]
  name = 'Tags'
  pageRef = '/tags/'
  weight = 30

# テーマ固有のパラメータ
[params]
  author = 'Your Name'
  description = 'サイトの説明文'
  ShowReadingTime = true
  ShowShareButtons = true
  ShowPostNavLinks = true
  ShowBreadCrumbs = true
  ShowCodeCopyButtons = true

YAML形式で書く場合

設定ファイルを hugo.yaml に変更すれば YAML 形式で記述できます。

baseURL: https://example.com/
languageCode: ja
title: サイトタイトル
theme: PaperMod

permalinks:
  posts: /:year/:month/:slug/

params:
  author: Your Name
  description: サイトの説明文

TOML と YAML のどちらを使うかは好みの問題ですが、Hugo のドキュメントは TOML を基準としているため、初めて使う場合は TOML に合わせると公式ドキュメントとの対応がとりやすくなります。

SEOに役立つ組み込み機能

Hugo にはSEO対策に使える機能が標準で用意されています。

サイトマップの自動生成

ビルド時に sitemap.xml が自動で生成されます。設定で出力内容を調整できます。

[sitemap]
  changeFreq = 'weekly'
  filename = 'sitemap.xml'
  priority = 0.5

OGP(Open Graph Protocol)・Twitterカード

Hugo の内部テンプレートを使うと、OGP タグや Twitter カード用のメタタグを簡単に出力できます。layouts/partials/head.html などに以下を追加します。

{{ template "_internal/opengraph.html" . }}
{{ template "_internal/twitter_cards.html" . }}

robots.txt の生成

enableRobotsTXT = true

この1行を設定に追加するだけで、robots.txt がビルド時に自動生成されます。

RSS フィードの自動出力

Hugo はデフォルトで RSS フィード(index.xml)を出力します。記事ごとのセクション単位でもフィードが生成されるため、カテゴリ別の購読にも対応できます。

Hugo Pipes ― 組み込みアセット処理

Hugo Pipes は、CSS・JavaScript・画像などのアセットファイルをビルド時に処理する仕組みです。外部のビルドツール(webpack や Vite)を使わずに、以下の処理を Hugo 単体で実行できます。

  • Sass/SCSS → CSS のトランスパイル(Extended版)
  • CSS/JS の圧縮(Minify)
  • PostCSS プラグインの適用
  • JavaScript のバンドル・Tree Shaking(ESBuild統合)
  • 画像のリサイズ・フォーマット変換
  • ファイルのフィンガープリント付与(キャッシュバスティング)
{{ $style := resources.Get "css/main.scss" | toCSS | minify | fingerprint }}
<link rel="stylesheet" href="{{ $style.RelPermalink }}" integrity="{{ $style.Data.Integrity }}">

このパイプチェーンの結果はキャッシュされるため、テンプレートが何千回呼ばれてもビルド性能に影響しません。

Hugo Modules ― Goモジュールによる依存管理

Hugo Modules は Go の Module システムを基盤としたパッケージ管理機能です。テーマやコンポーネントを Git リポジトリから直接インポートでき、バージョン管理もGoモジュールの仕組みで行えます。

# モジュールの初期化
hugo mod init github.com/yourname/my-blog

# テーマをモジュールとしてインポート(hugo.toml に記述)
[module]
  [[module.imports]]
    path = 'github.com/adityatelange/hugo-PaperMod'
# モジュールの更新
hugo mod get -u

# 全モジュールを vendor ディレクトリに保存
hugo mod vendor

Git submodule 方式と比較すると、バージョンの固定やアップデートが Go の go.sum と同じ仕組みで管理されるため、再現性が高いという利点があります。

GitHub Actions で自動デプロイする

GitHub Pages + GitHub Actions の組み合わせで、コードをプッシュするたびにサイトが自動デプロイされるワークフローを構築できます。

# .github/workflows/hugo-deploy.yaml
name: Deploy Hugo Site

on:
  push:
    branches:
      - main

permissions:
  contents: read
  pages: write
  id-token: write

concurrency:
  group: pages
  cancel-in-progress: false

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: recursive
          fetch-depth: 0

      - name: Setup Hugo
        uses: peaceiris/actions-hugo@v3
        with:
          hugo-version: 'latest'
          extended: true

      - name: Build
        run: hugo --minify --baseURL "${{ steps.pages.outputs.base_url }}/"

      - name: Upload artifact
        uses: actions/upload-pages-artifact@v4
        with:
          path: ./public

  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4

GitHub リポジトリの Settings → Pages で、ソースを「GitHub Actions」に変更するだけで連携が完了します。

他のホスティングサービスでのデプロイ

サービス特徴Hugo対応
NetlifyCDN配信・フォーム機能・プレビューデプロイビルドコマンドに hugo を指定するだけ
Cloudflare Pagesエッジネットワーク配信・無料枠が広いHugo をフレームワークとして選択可能
Vercelプレビュー環境の自動作成Hugo プロジェクトを自動検出
Firebase HostingGoogleインフラ・SPA対応firebase deploypublic/ をデプロイ

テーマ選びのポイント

Hugoの公式テーマサイト(themes.gohugo.io)には数百種のテーマが登録されています。テーマ選定の際は以下の観点で比較するのがおすすめです。

  • 最終更新日: 1年以上更新がないテーマは、Hugo本体のバージョンアップに追従できていない可能性がある
  • Hugo のバージョン要件: テーマの READMEtheme.toml に記載された最低バージョンを確認する
  • Extended版の要否: Sass/SCSS を使うテーマは Extended 版が必須
  • 多言語対応: i18n ディレクトリを持つテーマは多言語サイトに対応
  • ライセンス: MIT が多いものの、一部のテーマは独自ライセンスを採用している

人気テーマの一例

テーマ名用途特徴
PaperModブログ・個人サイト軽量・高速・ダークモード対応
Docsy技術ドキュメントGoogleのGitHub配下で公開・i18n対応・検索機能付き
Stackブログカード型レイアウト・ウィジェット豊富
Blowfishブログ・ポートフォリオTailwind CSS ベース・アニメーション対応
Congoブログ・個人サイトTailwind CSS ベース・軽量設計

ショートコードでコンテンツを拡充する

ショートコード(Shortcode)は、Markdown だけでは表現しにくい要素をテンプレートとして埋め込む Hugo 独自の仕組みです。

組み込みショートコードの例

<!-- YouTube 動画の埋め込み -->
{{< youtube dQw4w9WgXcQ >}}

<!-- GitHub Gist の埋め込み -->
{{< gist user 12345 >}}

<!-- Twitter(X)の埋め込み -->
{{< tweet user="GoHugoIO" id="1234567890" >}}

<!-- 画像のレスポンシブ対応 -->
{{< figure src="/images/hugo-logo.png" alt="Hugo Logo" caption="Hugoのロゴ" >}}

カスタムショートコードの作成

layouts/shortcodes/ ディレクトリにHTMLファイルを配置すると、独自のショートコードを定義できます。

<!-- layouts/shortcodes/alert.html -->
<div class="alert alert-{{ .Get "type" | default "info" }}">
  {{ .Inner | markdownify }}
</div>

記事中での使い方は以下のとおりです。

{{< alert type="warning" >}}
この操作は元に戻せません。実行前にバックアップを取得してください。
{{< /alert >}}

よくある疑問と回答

Hugoを使うのにGo言語の知識は必要ですか?

不要です。Hugo のバイナリは Go でコンパイル済みのため、Go の開発環境をインストールする必要はありません。テンプレート構文に Go Template の記法が使われますが、Go 言語そのものを書くわけではありません。

WordPressから移行できますか?

移行可能です。WordPress の記事を Markdown に変換するツール(wordpress-to-hugo-exporter など)が公開されています。ただし、プラグインに依存した動的機能(コメント欄、問い合わせフォーム等)は外部サービスで代替する必要があります。

ブログ以外の用途にも使えますか?

ドキュメントサイト、ポートフォリオ、コーポレートサイト、ランディングページなど、コンテンツが中心のサイト全般に適しています。GoogleのGitHub Organization配下で公開されている Docsy テーマは、オープンソースプロジェクトの技術文書サイトを想定して設計されています。

記事が増えるとビルドが遅くなりませんか?

Hugo のビルドエンジンは並列処理に最適化されています。1,000記事規模で数秒、10,000記事でも10秒前後でビルドが完了するケースが報告されています。SSG の中で最速クラスの性能です。

検索機能は付けられますか?

Hugo 単体ではサーバーサイドの検索機能を提供しませんが、以下の方法で対応できます。

  • Fuse.js / Lunr.js: クライアントサイド全文検索ライブラリと Hugo の JSON 出力を組み合わせる
  • Algolia / Pagefind: SaaS型またはクライアント型の検索サービスと連携する
  • Google サイト検索: Googleのインデックスを利用するカスタム検索

まとめ

Hugo は、Go 製の単体バイナリで動作する静的サイトジェネレーターです。ランタイム依存がなく、数千ページ規模のサイトも数秒でビルドできる速度が特長です。Markdown で記事を書き、Git でバージョン管理し、GitHub Actions で自動デプロイするワークフローを構築すれば、サーバー管理の手間なく安全にサイトを運営できます。

Hugo Pipes や Hugo Modules といった拡張機能により、CSS/JS のビルドやテーマの管理も Hugo のエコシステム内で完結します。テーマも豊富に用意されているため、ブログ・ドキュメント・コーポレートサイトなど幅広い用途に対応可能です。

公式サイト: https://gohugo.io/