GitHubハンズオン 第3回 ～ブランチ運用法編～

# GitHubハンズオン 第3回 ～ブランチ運用法編～

本記事は、GitHubハンズオンの第3回の資料です！
過去の記事を読んでいることを前提としていますので、ご注意ください。


##### GitHubハンズオンシリーズ

- [GitHubハンズオン 第1回 〜個人開発編〜](https://qiita.com/segur/items/601277fbbe8cfa08678b)
- [GitHubハンズオン 第2回 〜共同開発編〜](https://qiita.com/segur/items/a3f7b9063829850391c5)
- GitHubハンズオン 第3回 ～ブランチ運用法編～ ← 本記事
- [GitHubハンズオン 第4回 ～いろいろ取り消し編～](https://qiita.com/segur/items/8ce6914af5578c5f4ce2)
- [GitHubハンズオン 第5回 ～無視リスト編～](https://qiita.com/segur/items/2de61acfa73ce1eceac9)
- [GitHubハンズオン 第6回 ～巨大ファイル編～](https://qiita.com/segur/items/347345a489a963641306)


# リポジトリの準備

[第1回ハンズオン](https://qiita.com/segur/items/601277fbbe8cfa08678b#%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E5%90%8D%E3%82%92%E8%A8%98%E5%85%A5%E3%81%99%E3%82%8B) で作成した **GitPractice** リポジトリを今回も使います！

もし、リポジトリを削除してしまった方は、再作成をお願いします！

Forkを開き、フェッチ＆チェックアウトして、mainブランチを最新にしてください。


# ブランチ運用法

ブランチの使い方には色んな流派がありますが、ここでは有名な **GitHub Flow** を紹介します！


## GitHub Flow

GitHubでは、数千人規模のプログラマーが、1つのリポジトリで共同開発することもよくあります。

そんな状況でも、混乱が発生しないように編み出されたブランチ運用法が、 **GitHub Flow** です。

以下のルールを守って、ブランチを運用します。


* mainブランチからtopicブランチを生やす。
* mainブランチは常にリリース可能な状態にしておく。
* topicブランチはこまめにプッシュする。


![image24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/8602b886-9c6c-02b0-eae9-8f27ed265ad6.png)

（厳密には、PullRequestを利用したコードレビューもGitHub Flowのルールに含まれますが、今回のハンズオンではPullRequestを扱いませんので、説明は省略いたします。）


## mainブランチからtopicブランチを生やす

何か作業をするときは、mainブランチからtopicブランチを生やします。
mainブランチ上で作業しないようにしましょう！
あくまで、mainブランチはtopicブランチをマージするときだけ進みます。


### topicブランチ命名例

topicブランチの名前は、なんのためのブランチなのか説明する内容にしておきましょう！

たとえば、 **ボタン機能を追加** した場合、以下のような命名案があります。

* topic/作業名
    * 例: **topic/add-button**
* 作業種別/作業名
    * 例: **feature/add-button**
    * ここでの作業種別とは、以下のようなものです。
        * feature : 機能開発
        * fix : バグ修正
* 作業者名/作業名
    * 例: **segur/add-button**
* 作業者名/課題番号/作業名
    * 例: **segur/123/add-button**
    * ここでの課題番号とは、課題管理ツール（GitHub Issue, JIRA等）で発行される番号のことです。

`/` と `-` の違いは後ほど説明します！
単語の区切りは `-` が一般的ですが、 `_` や大文字区切りでも、Gitは動作します。


## mainブランチは常にリリース可能な状態にしておく

他のメンバーが安心してmainブランチを利用するために、動作が不安定になるtopicブランチを、mainブランチにマージしてはいけません。

たとえば、実行するとエラーが発生する状態のtopicブランチをAさんが作ったとして、それをmainブランチにマージしてしまうと、Bさんがそのmainブランチを利用するときにエラーが発生してしまいます。

Bさんからすると、なぜエラーが発生するのかを調査する必要があり、ムダな時間をとられてしまいます。

動作が不安定なtopicブランチをmainブランチにマージしてはいけません。


![image20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/3b6bb25a-23bd-33f9-81b3-a50160ac552f.png)


* ✅: UnityAssetを導入し、動作確認せずに、topicブランチにコミットする。
* ❌: UnityAssetを導入し、動作確認せずに、topicブランチにコミットし、それをmainブランチにマージする。
* ✅: UnityAssetを導入し、topicブランチにコミットする。動作確認をしたところ、エラーが見つかったので、修正してから、mainブランチにマージする。


## topicブランチは定期的にPushする

チーム開発では、作業の共有が重要になります。

Aさんがtopicブランチを1週間に1回プッシュすれば、Bさんはその内容を1週間に1回確認できます。
Aさんがtopicブランチを毎日プッシュすれば、Bさんはその内容を毎日確認できます。

情報共有をこまめにするほうが、ブランチが競合したり、作業が重複することを避けることができます。

なるべく毎日プッシュするようにしましょう！


# ブランチ用語


## GitHub Flow ≠ Git Flow

ブランチ運用法について調べると、Git Flowという用語を見かけますが、これはGitHub Flowとは別の流派です！
名前が似ているのでご注意ください。

Git Flowは、GitHub Flowにdevelopブランチを追加するアイデアです。


## topicブランチ = featureブランチ

ブランチについて調べると、featureブランチという用語を見かけますが、これはtopicブランチの別名です。


* GitHub Flowでは、topicブランチ
* Git Flowでは、featureブランチ


と呼ぶ慣習があります。

日本語だと、機能ブランチ・支流・枝などと呼ぶ人もいます。


## mainブランチ = masterブランチ

ブランチについて調べると、masterブランチという用語を見かけますが、これはmainブランチの昔の名称です。
masterには「奴隷の主人」という意味があり、人権問題の観点からセンシティブなので、あまり使われなくなりました。

[https://www.publickey1.jp/blog/20/githubmainmastermain.html](https://www.publickey1.jp/blog/20/githubmainmastermain.html)

日本語だと、統合ブランチ・本流・幹などと呼ぶ人もいます。


# ブランチの整理


## ブランチ名にスラッシュを入れる

**自分の名前/update-read-me** というブランチを作って、READMEの内容を変更し、コミットしてください。


![image25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/36221fa8-ee5f-e2f3-538a-a5e70f00cccd.png)


Forkの左側の `Branches` を見ると、自分の名前のフォルダーができています。

ブランチ名に `/` を入れると、Forkがフォルダーとして表示してくれるためです！


![image13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/e5a9dffa-4c1d-8c2a-711e-082243897156.png)


ブランチが大量にあると、フォルダーで整理した方が、見通しがよくなるので、積極的に使っていきましょう！
`-` はフォルダーにはならないので、使い分けていきましょう！


# さいごに

今回はここまでです！おつかれさまでした！

次回はいろいろ取り消し編です！引き続きこちらも実践していただけると嬉しいです！

https://qiita.com/segur/items/8ce6914af5578c5f4ce2

本記事作成にあたり、以下の記事を参考にさせていただきました。ありがとうございました！

- [GitHub Flow ～GitHubを活用するブランチモデル～](https://tracpath.com/bootcamp/learning_git_github_flow.html)