ForkでGitflowする
Gitを使った開発フローには「GitFlow」や「トランクベース開発」、「GitHubフロー」などがあるそうです。
Gitflow とは、元来は Git ブランチを管理するための破壊的で斬新な戦略のレガシー Git ワークフローです。Gitflow の需要は落ち込み、トランク ベースのワークフローが利用されるようになっています。現在ではこれが最新の継続的なソフトウェア開発のベスト プラクティスおよび DevOps プラクティスと見なされています。Gitflow はまた、CI/CD と使用することも困難な場合があります。この投稿では、歴史的な目的で Gitflow の詳細をご説明します。
最初に普及した Gitflow は、特定の個人だけがメイン コードへの変更を承認できる、非常に厳格な開発モデルです。そのため、コードの品質が維持されてバグの数が最小限に抑えられます。トランク ベース開発は、すべての開発者がメイン コードにアクセスできる、よりオープンなモデルです。そのため、チームはすばやく反復処理を実行して CI/CD を実現できます。
GitHub フローは、軽量のブランチ ベースのワークフローです。 GitHub フローは、開発者だけでなくすべてのユーザーに役立ちます。
各々の特徴を一覧にすると以下です。
| 特徴 | GitFlow | GitHub Flow | トランクベース |
|---|---|---|---|
| 複雑さ | 高い | 低い | 非常に低い |
| リリースの頻度 | 数週間〜数ヶ月に一度 | 毎日〜週に数回 | 1日に何度も |
| 主な用途 | 堅牢なパッケージソフト | Webサービス、SaaS | 高速な継続的デプロイ |
これらの違いは赤帽エンジニアブログさんのトランクベース開発についてで分かりやすく違いが説明されています。今回はGitクライアントであるForkを使ってGitflowを試してみました。尚、「ひとり開発」を前提にしています。
検証環境¶
| 対象 | バージョン |
|---|---|
| Fork | 2.63.2 |
GitHubでリポジトリを作成する¶
今回はGitHub上で「example1」というリポジトリを作成し、このリポジトリに対してGitflowを試します。GitHub上でNewをクリックします。

リポジトリ名を入力し、「Create repository」をクリックします。

空のリポジトリが作成されました。

Cloneする¶
リポジトリをCloneします。Forkのメニューから「Accounts」をクリックします。

先程作成した「example1」というリポジトリを探します。リポジトリが見つかったら右側のアイコンをクリックします。

「Clone」をクリックします。

Cloneされました。ユーザ情報を変更する場合は画面左上、リポジトリ名の右側にあるアイコンをクリックします。

必要であれば「Use global git credentials」のチェックを外し、ユーザ情報を入力して「Close」をクリックします。

Gitflowで初期化する¶
リポジトリをGitflowで初期化します。Forkのメニューから「Repository → Git Flow → Initialize Git Flow」をクリックします。

「Initialize Git Flow」をクリックします。自動的にmaster(main)/developブランチが作成されます。

masterブランチをpushする¶
Fork上でGitflowに従った開発を行う際、リモート側(GitHub)にもブランチがpushされていないと不整合状態になる可能性がある為、先にブランチをpushしておきます。まず、masterブランチをcheckoutします。masterブランチを右クリックし、「Checkout master」をクリックします。

画面上部の「Push」をクリックします。

「Push」をクリックします。

GitHub上で確認するとmasterブランチがpushされたことが分かります。

developrブランチをpushする¶
同様にdeveloprブランチをpushします。developrブランチを右クリックし、「Checkout develop」をクリックします。

画面上部の「Push」をクリックします。

「Push」をクリックします。

最初のfeatureブランチ¶
作成する¶
最初のfeatureブランチを作成します。developブランチをクリックし「Git Flow → Start Feature...」をクリックします。

featureブランチ名を入力して「Start Feature」をクリックします。

これでfeatureブランチが作成されました。

変更する¶
最初のfeatureブランチにソースコードを登録し、finishします。リポジトリ内に以下の内容でmain.pyというファイルを新規作成します。
| main.py | |
|---|---|
1 | |
Fork上で該当ファイルを選択して「Stage」をクリックし、変更内容をステージングします。

commitメッセージを入力したら「Commit 1 File and Push」をクリックします。

これでcommitされました。

finishする¶
このfeatureブランチをfinishします。featureブランチを右クリックし、「Git Flow → Finish Feature...」をクリックします。

「Finish Feature」をクリックします。

featureブランチがfinishされ、developブランチにマージされました。

2つ目のfeatureブランチ¶
作成する¶
同様に2つ目のfeatureブランチを作成します。developブランチをクリックし「Git Flow → Start Feature...」をクリックします。

featureブランチ名を入力して「Start Feature」をクリックします。

これでfeatureブランチが作成されました。

変更する¶
2つ目のfeatureブランチでソースコードを修正(追加)し、finishします。リポジトリ内のmain.pyへ2行目として以下を追記します。
| main.py | |
|---|---|
1 2 | |
Fork上で該当ファイルを選択して「Stage」をクリックし、変更内容をステージングします。

commitメッセージを入力したら「Commit 1 File and Push」をクリックします。

これでcommitされました。

finishする¶
このfeatureブランチをfinishします。featureブランチを右クリックし、「Git Flow → Finish Feature...」をクリックします。

「Finish Feature」をクリックします。

featureブランチがfinishされ、developブランチにマージされました。

releaseブランチ¶
作成する¶
これまでの内容をリリースします。developブランチをクリックし「Git Flow → Start Release...」をクリックします。

リリース名を入力して「Start Release」をクリックします。

リリースブランチが作成されました。

変更する¶
リリースブランチでmain.pyの1行目にバージョン情報の出力を追記してみました。
| main.py | |
|---|---|
1 2 3 | |
Fork上で該当ファイルを選択して「Stage」をクリックし、変更内容をステージングします。

commitメッセージを入力したら「Commit 1 File and Push」をクリックします。

これでcommitされました。

finishする¶
このreleaseブランチをfinishします。リリースブランチを右クリックし、「Git Flow → Finish Release...」をクリックします。

「Finish Release」をクリックします。

releaseブランチがfinishされ、developブランチにマージされました。

リリースメッセージを入力したら「Finish Release」をクリックします。

これでreleaseブランチがfinishされました。

developブランチをpushする¶
releaseブランチを取り込んだdevelopブランチをリモートへpushします。developブランチをcheckoutした状態で画面上部の「Push」をクリックします。

「Push」をクリックします。

これでdevelopブランチがリモートへpushされました。

masterブランチをpushする¶
同様にmasterブランチもリモートへpushします。masterブランチをcheckoutします。
asterブランチをcheckoutした状態で画面上部の「Push」をクリックします。

画面上部の「Push」をクリックします。

「Push」をクリックします。

これでmasterブランチがリモートへpushされました。

GitHub上でTagsを確認するとreleaseした内容が登録されています。
