@@ -35,14 +35,16 @@ meta:
3535
3636本規約で想定する、ブランチの種類とその役割を説明する。
3737
38- | ブランチ名称 | 役割 | ライフサイクル | 派生元ブランチ | 命名規則 | 直プッシュ可否 |
39- | -----------| ------------------------------| ---------| ------------------| ---------------------------------------------------| ---------|
40- | ` main ` | プロダクション環境と一致させるブランチ | 永続的 | - | ` main ` 固定 | ✕ |
41- | ` feature ` | 特定機能の追加/変更 | 短命 | ` main ` /` develop ` | ` feature/${任意名称} ` : 詳細は「featureブランチ」節を参照 | △ |
42- | ` develop ` | 開発の大元となるブランチ | 永続的 | ` main ` | ` develop ` 固定。複数必要な場合は ` develop2 ` と連番で区別する | ✕ |
43- | ` release ` | リリース準備作業の実施 | 短命 | ` develop ` | ` release/${yyyymmdd} ` や ` release/${リリースバージョン} ` など | ✕ |
44- | ` hotfix ` | mainブランチに対する即時修正 | 短命 | ` main ` | ` hotfix/${任意名称} ` : featureブランチに準じる | ◯ |
45- | ` topic ` | featureブランチにて複数人開発をする場合のブランチ | 短命 | ` feature ` | ` topic/${任意名称} ` : featureブランチに準じる | ◯ |
38+ | ブランチ名称 | 役割 | ライフサイクル | 派生元ブランチ | 命名規則 | 直プッシュ |
39+ | -----------| -------------------| ---------| ------------------| ---------------------------------------------------| ---------|
40+ | ` main ` | プロダクション環境へのデプロイ用途 | 永続的 | - | ` main ` 固定 | ❌️ |
41+ | ` feature ` | 特定機能の追加/変更 | 短命 | ` main ` /` develop ` | ` feature/${任意名称} ` : 詳細は[ featureブランチ] ( #featureブランチ ) | ✅️※1 |
42+ | ` develop ` | 開発の大元 | 永続的 | ` main ` | ` develop ` 固定。複数必要な場合は ` develop2 ` と連番にする | ❌️ |
43+ | ` release ` | リリース作業用途 | 短命 | ` develop ` | ` release/${yyyymmdd} ` や ` release/${リリースバージョン} ` など | ❌️ |
44+ | ` hotfix ` | mainブランチに対する即時修正 | 短命 | ` main ` | ` hotfix/${任意名称} ` : featureブランチに準じる | ✅️ |
45+ | ` topic ` | 複数人での機能開発用と | 短命 | ` feature ` | ` topic/${任意名称} ` : featureブランチに準じる | ✅️ |
46+
47+ ※1: topicブランチを利用する場合は、派生させたfeatureブランチへの直プッシュはNGとなる
4648
4749## mainブランチ
4850
@@ -117,17 +119,13 @@ featureブランチで実現する機能を複数人で開発する場合に使
117119- できるかぎりシンプルなモデルを選択し、運用コストを下げる
118120- プロジェクトのフェーズや体制に応じて、変更を許容する
119121
120- 現実的に利用する可能性が高いブランチの運用パターン3つ示す。
121-
122- 選定を記載順で導入を検討する。
122+ 現実的に利用する可能性が高いブランチの運用パターンを、運用コストが低い順に3つ示す。
123123
124- - GitHub Flow → Lite GitLab Flow → GitLab Flow
125-
126- | 名称 | 利用ブランチ | 備考 | 運用コスト | 使い所 |
127- | ------------------| -------------------------------------------------------------------------| ---------------------------------------------------------------------------------------------------------------| -------| -----------------------------------------------------------------------|
128- | GitHub Flow | ` main ` <br > ` feature ` | 最小のブランチ管理パターンで、開発人数が少なく、検証作業は全員で行う場合に有効。<br >マージ毎にプロダクション環境へデプロイする。 | 低 | ・個人開発<br >・プロジェクト初期フェーズで断面管理を厳密に行わない場合 |
129- | Lite GitLab Flow | ` main ` <br >` develop ` <br >` feature ` <br >` topic ` <br > ` hotfix ` | GitHub Flowに` develop ` ブランチを追加するパターン(特定の呼称はなくLite GitLab FLowと命名)。<br >` main ` ブランチをリリースブランチとし、開発ソースコードとは分ける。 | 低 | ・稼働済みのプロダクトなど、一定品質を保証する必要がある場合<br >・開発作業とリリース作業が並行しないチーム構成である場合 |
130- | GitLab Flow | ` main ` <br >` develop ` <br >` release ` <br >` feature ` <br >` topic ` <br > ` hotfix ` | GitLab Flowでは` main ` ブランチを` production ` ブランチ、` release ` ブランチとを` pre production ` ブランチと呼称するが、本規約では` main ` /` release ` とする。 | 中 | ・リリース作業と開発作業が並行して行われる場合<br >・断面を指定して複数テスト環境にデプロイしたい場合 |
124+ | 名称 | 利用ブランチ | デフォルトブランチ | リリース作業 | 使い所 | 備考 |
125+ | ------------------| -------------------------------------------------------------------------| -----------| -----------| --------------------------------------------------------| --------------------------------------------------------------------------------------------------------------|
126+ | GitHub Flow | ` main ` <br > ` feature ` | ` main ` | ` main ` | ・開発人数が少なく、検証作業を全員で行う場合 | マージ毎にプロダクション環境へデプロイする。 |
127+ | Lite GitLab Flow | ` main ` <br >` develop ` <br >` feature ` <br >` topic ` <br > ` hotfix ` | ` develop ` | ` develop ` | ・稼働済みのプロダクトなど、一定品質を保証する必要がある場合<br >・開発作業とリリース作業が並行しない場合 | GitHub Flowに` develop ` ブランチを追加するパターンで、特定の呼称はないためLite GitLab FLowと命名する |
128+ | GitLab Flow | ` main ` <br >` develop ` <br >` release ` <br >` feature ` <br >` topic ` <br > ` hotfix ` | ` develop ` | ` release ` | ・リリース作業と開発作業が並行して行われる場合<br >・断面を指定して複数テスト環境にデプロイしたい場合 | GitLab Flowでは` main ` ブランチを` production ` ブランチ、` release ` ブランチとを` pre production ` ブランチと呼称するが、本規約では` main ` /` release ` とする |
131129
132130## 変則的なパターン
133131
@@ -320,7 +318,75 @@ Gitにはタグ機能があり、リリースポイントとしてタグを作
320318
321319これにより、リリースしたアプリケーションやライブラリに何か不具合があれば、切り戻しや原因追求が容易になる利点がある。
322320
323- タグを利用するうえでの運用ルール・命名規則などは[ タグ規則] ( git_tag.md ) を参考にする。
321+ ## タグの運用ルール
322+
323+ - リリースごとに新しいバージョンを示したタグを発行する
324+ - (推奨) GitHubなどの画面経由でタグを作成する
325+ - mainブランチにてタグを作成する
326+ - 入力間違えなどのケースを除き、一度タグをつけた後は削除しない
327+ - 後述する「タグの命名規則」に従う
328+
329+ ![ GitHub画面でbackend/v1.6.0のタグを作成する] ( img/create_new_tag.png )
330+
331+ 何かしらの理由で、コマンドラインからタグを作成する必要がある場合は、以下に注意する。画面経由・コマンドライン経由でのタグ作成は混ぜないようにし、運用手順は統一する。
332+
333+ - 軽量 (lightweight) 版ではなく、注釈付き (annotated) 版のタグを利用する
334+
335+ ``` sh
336+ # OK(注釈付きタグを利用する)
337+ $ git tag " v1.0.4" -m " v1.0.4 🐛Fix item api log"
338+
339+ # NG(軽量タグは利用しない)
340+ $ git tag " v1.0.4"
341+ ```
342+
343+ ## タグの命名規則
344+
345+ - ` v1.2.4 ` などの [ セマンティックバージョニング] ( https://semver.org/lang/ja/ ) を基本とする
346+ - モノリポの場合は ` frontend/v1.0.0 ` 、` backend/v2.0.1 ` など領域ごとにプレフィックスを付与する形式を取る
347+ - プレフィックスにすることで、タグをリスト表示した場合に視認性を上げることができる
348+
349+ 命名に従うと、次のようなコマンドで絞り込みで表示できる。
350+
351+ ``` sh
352+ $ git tag -l --sort=-version:refname " frontend/v*"
353+ frontend/v2.0.0
354+ frontend/v1.3.0
355+ frontend/v1.2.0
356+ frontend/v1.1.0
357+ ...
358+ ```
359+
360+ また、Gitクライアントによっては ` / ` を使うことでフォルダのように階層表示ができるため、プレフィックスの区切り文字は ` - ` ハイフンではなく、スラッシュとする。
361+
362+ ## タグメッセージの規則
363+
364+ - (推奨) GitHubを利用中の場合、「[ Generate release notes] ( https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes ) 」を用いて、タイトルや本文を自動生成する
365+ - フロントエンド・バックエンドで整合性を保っているのであれば、メモ目的でバージョンを記載する運用を推奨とする
366+ - 実用的な利用用途が思いつかない場合は、開発者視点での楽しみリリースの大きなマイルストーンの名称など、チームの関心事を記入することを推奨とする
367+
368+ ![ create new tag] ( img/create_new_tag_title.png )
369+
370+ 何かしらの理由で、コマンドラインからタグを作成する必要がある場合は、GitHub利用時の規則に合わせて次のように作成する。
371+
372+ 入力例:
373+
374+ ``` sh
375+ # OK
376+ $ git tag -a backend/v1.8.0 -m " backend/v1.8.0"
377+ $ git tag -a backend/v1.9.0 -m " backend/v1.9.0 🚀Release with frontend-v3.0.1"
378+ $ git tag -a backend/v2.0.0 -m " backend/v2.0.0 ✨Android版アプリリリース対応"
379+
380+ # NG
381+ $ git tag -a backend/v3.0.0 -m " 🚀Release version v2.0.0"
382+ ```
383+
384+ ## バージョンアップ規則
385+
386+ - 開発しているプロダクトがライブラリの場合、セマンティックバージョニングに厳密に従う
387+ - 開発しているプロダクトがシステム(アプリケーション)の場合、その成熟度や初回リリースの区切りでバージョンアップを行うことを推奨する。適切なバージョンアップを行うことで視認性が上がり、運用負荷を下げることができる
388+ - 例1: 初回リリース、カットオーバーで ` v1.0.0 ` に上げる
389+ - 例2: 稼働後1年以上経過し、中規模以上の大きな機能アップデートがあったので、 ` v2.0.0 ` に上げる
324390
325391# ラベル規則
326392
0 commit comments