Open3

webアプリのリリースフロー自動化

yoonchul kohyoonchul koh

git flowで管理しているプロダクトのリリースフローを自動化したい。

筆者はiOSアプリのリリース自動化は経験があるが、Webアプリでは無い。
デファクトがあるならなるべくそれに寄せたいところ。

現状の開発からリリースまでの流れ

  1. 開発は develop から feature ブランチを切る。
  2. 開発したら PR を出してレビュー依頼。
  3. Approve されたら develop ブランチにマージ。GitHub Actions で開発環境にデプロイされる。
  4. リリースのタイミングで、 develop から release(eg. release/v1.0.1) ブランチを切る。
  5. releaseブランチをステージング環境にデプロイ(GitHub Actions を手動実行)して確認する。
  6. ステージング環境で問題なかったら、 release ブランチを main ブランチにマージしてプロダクション環境にデプロイする。
  7. main ブランチでタグを切って push。GitHub の releases ページを作成する。
  8. release ブランチで fix したものがあれば、main -> develop にPR出してマージする。

この手順の中で、手作業が多いので自動化したい。

手作業している内容

  • release ブランチの作成と push 。バージョン(セマンティックバージョン)を自分で決める必要がある。
  • ステージング環境へのデプロイ。GitHub Actions 上で、フロントエンドとバックエンドのデプロイを手動実行。
  • main ブランチでバージョンタグを切って、push。
  • GitHub の releases ページ作成。リリースのノートの記述。
  • main -> develop マージPR作成。
yoonchul kohyoonchul koh

リリース自動化に関する情報収集

https://zenn.dev/kounoike/articles/20220211-easy-generate-release-notes

release-drafter という Github Actions で、半自動的にリリースノートを作成。
これを使うことで、バージョン番号のタグがつき、GitHub Releases にリリースを作成できる。
ただ、 GtiHub Flow を想定してるっぽい?main ブランチと feature ブランチでの開発。

https://qiita.com/shun198/items/176037432f7efc8fde26
こちらはリリースブランチを main ブランチにマージしたときだけ動かすパターン。
ただし、当然ながら feature ブランチをマージしたタイミングで、今どこまで変更入るんだっけ?は確認できない。

https://blog.kengo-toda.jp/entry/2022/02/17/193427
自動化について、5つほど方法を紹介している。

https://tech.classi.jp/entry/2023/06/12/100000
Release Please という Google 製ツールの紹介。
良さそうではあるが、 main ブランチを開発ブランチとしていて、どこにリリースPRをマージするのか読み取れなかった。。
develop で開発して main にマージと考えれば良いのかも?

https://note.com/hamchance/n/n97c551bab985
全体の流れとしてはやりたいことに一番近いかもしれない。
ただ、それぞれの実際の自動化手法などは記載されていない。

yoonchul kohyoonchul koh

まとめるとこんな流れが良いかも。

  1. develop から release ブランチを切って、release ブランチをステージングにデプロイする。
  2. そのタイミングで、 release ブランチ → main ブランチへのリリースPRを作る。そのPRにはリリースする feature PR 一覧が載っている。
  3. main にマージしたら本番にデプロイされ、GitHub Releases が draft で自動生成される。
  4. 確認して Publish release して完了。