記事のMarkdownソースファイルを外部化
今日は当サイトのソースファイルのMDXをリポジトリから追い出し、MarkdownファイルとしてObsidianで管理や編集ができるようにした。 GitHub Pagesへの反映はこれまで通りGitHub Actionsで行えるように、Google Drive経由で更新ができるようにした。
背景
これまでソースリポジトリnahcnuj.github.io ⧉のapp/routes配下に記事ソースをMDXファイルで直接コミットしていたが、記事の編集がGit操作と結びついて更新が面倒だった。
GitHubのプロフィールページの草を量産するためにこうしたような記憶もあるが、本質的価値のない机上の緑化活動は辞めることにした。
Markdown形式のナレッジベースObsidian ⧉と出会ったことも契機となった。 ただ、公式のObsidian SyncやObsidian Publishはお金がかかるし、別にObsidian特有の凝ったことがやりたいわけではなかったので、Google DriveとGitHub ActionsでひとまずMarkdownファイルを追い出すことにした。
設計
Markdownファイル(Obsidian Vault)をGoogle Driveでソースし、GitHub Actionsのワークフローでrclone ⧉を使ってダウンロードする。
app/routes配下のディレクトリをそのままVault化することで、ダウンロードしたMarkdownファイルをそのまま配置すれば従来通りビルドできるようにした。
実装
本セクションはGitHub Copilotと共同で執筆した。
1. Composite Actionの作成
Rcloneを使ってGoogle Driveから記事ソースを同期するアクション.github/actions/sync-mdx-from-gdrive/action.ymlを作成した。
- rcloneを使ってGoogle Driveから
.mdファイルをダウンロード - 拡張子を
.md→.html.mdxに変換 - mdxファイルをアーティファクトにアップロード
2. Updateワークフローの作成
上記のアクションを使って、記事ソースのダウンロードからGitHub Pagesへの反映までを行うワークフロー.github/workflows/update.ymlを新たに作成した。
- mdxファイル同期
- ビルド
- GitHub Pagesデプロイ
このワークフローはworkflow_dispatchで更新を手動実行できるようにした。
3. CIワークフローの最適化
.github/workflows/ci.ymlを改良した。
- prepareジョブ: Google Driveからmdファイルを同期し、アーティファクトにアップロード
- buildジョブ: アーティファクトをダウンロードしてビルド実行
- lintジョブ: アーティファクトをダウンロードしてlinter実行
prepareジョブで一度だけmdファイル同期を行い、buildとlintを並列実行できるようにした。
感想
GitHub Copilotのおかげであっという間にワークフローを組み立てられた。 しかし「Failure❌️」が連続するのは相変わらずであった。