Skip to content

ForkでGitflowする

Gitを使った開発フローには「GitFlow」や「トランクベース開発」、「GitHubフロー」などがあるそうです。

Gitflow ワークフロー

Gitflow とは、元来は Git ブランチを管理するための破壊的で斬新な戦略のレガシー Git ワークフローです。Gitflow の需要は落ち込み、トランク ベースのワークフローが利用されるようになっています。現在ではこれが最新の継続的なソフトウェア開発のベスト プラクティスおよび DevOps プラクティスと見なされています。Gitflow はまた、CI/CD と使用することも困難な場合があります。この投稿では、歴史的な目的で Gitflow の詳細をご説明します。

トランク ベース開発

最初に普及した Gitflow は、特定の個人だけがメイン コードへの変更を承認できる、非常に厳格な開発モデルです。そのため、コードの品質が維持されてバグの数が最小限に抑えられます。トランク ベース開発は、すべての開発者がメイン コードにアクセスできる、よりオープンなモデルです。そのため、チームはすばやく反復処理を実行して CI/CD を実現できます。

GitHub フロー

GitHub フローは、軽量のブランチ ベースのワークフローです。 GitHub フローは、開発者だけでなくすべてのユーザーに役立ちます。

各々の特徴を一覧にすると以下です。

特徴 GitFlow GitHub Flow トランクベース
複雑さ 高い 低い 非常に低い
リリースの頻度 数週間〜数ヶ月に一度 毎日〜週に数回 1日に何度も
主な用途 堅牢なパッケージソフト Webサービス、SaaS 高速な継続的デプロイ

これらの違いは赤帽エンジニアブログさんのトランクベース開発についてで分かりやすく違いが説明されています。今回はGitクライアントであるForkを使ってGitflowを試してみました。尚、「ひとり開発」を前提にしています。

検証環境

対象 バージョン
Fork 2.63.2

GitHubでリポジトリを作成する

今回はGitHub上で「example1」というリポジトリを作成し、このリポジトリに対してGitflowを試します。GitHub上でNewをクリックします。

image

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

image

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

image

Cloneする

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

image

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

image

Clone」をクリックします。

image

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

image

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

image

Gitflowで初期化する

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

image

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

image

masterブランチをpushする

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

image

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

image

Push」をクリックします。

image

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

image

developrブランチをpushする

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

image

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

image

Push」をクリックします。

image

最初のfeatureブランチ

作成する

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

image

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

image

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

image

変更する

最初のfeatureブランチにソースコードを登録し、finishします。リポジトリ内に以下の内容でmain.pyというファイルを新規作成します。

main.py
1
print("Hello, Alice!")

Fork上で該当ファイルを選択して「Stage」をクリックし、変更内容をステージングします。

image

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

image

これでcommitされました。

image

finishする

このfeatureブランチをfinishします。featureブランチを右クリックし、「Git FlowFinish Feature...」をクリックします。

image

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

image

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

image

2つ目のfeatureブランチ

作成する

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

image

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

image

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

image

変更する

2つ目のfeatureブランチでソースコードを修正(追加)し、finishします。リポジトリ内のmain.pyへ2行目として以下を追記します。

main.py
1
2
print("Hello, Alice!")
print("Hello, Bob!")

Fork上で該当ファイルを選択して「Stage」をクリックし、変更内容をステージングします。

image

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

image

これでcommitされました。

image

finishする

このfeatureブランチをfinishします。featureブランチを右クリックし、「Git FlowFinish Feature...」をクリックします。

image

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

image

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

image

releaseブランチ

作成する

これまでの内容をリリースします。developブランチをクリックし「Git FlowStart Release...」をクリックします。

image

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

image

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

image

変更する

リリースブランチでmain.pyの1行目にバージョン情報の出力を追記してみました。

main.py
1
2
3
print("Version 1.0.0")
print("Hello, Alice!")
print("Hello, Bob!")

Fork上で該当ファイルを選択して「Stage」をクリックし、変更内容をステージングします。

image

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

image

これでcommitされました。

image

finishする

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

image

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

image

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

image

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

image

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

image

developブランチをpushする

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

image

Push」をクリックします。

image

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

image

masterブランチをpushする

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

image

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

image

Push」をクリックします。

image

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

image

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

image