hono(bun)をcloudflare workersにGitHub actions ci/cdで自動デプロイ
今回作成したリポジトリはこちらです
bunを入れる
homebrewを使っているのでbrewコマンドで入れました
$ brew install bun
Hono環境構築
手順はこのページの通り
bunで入れます
$ bunx create-hono hono-workers
dependenciesをinstall
$ cd hono-workers
$ bun i
Githubにこのリポジトリを作成しておいてください
CLI経由で一度デプロイ
おそらくやらなくてもデプロイできると思いますが、私は先にCLI経由でデプロイしたので書きます
といってもコマンドを打つだけです
$ bun run deploy
公開されているか確認しておいてください。
CloudflareのAPI_TOKEN発行
GitHub actionsでcloudflare workersにデプロイする際に必要なAPI_TOKENを取得します
この記事を参考にしました
Cloudflare > My Profile > API Tokens > Create Token
に行きます
Edit Cloudflare Workers
のuse template
ボタンを押します
権限・Roleなどを選択し生成します
Githubの環境変数に登録
Github actionsの設定ファイルに先ほど生成したAPI_TOKENを使用するのですが、ベタ書きは危ないのでリポジトリの環境変数として保存します
登録するとGithub actionsのymlファイルで`secrets.HOGEHOGEのような形で使用できます
Your Repository > Settings > Secrets and variables > Actions > New Repository secret
に登録します
名前はなんでもいいですが、github actionsの設定ファイルで使用するのでわかりやすいCLOUDFLARE_API_TOKEN
などがいいんじゃないでしょうか
Github actionsの設定
pushやpr作成時などをトリガーにデプロイする処理を書いていきます
詳細は以下の記事が最新でわかりやすく書かれているので、参考にしました
Rootディレクトリに.github/workflows
ディレクトリを作成してください
アクションを指定するymlファイルを書いていきます
名前はなんでもいいですが、deploy.yml
ファイルを.github/workflows
下に作成します
最終的な中身は以下のようになります
name: Deploy
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
name: Deploy
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Bun
uses: oven-sh/setup-bun@v1
- name: Install dependencies
run: bun install
- name: Deploy
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
少しずつ解説していきます
name: Deploy
1行目のname
はアクションの名前です
Your Repository > Actions
ページのサイドバーに表示される名前になります
今回はデプロイするアクションなのでDeploy
にしています
on:
push:
branches:
- main
これはこのアクションが発火されるタイミングを書いています
この設定では、「main
ブランチにプッシュされた時」にこのactionが走ります
pr作成時など様々設定できます
jobs:
deploy:
runs-on: ubuntu-latest
name: Deploy
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Bun
uses: oven-sh/setup-bun@v1
- name: Install dependencies
run: bun install
- name: Deploy
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
今回は一つのジョブ(実行環境?)しか登録していませんが、jobs
には複数のジョブを登録できます
deploy:
の部分はジョブの名前です。自由につけられます。テストなどをやるならジョブを増やしてtest
やらlint
やらやってみたらいいと思います。
Actions画面ではこの名前ではなく、ジョブ内のname:
が表示されるみたいです(多分)
runs-on
はジョブを実行するOS(ランナー)を指定するコマンドです
詳しくないのですが、web開発ではubuntu
が多いようです
ややこしいのですが、ジョブの中のname: Deploy
はJobs
の中の一つのJob
の名前です。なんでもいいです
steps:
の中は順に実行されます。
ジョブ詳細画面でname:
に設定された処理ごとにまとまります
- name: Checkout
uses: actions/checkout@v4
uses
コマンドでは人が作った処理を使うことができるので借ります
このactions/checkout@v4
が何をしているかは、この記事を読んでみてください
Github actionsに関する多くの記事は、actions/checkout@v3
とバージョンが3になっているものが多いですが、github actionsがNode@v16
に対応しなくなるとのことなので、Node@v20
に対応しているバージョン4を使いましょう
- name: Setup Bun
uses: oven-sh/setup-bun@v1
今回はbunを使うので、そのセットアップを行います
Download, install, and setup Bun in GitHub Actions.
- name: Install dependencies
run: bun install
actionの実行環境内でライブラリなどのインストールをします
- name: Deploy
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
いよいよデプロイを実行する処理です。
cloudflare/wrangler-action@v3
はcloudflareが提供している簡単にデプロイするためのアクションです。借ります
先ほど設定したCLOUDFLARE_API_TOKEN
はここで使います
Wranglerの設定をする
このままでは、cloudflareが、どのアプリに対してデプロイしているのか、どのファイルをエントリーポイントとしてみればいいのかわからないので、wrangler.toml
に設定を書いていきます
wrangler.toml
自体はすでにあると思います
wrangler.toml
を.gitognore
から削除してください
まず、bunx create-hono
した時点では.gitignore
にwrangler.toml
が書かれてますが、github actionsで参照するので.gitignore
から削除しましょう
ただ、wrangler.toml
がリモートリポジトリにpushされるので中身には注意してください。適宜envファイルに書くなどしてください
エントリーポイントを追加する
wrangler.toml
にエントリーポイント、実行ファイル?を指定します
初期設定のpackage.json
のdeploy
コマンドに、wrangler deploy --minify src/index.ts
と書かれていると思います
初期設定ではsrc/index.ts
がエントリーポイントなので、これをwrangler.toml
に追加します
name = "hono-workers"
compatibility_date = "2023-12-01"
+ main = "src/index.ts"
これで全て設定が完了です
main
ブランチにpushしたらデプロイされると思います
おつかれさまでした
Discussion