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 以外にも複数存在します。用途や技術スタックに応じた選定が重要です。
| 項目 | Hugo | Jekyll | Astro | Eleventy | Next.js(SSG) |
|---|---|---|---|---|---|
| 実装言語 | Go | Ruby | JavaScript | JavaScript | JavaScript |
| ランタイム依存 | なし(単体バイナリ) | Ruby + gem | Node.js | Node.js | Node.js |
| ビルド速度(1000ページ) | 約1〜2秒 | 約30〜60秒 | 約5〜10秒 | 約3〜8秒 | 約10〜20秒 |
| テンプレート言語 | Go Template | Liquid | JSX/Astro | Nunjucks/Liquid等 | JSX/TSX |
| 学習コスト | 中(Go Template特有の構文) | 低〜中 | 中 | 低 | 高(React知識が必要) |
| 動的コンテンツ対応 | JavaScript埋め込みで可能 | 限定的 | 部分的ハイドレーション | JavaScript埋め込みで可能 | SSR/ISRに対応 |
| GitHub Stars | 86,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対応 |
|---|---|---|
| Netlify | CDN配信・フォーム機能・プレビューデプロイ | ビルドコマンドに hugo を指定するだけ |
| Cloudflare Pages | エッジネットワーク配信・無料枠が広い | Hugo をフレームワークとして選択可能 |
| Vercel | プレビュー環境の自動作成 | Hugo プロジェクトを自動検出 |
| Firebase Hosting | Googleインフラ・SPA対応 | firebase deploy で public/ をデプロイ |
テーマ選びのポイント
Hugoの公式テーマサイト(themes.gohugo.io)には数百種のテーマが登録されています。テーマ選定の際は以下の観点で比較するのがおすすめです。
- 最終更新日: 1年以上更新がないテーマは、Hugo本体のバージョンアップに追従できていない可能性がある
- Hugo のバージョン要件: テーマの
READMEやtheme.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/