バナー画像

GitHub flowについてまとめています。

GitHub flowとはシンプルなブランチモデルの一種

GitHub flowは、開発を行う際のブランチの作り方(ブランチモデル)の一種です。

GitHubの開発者、Scot Chacon氏によるとGitHub Flowのルールは以下の通りです。

  • masterブランチのものは何であれデプロイ可能である
  • 新しい何かに取り組む際は、説明的な名前のブランチをmasterから作成する(例: new-oauth2-scopes)
  • 作成したブランチにローカルでコミットし、サーバー上の同じ名前のブランチにも定期的に作業内容をpushする
  • フィードバックや助言が欲しい時、ブランチをマージしてもよいと思ったときは、 プルリクエスト を作成する
  • 他の誰かがレビューをして機能にOKを出してくれたら、あなたはコードをmasterへマージすることができる
  • マージをしてmasterへpushしたら、直ちにデプロイをする

引用:GitHub Flow (Japanese translation)

従来型のgit Flowと比べるとブランチの構造がmasterと開発目的ごとのブランチの2階層とシンプルで、ブランチごとにリリース可能な点が特徴。ウェブサイトやクラウド型サービスのような、サービスしながら更新していくタイプの開発に向いています。

デメリットは、新機能や改修の複数同時対応が必要な法人向けのシステム開発や、パソコンにインストールするタイプの開発には合わない点。バッチ処理でデータが積み上がっていくような処理や、不具合が起きたときにデータを壊してしまうようなシステムには時間をかけた検証が必要なため、従来型git flowタイプのブランチモデルが合っています。

以下はgit flowの例です。master以下にdevelop(開発環境用のブランチ)、release(リリース用のブランチ)、hotfixes(ホットフィックス、緊急対応用のブランチ)、feature(新機能用のブランチ)があり、さらにその下に複数の作業用ブランチがぶら下がっている構造です。


引用:A successful Git branching model » nvie.com

Scotto Chacon氏によるGitHub Flowのルールを見ていきましょう。

masterブランチのものは何であれデプロイ可能である

GitHub Flowのルールは基本的にこれ一つで、残りの5つはこのルールを実現するために決められています。masterブランチは常にデプロイ(本番リリース)可能な状態にキープしておくんですね。

この場合、masterにビルドを破壊するようなコードをpushしないとか、事前にテストを行うなどの暗黙の了解があります。

新しい何かに取り組む際は、説明的な名前のブランチをmasterから作成する

進行中の作業=ブランチとなり、もとの解説では「もうすぐ実装される機能の一覧におおまかな現在の状況がついているようなもの」と表現されています。GitHub Flowでは、ブランチ名の付け方に特にこれといった命名規則はありません。

なお、実際にGitHub Flow方式を採用する場合、元のリポジトリにブランチを作るのではなく作業ごとにmasterブランチをforkしてから、fork後のリポジトリにブランチを作り、プルリクエストで元のリポジトリにマージするケースもあるようです。

【関連記事】
GitHubのforkはリポジトリの複製 フォークの手順と、クローン、ブランチとの違い 

作成したブランチにローカルでコミットし、サーバー上の同じ名前のブランチにも定期的に作業内容をpushする

GitHub Flowではサーバ上のブランチを「作業用」として扱うため、ローカル環境でのコミット内容をサーバ上のブランチに定期的にpushします。GitHub Flowではデプロイの観点で重要なのはmasterブランチだけなので、サーバ上の特定のブランチにpushをおこなっても、誰かに迷惑や変な影響を与えることはないという考え方なんですね。

また、メンバーが定期的に自分のブランチにpushをおこなうことで、git fetchで同期することでメンバーの作業していることの一覧を知ることができます。

$ git fetch
remote: Counting objects: 3032, done.
remote: Compressing objects: 100% (947/947), done.
remote: Total 2672 (delta 1993), reused 2328 (delta 1689)
Receiving objects: 100% (2672/2672), 16.45 MiB | 1.04 MiB/s, done.
Resolving deltas: 100% (1993/1993), completed with 213 local objects.
From github.com:github/github
 * [new branch]      charlock-linguist -> origin/charlock-linguist
 * [new branch]      enterprise-non-config -> origin/enterprise-non-config
 * [new branch]      fi-signup  -> origin/fi-signup
   2647a42..4d6d2c2  git-http-server -> origin/git-http-server
 * [new branch]      knyle-style-commits -> origin/knyle-style-commits
   157d2b0..d33e00d  master     -> origin/master
 * [new branch]      menu-behavior-act-i -> origin/menu-behavior-act-i
   ea1c5e2..dfd315a  no-inline-js-config -> origin/no-inline-js-config
 * [new branch]      svg-tests  -> origin/svg-tests
   87bb870..9da23f3  view-modes -> origin/view-modes
 * [new branch]      wild-renaming -> origin/wild-renaming

フィードバックや助言が欲しい時、ブランチをマージしてもよいと思ったときは、 プルリクエスト を作成する

マージ依頼以外に、フィードバックや助言がほしいときにもプルリクエストを作成する、というんですね。

GitHubのサービス立ち上げ時のような、起業のスタートアップのような状況ならアリかも知れません。開発現場によっては「フィードバック会議」のような時間割当をあらかじめしておかないと、メンバーの協力は難しいケースもあるかも知れませんね。

他の誰かがレビューをして機能にOKを出してくれたら、あなたはコードをmasterへマージすることができる

「masterで直接作業しない」「ブランチで作業が完了したと思った時点でマージしない」ということですね。いったん他のメンバーにレビューを依頼するということになります。

他の誰かがレビューして機能にOKを出した後、CIにより、ビルドとテストが自動化されている前提です。実際の開発現場だと、スキルの高いメンバー数名が固定でレビュアーの役割を担当することになるでしょう。

マージをしてmasterへpushしたら、直ちにデプロイをする

最終的にmasterブランチにマージされたら、ただちにデプロイ(本番環境にリリース)します。GitHubの開発環境では、チャットボットに「hubot deploy github to production」というようなデプロイの指示を与えると、コードをデプロイ後、ダウンタイムなしですべてのプロセスをリスタートするようになっているそうです。

ここまでの流れはとてもシンプルでメンバー間の摩擦が発生しないので、10分程度で完了する1コミットでも2週間かかる50コミットでも、同様に進められると言います。

GitHub flowのまとめ

ポテパンダの一言メモ
  • GitHub Flowは開発ワークフローのブランチモデルの一種
  • ウェブサイトやクラウド型アプリのような、サービスしながら更新するシステムに向いている
  • 作業ごとにmasterのブランチを作り、マージ後に即デプロイ可能な点が特徴

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。