最近、個人ブログに「大改修」を施しました。 単一言語バージョンから多言語サイト(簡体字中国語、繁体字中国語、英語、日本語)にアップグレードし、 その全プロセスを自動化しました。💪
主な内容は以下の通りです。
- メインサイトの記事を自動同期
- コンテンツを自動AI翻訳
- 多言語サイトの自動構築とデプロイ
なぜ Hugo を選んだのか?
それは、その自信に満ちたスローガンがあったからです。
“The world’s fastest framework for building websites.”
—— この一言で、これに決めました 😆。
しかし、私は「一つのテーマで多言語を切り替える」という伝統的な方法ではなく、 各言語に独立したテーマを持たせることにしました。 これにより、各言語バージョンが独自のデザインとレイアウトスタイルを保持し、 真に「文化的なローカライゼーション」を実現できます。
設計目標と制約 🎯
- 言語: 簡体字中国語、繁体字中国語、英語、日本語をサポートし、将来的に拡張可能。
- テーマ: 各言語に最適な Hugo テーマを使用し、無理に再利用しない。
- コンテンツ同期: 全言語で一つのコンテンツリポジトリを共有し、必要に応じて翻訳。
- デプロイ戦略: 各言語を独立して構築・公開し、異なるブランチやドメインにデプロイ可能。
- カスタムページ: 「友だちリンク」、「書斎」、「アーカイブ」などのページは、多言語で一貫した体験を維持する。
多言語設定戦略 🧩
各言語用に個別の設定ファイルを用意しました。
config/<lang>.toml で、主に以下の役割を担います。
- テーマの指定(例:
theme = "PaperMod")。 - その言語固有の
title/description/keywordsの定義。 - 異なるテーマのナビゲーション構造に合わせるためのメニュー設定
[[params.menu]]の上書き。 - 全体的な視覚的一貫性を保証するためのカスタムスタイルの注入。
この構造は非常に明確で、将来的にさらに多くの言語バージョンを拡張するのにも便利です。
GitHub Actions 自動デプロイマトリックス ⚙️
CI/CD 部分は完全に GitHub Actions に任せています。
.github/workflows/hugo.yml では、マトリックスビルドを使用し、
各言語を独立して構築・公開しています。
matrix:
include:
- lang: en
config: config/en.toml
publish_branch: dist-en
- lang: zh-cn
config: config/zh.toml
publish_branch: dist-zh
- lang: ja
config: config/ja.toml
publish_branch: dist-ja
- lang: zh-hant
config: config/zh-hant.toml
publish_branch: dist-zh-hant
ビルドフェーズ 👇
- name: Build ${{ matrix.lang }}
working-directory: hugo-site
run: |
hugo \
--config "${{ matrix.config }}" \
--destination "public/${{ matrix.lang }}"
公開フェーズ 👇
- name: Publish
uses: peaceiris/actions-gh-pages@v3
with:
publish_branch: ${{ matrix.publish_branch }}
publish_dir: hugo-site/public/${{ matrix.lang }}
最終結果 🌐
デプロイ完了後、以下の構造になりました。
| 言語 | ブランチ | ドメイン |
|---|---|---|
| 英語 | dist-en |
en.moejue.cn |
| 簡体字中国語 | dist-zh |
zh.moejue.cn |
| 日本語 | dist-ja |
ja.moejue.cn |
| 繁体字中国語 | dist-zh-hant |
tw.moejue.cn |
このプロセス全体で、コンテンツ同期 → 自動翻訳 → 独立構築 → 自動デプロイの完全な閉ループが実現しました。 これからは記事を書くだけで、残りはスクリプトに任せればOKです。✨

後書き 🪶
これ以前に、MoeKoe Music Web や MoeKoe Music も国際化対応を始めていましたが、 ブログはなかなか追いつけずにいました。今回ようやく対応できました。😄
最大の収穫は多言語サイトそのものではなく、 「コンテンツを世界にどうすればもっと見てもらえるか」ということを再考できたことです。
これこそがブログをいじる意味なのかもしれませんね。😉
