---
# System prepended metadata

title: 開発フローを考える

---

# 開発フローを考える

機密情報を書かないでください

## モチベーション

- リリースノートを自動生成したい
- なるべく手動オペレーションを少なくしたい
  - 属人性を減らしたいな

---

- ひっそりリリースされない・されるをなくしたい

## 使ったツール

- [x-motemen/git-pr-release](https://github.com/x-motemen/git-pr-release)
- [softprops/action-gh-release](https://github.com/softprops/action-gh-release)
- [endre-spotlab/fast-forward-js-action](https://github.com/endre-spotlab/fast-forward-js-action)

## 設定したActions

- https://github.com/sho918/workflow-sample/tree/main/.github/workflows

## 要件

- リリースは週1で行う
- リリース予定のPRをリストで出したい

## 希望

- PRのマージは普通のマージで行きたい (`Create a merge commit`)
- 意味のある単位でコミットを分けてほしい (普通のマージを行いたいため)
- PRのタイトルをわかりやすく記述する (タイトルがそのままリリースノートに記載されるため)
- リリースPRで検証環境を立ち上げたい

## ブランチ戦略

- `master`: メインブランチ
- `production`: 本番ブランチ
- `feature/XX-XXX`: 各チケット毎の開発ブランチ
- `hotfix/XX-XXX`: バグ対応ブランチ

## ルール

- 各ブランチは`master`から切る

## 開発フロー

### 機能開発 (`feature/XX-XXX`)

- `master`からチェックアウト
- 開発後に`master`へリベース
- リモートに上げて`master`に向けたPRを作成
- PRマージ後はブランチを削除

```bash
# 開発ブランチ作成
$ git switch master
$ git pull
$ git switch -c feature/CRM-XX

# 開発中...
$ git commit -am "blabla"

# `master`にリベース
$ git switch master
$ git pull
$ git switch -
$ git rebase master

# リモートに上げる
$ git push -u origin feature/CRM-XX
```

### バグ対応 (`hotfix/XX-XXX`)

- `master`からチェックアウト
- 修正後に`master`へリベース
- リモートに上げて`master`に向けたPRを作成
- ~~マージ後にブランチを削除しない~~
- ~~動作確認後に`production`に向けたPRを作成~~
- あとはリリース作業と同様の流れ (`master`と`production`に差分がある可能性があるため)

---

- `master`と`production`に差分があっても問題無さそう

### リリース作業 (`master` -> `production`)

- リリース用PRをActionsから作成する
- PR作成と同時にテスト環境を立ち上げる (バックエンド、フロントともに)
- PRに`master`と`production`間の差分PRがリリース項目として表示される
- マージするとタグ打ちとリリースノート作成を行う

#### リリース環境でバグが見つかった場合

- 機能開発と同様の作業を行い、`master`ブランチに修正を入れる
- リリース用PR作成Actionsを再実行するとPRの中身が更新される
