GitHub Actionsで一定時間ごとにコミット&プッシュを繰り返す→Vercelで自動デプロイ
最近Next.jsのチュートリアルを触り、初めてVercelにデプロイしてみたのですが、
GitHubにプッシュしたタイミングで自動でデプロイされる仕組みに感動しました。
技術どうこう語る方がいますが、たぶんあれは魔法だと思います。
Next.jsの学習開始とともに、ISRの概念についても学んでいたのですが、
もし、仮に強整合性を求められず単純に一定時間ごとにSSGしたいだけの場合、
「プッシュでデプロイしてくれるなら、ISRでなくともGitHub Actionsで一定時間ごとにプッシュすればいけるのでは?」と思い、今回実験してみました。
※ 見ての通り興味本位の記事です
※ 最近Next.jsを学び始めたばかりなのでこのあたりのベストプラクティスはわかりません
※ Next.jsチュートリアルで作成したリポジトリをそのまま使っています。nextjs-blog
ってやつです
シェルスクリプトを作る
一定時間ごとにコミット&プッシュを繰り返させると言っても、何の変更もなければコミットしようがないので、
github-action.log
というログファイルを作り、ただそこに現在日時を追記することにしました。
#!/bin/bash
echo `date` >> github-action.log
cat github-action.log
exit 0
GitHub Actionsを設定する
5分ごとに動くようcron
でスケジュールしてみます。
name: write-to-log
on:
schedule:
- cron: '*/5 * * * *'
jobs:
write-to-log:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@main
- name: write-to-log
run: |
bash write-to-log.sh
- name: git commit
run: |
git remote set-url origin https://github-actions:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}
git config --global user.email "***@***.com"
git config --global user.name "github workflow"
git add .
git commit -m 'write-to-log'
git push origin main
動かしてみる
GitHub Actionsの仕様でしょうか、5分ごとで設定していたはずなのですが、
10〜20分ぐらいの間で繰り返し実行されていました。まぁ動いたのでOKです。
※ 実験をしてからこの記事を書くまでに6時間ほど空いてしまったので6 hors ago
が並んでいる写真になってしまいましたが、実際は10〜20分おきに実行されていました。
ということで実験成功です。
最後に
SSG
やJAMstack
という概念を最近知ったので、Next.jsを学習しながら感動する日々を過ごしています。
去年会社でFirebaseを使ったアプリを作った際、公開範囲を広げた(使う人を増やした)タイミングで無料の50,000リクエストをオーバーしてしまったため有料版に切り替えるということがあったのですが、
そのアプリも強整合性を求めない(数時間ごとに更新されていればOKな)ものなので、
クライアントからフェッチさせるのではなく今回みたいな設計にすれば無料のままいけたりするのかな、と思ったりしています。
とはいえこのあたりの知識がまだ全然足りないので、引き続き学習を進めます。
「そういう要件なら◯○でやったほうがいいよ」みたいなコメントがあればとても嬉しいです。
Author And Source
この問題について(GitHub Actionsで一定時間ごとにコミット&プッシュを繰り返す→Vercelで自動デプロイ), 我々は、より多くの情報をここで見つけました https://qiita.com/centerfield77/items/a5a47f0004a93d3ffa04著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .