Skip to main content

このブログを Hugo で構築した理由

Author
blackratel

はじめに
#

ブログを始めるにあたって、まず悩んだのがプラットフォームの選定だ。
WordPress をはじめとする CMS は機能が豊富な反面、DB・PHP・プラグイン管理など 運用コストが高い。今回は「書くことに集中できる、軽量で安全な構成」を目指した。

その結果として選んだのが Hugo だ。


なぜ Hugo を選んだのか
#

1. セキュリティ
#

Hugo は静的サイトジェネレーター(SSG)であり、ビルド時にすべてのページを HTML ファイルとして生成する。つまり:

  • SQL インジェクション不可
  • php等の言語の脆弱性と無縁

さらに Hugo は 単一の Go バイナリとして配布されており、 npm のようなサプライチェーンリスクもない。 依存パッケージがゼロというのは、セキュリティ観点では大きな強みだ。

2. リソース効率
#

Web サーバー側に求められるのは「静的ファイルを返すだけ」の能力のみ。 Nginx の最小構成で十分動作し、メモリ・CPU ともにほぼ消費しない。

WordPress のような動的 CMS と比べると、1 リクエストあたりの処理が DB クエリ → PHP 実行 → レンダリング から、ただのファイル読み込みになる。

3. SEO への対応
#

Hugo はビルド時に以下を自動生成する:

機能 詳細
サイトマップ /blog/sitemap.xml
RSS フィード /blog/index.xml
メタタグ title / description / OGP
パーマリンク 柔軟に設定可能

静的 HTML は検索エンジンのクローラーが即座に解析できるため、 Core Web Vitals のスコアも出しやすい。

4. 記事記載
#

記事は Markdown で書く。フォーマットに悩まず内容に集中できる。 ローカルで hugo server を起動しておけば、ファイルを保存するたびに ブラウザがリアルタイムで更新される。


セットアップの概要
#

環境は以下の 2 台構成だ:

[ローカルサーバ]  執筆・プレビュー(hugo server)
      ↓ rsync
[Web サーバ]     静的ファイル配信のみ(Nginx)

インストール・初期構築は Ansible で自動化
#

手順を再現可能にするため、ローカルサーバのセットアップは Ansible Playbook として管理している。
主な処理の流れは下記のとおりだ:

  1. Hugo 専用ユーザーを作成(権限分離)
  2. Hugo Extended バイナリを GitHub Releases から取得・配置
  3. hugo new site でプロジェクトを初期化
  4. PaperMod テーマを git submodule として追加
  5. hugo serversystemd サービスとして登録・自動起動

Hugo のバージョン
#

執筆時点での最新 stable は v0.160.1(2026-04-08 リリース)。


URL 構成
#

既存コンテンツとの共存を考慮し、ブログは /blog/ 配下に配置した:

https://blackratel.com/          # 既存コンテンツ(Hugo 管理外)
https://blackratel.com/blog/     # Hugo 管理ブログ

hugo.tomlbaseURLhttps://blackratel.com/blog/ に設定することで、 サイトマップや内部リンクが正しく生成される。


まとめ
#

観点 Hugo の評価
セキュリティ ◎ 依存ゼロ・DB なし・攻撃面最小
運用コスト ◎ Web サーバは静的配信のみ
SEO ○ サイトマップ・メタタグ自動生成
執筆体験 ○ Markdown・リアルタイムプレビュー
学習コスト △ Go テンプレート構文はやや独特

個人ブログや技術情報の発信用途であれば、Hugo は現時点で最もバランスの 取れた選択肢の一つだと感じている。