📘

個人の日記のデプロイ方法を見直した

2023/03/24に公開

変わっていないこと

  • 日記はMarkdown
  • hugo (extended)
  • Cloudflare Pagesに(で)デプロイ

変更前

デプロイ方法

  • 日記を書く
  • git commit & push でGitHubにpush
  • Cloudflare Pagesでhugoビルド&デプロイ
  • 日記が更新される 🏁

問題点

  • そもそも、git commit & push するのが面倒くさい。
  • ローカルで編集するためにエディタを開くのが億劫
  • そもそも、日記をObisidianに取り込みたかった

試したこと

  • github.devを使ってWeb上で編集する→ちょっとは楽になった
  • ローカルにVSCodiumを入れて日記専用にする→ナシではなかった

変更後

DropboxのAPIトークンには有効期限があるので、テスト中は以下の手順でよいが、本番のジョブを組む時はAPIトークンを再取得するようにする必要がある。
具体的には、次の記事を参照
https://zenn.dev/yakumo/articles/75d3df651d0609

前提

  • Obsidian上の日記は一つのフォルダ以下に入っている
  • ObisidianのデータはDropboxに同期されている。

デプロイ方法

  • 日記をObisidan上で書く。Obisidanは常時起動しているのですぐ書ける
  • AM3:00にご家庭内Jenkinsにより、ジョブが起動される。(Github Actionsでも何でも普通にLinux上のなにかであれば可能。もっと言えばおそらくCloudflare Pagesだけでも可能そう)
  • ジョブ内で、Dropboxから日記ディレクトリをZIPでダウンロードしてきて、githubに上げてあるhugoのテンプレート等と合体させてhugoコマンドでビルドする。
  • ビルドの出力(publicディレクトリ)を、WranglerコマンドでCloudflare Pagesに送る
  • Cloudflare Pagesが更新される 🏁

問題点

  • 更新が即時反映されない。が、今までの経験上日記を書いてcommitした瞬間にミスとか不足に気がつく傾向にあったので逆にメリットだと考えている。
  • Dropboxに特定ディレクトリが更新された時のwebhookがあるので、それを使えば更新までの時間を縮めることは出来るはず。

おまけ

これだけだと単純にやったことになるので、使用しているエンドポイントを記述する

Dropboxから特定ディレクトリをダウンロードするときのエンドポイント

以下のエンドポイントから特定のディレクトリをZIPファイルとして取得できる。
DBX_TOKENはDropboxユーザーの設定から取得可能
DBX_BLOG_PATHは、Dropboxのルートから /my_dir のように指定する
このZIPは、日本語ファイル名はShiftJISでエンコードされているので展開時注意[1]

curl -Ss -X POST https://content.dropboxapi.com/2/files/download_zip \
     --header "Authorization: Bearer ${DBX_TOKEN}" \
     --header "Dropbox-API-Arg: {\"path\":\"${DBX_BLOG_PATH}\"}" \
     --output article.zip

Cloudflare Wranglerで転送

転送する時は以下のコマンドで転送できる。--commit-dirty=true は、つけておかないと転送対象のディレクトリがgitリポジトリ、かつコミットされていない変更がある状態の時にファイルが転送されない。
--project-name= の部分は、Cloudflare Pagesのプロジェクト名を指定する。

CLOUDFLARE_ACCOUNT_ID=abcdefg CLOUDFLARE_API_TOKEN=wranglertoken
npx wrangler pages publish target_dir --project-name=blog --commit-dirty=true
脚注
  1. こちら参照(宣伝) https://zenn.dev/yakumo/articles/d85738737018f8 ↩︎

Discussion