はじめに
Astro を使ったポートフォリオサイトを自作する中で、esaで編集したマークダウンからwebサイトの記事を更新するような実装をしたので、備忘録を兼ねてまとめておきます
ちなみに今回実装したサイトはこちらです
また esa のマークダウンに任意の frontmatter をつけてGitHub にコミットする機能のみを実装したレポジトリはこちらです
https://github.com/kanakanho/esa-frontmatter-rewrite-push-github
esa からGitHub にコミットする
コミットする方法
esa から GitHub へのコミットは管理者権限さえあれば比較的に簡単にできます。
この方法については既に esa の方がまとめて下さっているのでそちらの記事を貼っておきます
docs.esa.io help / GitHub Webhook (β)
簡単に説明すると https://{teamName}.esa.io/team/webhooks
にアクセスして
下の Webhook を追加
から
GitHub を選んで必要な項目を入力すると特定の esa Root Category
に投稿された post
の記事が GitHub へ共有されます
自動的に追加される frontmatter
[!TIP]
Frontmatter とは
markdown ファイルの先頭について、ファイルについて追加の情報を記述するためのフォーマットです
---
で区切られる場合 yml 形式が適応されます
esa には自分で編集したマークダウンに加えて下に示すような frontmatter が追加されます。
Astro でマークダウンの frontmatter を分析する
任意の frontmatter を追加したマークダウンを GitHub にコミットする
Astro では frontmatter を解析して本文とは別の情報を取得するための方法があります。
getCollection
や Astro.glob()
を使ってマークダウンファイルを読み込むと frontmatterの情報がプログラムの中で扱えるようになります。
読み込む方法についても簡単なコードを置いておきます
getCollection を使う方法
Astro.glob()を使う方法
これらを使うことで frontmatter から情報を得られて、frontmatter の情報を元にルーティングを分けたり、タグによるフィルターや日時によるソートが簡単に行えます。
しかしそれらを esa のデフォルトの frontmatter だけで行うのは少し難しいです。
そこで任意の frontmatter をつけた上でコミットする方法を検討しました。
esa の webhook を受け取る API を作る
esa の webhook を受け取るための API はなんでもいいのですが、デプロイの利便さとログの見やすさから CloudflareWorkers + Hono を採用しました。
Hono のエンドポイントを作成する
esa の Generic webhook のデータ形式
Generic webhook では以下のドキュメントに従ってデータが送られてきます
https://docs.esa.io/posts/37
TSの型にするとこのようになる
frontmatter を追加する
任意のfrontmatterを追加するためには esa の post の中に何らかの方法で内容を記述しなければなりません
これにマークダウンで本文を記述する前にymlのコードブロックを用意してその中に frontmatter に追加したいいくつかの要素を入れることで対応しました
形式としては以下のようになります
````md title=”.`md”