satoshicano's Blog

using Container for Hugo site

Apple公式のコンテナランタイム「Container」を使って、Hugoの執筆環境をコンテナ化してみました。Containerの基本的な使い方を学びながら、実用的な開発環境を構築する過程を紹介します。

Containerとは

Containerは、Mac上で軽量な仮想マシンとしてLinuxコンテナを作成・実行できるツールです。Swiftで開発され、Apple Silicon向けに最適化されています。

公式リポジトリ: https://github.com/apple/container

環境構築手順

1. Containerのインストール

brew install container
container --version

2. システムの起動とカーネルの設定

初回はコンテナサービスの起動とLinuxカーネルのインストールが必要です:

# start container service
brew services start container

# install recommended kernel
container system kernel set --recommended

システムが正常に起動したか確認:

container system status

3. Hugoイメージの取得

HugomModsプロジェクトが提供する公式イメージを使用します:

# 基本イメージのpull
container image pull hugomods/hugo:latest

# または、Git/Node.js含む拡張版
container image pull hugomods/hugo:git-nodejs

イメージの確認:

container image list

Hugo開発サーバーの起動

ブログのルートディレクトリに移動して、以下のコマンドで開発サーバーを起動します:

container run \
  --name hugo-dev \
  --rm \
  -p 1313:1313 \
  -v "$PWD:/src" \
  -w /src \
  -it \
  hugomods/hugo:latest \
  hugo server --bind 0.0.0.0 --poll 700ms

オプションの解説

Containerコマンドの各オプション:

  • --name hugo-dev: コンテナに名前を付ける
  • --rm: コンテナ停止後に自動削除
  • -p 1313:1313: ポート1313をホストにマッピング
  • -v "$PWD:/src": 現在のディレクトリをコンテナの/srcにマウント
  • -w /src: 作業ディレクトリを/srcに設定
  • -it: インタラクティブモード + TTY

Hugoサーバーのオプション:

  • --bind 0.0.0.0: すべてのネットワークインターフェースでリッスン
  • --poll 700ms: ファイル変更を700msごとにポーリング

http://localhost:1313 でサイトにアクセスできます。

ファイル変更の自動反映について

重要: --poll オプションは必須です。Containerでは、現時点ではmacOSのファイルシステムイベントがコンテナに伝わらないため、このオプションがないとファイルを編集してもサイトが更新されません。

下書きも含めて表示する場合:

container run \
  --name hugo-dev \
  --rm \
  -p 1313:1313 \
  -v "$PWD:/src" \
  -w /src \
  -it \
  hugomods/hugo:latest \
  hugo server --bind 0.0.0.0 --poll 700ms --buildDrafts

その他のHugoコマンド

新規記事の作成

container run --rm \
  -v "$PWD:/src" \
  -w /src \
  hugomods/hugo:latest \
  hugo new posts/new-article.md

サイトのビルド

container run --rm \
  -v "$PWD:/src" \
  -w /src \
  hugomods/hugo:latest \
  hugo

ビルド結果は public/ ディレクトリに出力されます。

まとめ

Containerを使ってHugoの執筆環境をコンテナ化してみました。ファイル変更の自動反映は将来的に改善されると思うので期待しています。

参考リンク