記事のMarkdownソースファイルを外部化

今日は当サイトのソースファイルのMDXをリポジトリから追い出し、MarkdownファイルとしてObsidianで管理や編集ができるようにした。 GitHub Pagesへの反映はこれまで通りGitHub Actionsで行えるように、Google Drive経由で更新ができるようにした。

背景

これまでソースリポジトリnahcnuj.github.ioapp/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を作成した。

  1. rcloneを使ってGoogle Driveから.mdファイルをダウンロード
  2. 拡張子を.md.html.mdxに変換
  3. mdxファイルをアーティファクトにアップロード

2. Updateワークフローの作成

上記のアクションを使って、記事ソースのダウンロードからGitHub Pagesへの反映までを行うワークフロー.github/workflows/update.ymlを新たに作成した。

  1. mdxファイル同期
  2. ビルド
  3. GitHub Pagesデプロイ

このワークフローはworkflow_dispatchで更新を手動実行できるようにした。

3. CIワークフローの最適化

.github/workflows/ci.ymlを改良した。

prepareジョブで一度だけmdファイル同期を行い、buildとlintを並列実行できるようにした。

感想

GitHub Copilotのおかげであっという間にワークフローを組み立てられた。 しかし「Failure❌️」が連続するのは相変わらずであった。

  1. 背景
  2. 設計
  3. 実装
    1. 1. Composite Actionの作成
    2. 2. Updateワークフローの作成
    3. 3. CIワークフローの最適化
  4. 感想