Vercelを使ってみた
Vercelというサービスが便利そうだったから試しに使ってみた。 読み方は「バーセル」らしい。
何が便利かって、GitHubにある記事をHTMLに変換した上で公開(ホスティング)してくれる! SSR (Server Side Generation) + ホスティングが自動で済む。 GitHubと連携しておけばPushなどをトリガーに動作してくれるので、GitHubに記事を置く仕組みさえ用意してしまえば記事として公開できる。
しかも、カスタムドメインまで無料。 CNAMEの設定をするだけ。
サービス構成がどんな感じに変わったかというと…。
- Circle CI → GitHub Actions
- Firebase → Vercel
- エディタ → Contentful
試した構成
Contentfulのエディタで記事を書き、GitHub Actionsで記事を生成 (Markdown) し、VercelでHTMLに変換して公開するという流れ。
Contentful
Contentfulはデータタイプを自由に決められるので、Hugoで必要になる項目を用意した。
- 日付
- タイトル
- URL
- 本文
- アイキャッチ画像URL
- カテゴリ
- タグ
これで記事を書く要素は揃ったので、執筆後にGitHubに通知をするための設定をする。
設定はメニューの Settings → Webhooks から行う。
Webhooks
| 項目 | 設定値 |
|---|---|
| Name | 適当に命名する。 |
| URL | POST https://api.github.com/repos/${GITHUB_ID}/${REPOSITORY_NAME}/dispatches |
| Triggers | Select specific triggering events を選択し、適当に設定。 |
| Filters | 必要に応じて。今回は master だけにした。 |
| Headers | 後述。 |
| Content type | application/json |
| Payload | Customize the webhook payload |
Headers
| 名称 | 値 |
|---|---|
| Accept | |
| Authorization | token XXXXXX... |
| User-Agent | ${GITHUB_ID} |
token は GitHub で Personal Access Token を設定しておく。
権限は repo だけあればよい。
https://docs.github.com/ja/free-pro-team@latest/github/authenticating-to-github/creating-a-personal-access-token
Payload
{
"event_type": "update contentful"
}
event_type の値はなんでもよい。
${GITHUB_ID} と ${REPOSITORY_NAME} はうまいこと置換してくれるわけではないので、自分で置き換える必要がある。
GitHub
GitHubに Hugo の基本構成を用意しておく。
Hugoの content ディレクトリにMarkdownを置いてHugoを実行するわけだけど、Markdownをどのように生成するか?
今回はContentful APIを叩いて、Markdownファイルを生成するように少し実装した。
GitHub Actionsで次の内容を実行している。
- Hugoの基本構成をチェックアウト (git clone)
- Markdown生成ツールをチェックアウト (git clone)
- ツールを実行してMarkdown生成 (git add)
- 記事をコミット (git push)
途中で git add しているので、記事に変更がないとここでエラーが発生する…が気にしない。
Vercel
VercelとGitHubを連携しておくことで、GitHubの git commit (前項4番) をトリガーにVercelが動作する。
余談
自分のマシンのエディタで記事を書き、 git push して、 Pull Request でマージして、あとはCIで Firebase に記事公開…という流れもよかったけど、もう少し楽をしたいので試してみた。
Headless CMSの感触を得るためにも。
GitHubにHugoの構成のままおいてあるので、いつでもこの構成をやめられるというのも気楽。