NetlifyとHerokuで予約投稿機能を実現する

 · 3 min read

こんにちは。
前回の記事にてブログをNetlify+Middlemanに置き換えた、と書きましたが、
静的サイトジェネレータを利用したときの弱点の1つである、予約投稿する機能をNetlifyのBuildhookと、Heroku schedulerで再現してみました。

要件

  • Middleman自体が未来の日付を指定すると自動で記事を非公開にしてくれるので、それに頼る
    • ※記事の表示/非表示の切り替えがビルドのタイミング以外(コミットが必要なフラグなど)に依存する場合、今回の記事は要件不足です。あしからず
  • 無料
  • 可能な限り細かい頻度でビルドできること(1日1回とかだと少ない)
  • Gitのログを汚さないこと

Netlify自体が自動ビルド+デプロイの機構を備えているため、masterブランチにpushすれば勝手にビルドされます。
ただ、空コミットを作ったりしてGitのログが汚れていくのは嫌だったので、そういった副作用なしに、無料でビルドできる方法を探りました

NetlifyのBuild hookとは

Netlifyが提供する、ビルドを叩くためのURLなようです
管理画面のSettingsから設定ができます。

curl -X POST -d '{"files":{}}' ビルドフックのURL

でビルドを叩くことができました。
filesのキーがないと、ビルド受付待ちのまま固まってしまったので、この方法でいいのかどうかはわかりませんが、ひとまず動いてるのでよしとします。

というわけで、単にcurlコマンドを1つ叩けばよいだけなので、選択肢はかなりたくさん有ると思います。

不採用:Travis CIのcron機能

無料なんですが、最短でも1d/1回しかビルドできないので、頻度が足りず断念

不採用:AWS Lambdaのスケジューリング機能

ほぼ無みたいなものですが、完全に無料ではないので見送り

採用:Heroku scheduler

結局使い慣れたHerokuを採用しました。
最短で10分に1回ビルドできます。無料です。簡単です。

NetlifyのBuild hookとHeroku schedulerで予約投稿する

わざわざボタン化するほど自動化できてないのですが、一応Herokuのデプロイボタン作成しました。
詳しい方法もREADMEに書いてあります。ぜひお試しください。

Leko/Netlify-builder

NetlifyHeroku
© 2012-2021 Leko