はじめに
今回はGit管理しているObsidianのVault内ドキュメントの一部をHugoというSSG(静的サイトジェネレータ)を用いてGitHub Pagesへ無料で自動公開する仕組みを構築してみました🎵
対象読者
- Obsidian等でマークダウン記事をGitHubで管理している人向け
- ブログとして公開したい記事がある人向け
- 無料で公開したい人向け
- 書いた記事を自動で公開できるようにしたい人向け
- macOSユーザ向け
他OSとの違いはHugoのインストール方法程度ですので、他OSユーザーも参考になるかと思います。
対応動機
ObsidianのVault(記事を管理しているディレクトリ)はGitHubのPrivateリポジトリで管理しています。以下のディレクトリ構造のように、便宜上技術系ドキュメントと日記をひとつのVaultで管理しているので、技術系ドキュメント(docs/public
)のみを公開する方法を模索していました。
|
|
ちなみにObsidianの「ファイルとリンク」の設定は以下のとおりです。ウィキリンクなどObsidian固有の機能はオフにし、画像や資料ファイルは全てassets
フォルダへ集約しています。
設定項目 | 設定値 |
---|---|
新規作成するリンクの形式 | ファイルに対する相対パス |
[[ウィキリンク]] を使用 | OFF |
新規添付ファイルの作成場所 | 以下で指定されたフォルダ |
添付ファイルフォルダのパス | assets |
SSGにHugoを選んだ理由は好みのテーマがあったからです。GitHub Pagesが公式でサポートしているJekyllを使用した方が公開手順は減ります。
なお、GitHub PagesにはPrivateリポジトリの対象ディレクトリのみを公開する機能もありますが、Privateリポジリを公開する場合は有料プランに加入していないと利用できなかったため、断念しました🥲
今回の方針
Vault内のdocs/public
やassets
フォルダの内容だけを公開するために、以下の手順を実施します。登場するリポジトリ名やブランチ名は任意の名称をお使いください。
flowchart TD A[Publicリポジトリ shindys-note の作成] --> B[Hugo環境をデフォルトブランチに構築] B --> C[GitHub Pages公開環境を gh-pages ブランチに構築] C --> D[Vault内の対象フォルダを master へ同期] D --> E[gh-pages ブランチを GitHub Pages へ公開]
使用するもの
- MacBook Air M3
- VS Code … Hugo設定変更&デバッグ用途
- Obsidian … ドキュメントの更新
- Homebrew … パッケージマネージャ(Hugoインストール用)
- Git … ファイルバージョン管理(
brew install git
でインストール可能) - GitHubアカウント … GitHubのサービスをフル活用するので必要
- (任意)Gitクライアント … GitHub Desktop、VS Codeの拡張機能、SourceTree等使いやすいもの
1. Publicリポジトリshindys-note
の作成
Hugoインストール
|
|
Hugo siteの作成 & 空ディレクトリ内に.gitkeepを作成
任意のディレクトリに移動してから以下コマンドを実行してください。
|
|
Gitの初期化
|
|
(任意).gitignoreのおすすめ設定
.gitignoreファイルを作成しておくと、中に記述したパスをGitが自動で追跡対象外にしてくれます。
# Hugo build output
/public/
/resources/_gen/
/hugo_stats.json
/.hugo_build.lock
# Logs and OS files
*.log
.DS_Store
Thumbs.db
# VSCode settings
.vscode/
.history/
# Node stuff (もしnpmでテーマ管理する場合は必要)
node_modules/
# Env files
.env
.env.*
# Backup files
*~
サイトの基本情報やテーマ変更やローカルでのテスト方法
GitHubへpushする前に、自分の好きなテーマで記事が正しく表示されるかテストしましょう。
基本情報(URLや言語、タイトル等)
hugo.toml内で設定できます。
|
|
テーマ変更
テーマはHugo Themesに一覧があります。今回はananke
に変更する例
|
|
shindys-note
を再度クローンしたときに、サブモジュールが配置されていない場合はリポジトリ内で以下のコマンドを実行してください。
|
|
またサブモジュールを解除(テーマをアンインストール)する場合は以下のコマンドを実行後、変更をコミットしてください。(hugo.tomlのテーマ設定も削除してください。)
|
|
post追加
以下のコマンドで/archetypes/default.md
をテンプレートとして/content/posts/hello.md
を作成します。あくまでテスト用なので、自分であらかじめ作成したドキュメントを/content/posts
へ格納してテストしていただいても構いません。テスト用のドキュメントをコミット時に対象とするかは自己判断でお願いします。
|
|
ローカルサーバー起動
|
|
-D
は下書き(draft = trueの記事)も表示するオプションです。- 起動後ブラウザで確認 →
http://localhost:1313/<site name>/
- 保存するたびに自動でリロードしてくれます。
好みのテーマで作成した記事が表示されたら確認は完了です。
shindys-note
をGitHub へ Publicリポジトリとして公開
GitHubのリモートリポジトリの作成方法は多種多様なので、ご自身に合うやり方で公開してください。
- Gitクライアント(GitHub Desktop等)
- GitHub CLI
- GitHub
.gitignoreの内容にもよりますが、最終的にGitHubへは以下の構成がpushされるはずです。
|
|
2. GitHub Pages公開環境をgh-pages
ブランチに構築
ここでは、GitHub Actionsを使用してshindys-note
のデフォルトブランチに更新があった際に、自動でHugoによるビルドを行い、成果物をgh-pages
ブランチへ反映する仕組みを構築します。手順としては以下の内容を記述した.github/workflows/deploy.yml
をshindys-note
のデフォルトブランチで作成し、pushするだけです。コメント部分に注意して適宜修正してください。
|
|
GitHubリポジトリのActionsタブを見ると成否が伺えます。
ここまででshindys-note
の環境は整いました。あとはObsidianのVault内の更新があればshindys-note
へ同期を行う仕組みを構築し、GitHub Pagesへの公開設定を実施すれば完了です。
3. Vault内の対象フォルダをmaster
へ同期
Privateリポジトリで管理しているObsidianのVaultの技術系ドキュメント関連ファイルに変更があった場合に、Vault内の対象フォルダdocs/public
およびassets
フォルダの内容をshindys-note
のmaster
ブランチへ同期(置換)する仕組みを構築します。
3.1 Personal Access Token (PAT)の作成
リポジトリ間の操作になりますので、以下の手順でリポジトリ操作権限を持ったPATを作成します。
- GitHub から
Settings > Developer settings > Personal access tokens > Tokens (classic)
- scope:
repo
にチェックを入れる - トークンをコピーする
3.2 PATをVaultリポジトリに設定
- Vaultリポジトリ →
Settings > Secrets and variables > Actions > New repository secret
- 名前:
NOTE_REPO_TOKEN
- 値:上でコピーしたPAT
3.3 Vaultリポジトリ内にGitHub Actions用のスクリプトを作成
以下の内容を記述した.github/workflows/sync-to-note.yml
を作成し、pushしてください。
pushすると、Actionsが動作し、shindys-note
へ同期が行われます。コメント部分に注意して適宜修正してください。
|
|
4. gh-pages
ブランチを GitHub Pages へ公開
最後に構築した公開用環境をGitHub Pagesに公開する設定を行います。
- GitHubリポジトリのSettingsタブのPagesを選択
- Build and deploymentのSourceに「Deploy from a branch」を選択
- Branchには
gh-pages
、/(root)
を設定
ローカルでテストしたときと同じ内容が表示されれば、公開完了です🎵
おまけ(2025年8月24日追記)
最近はPaperModというテーマを使っています。見た目はシンプルでスタイリッシュなのが特徴的なテーマです。ざっと見たところ、Hugoのテーマの中で最も人気があるようでした👌
基本設定は設定ファイル(hugo.toml
など)で完結し、比較的簡単に利用できるため、私もおすすめします🥰
私の設定は以下で公開中です。
shindys-note/hugo.toml at master · shindy-dev/shindys-note
So everyone, enjoy life!