Weitere ähnliche Inhalte Ähnlich wie Git & ブランチモデルで学ぶ バージョン管理入門 (20) Git & ブランチモデルで学ぶ バージョン管理入門22. Git 基本操作
ブランチ (branch)
ファイルの編集履歴を分岐させて記録していく機能
複数のユーザーで平行して行われるバグの修正や、
機能の追加などのファイル編集作業を正確に管理
できる
ブランチモデルでは役割毎に名称が決められており、
メインのブランチ名を”master”ブランチと呼称してい
る。
24. Git 操作名
その他
init , log, status, diff, reset, revert, checkout, branch,
remote, fetch, rebase, config, show, tag, reflog, rm,
chery-pick など
GUIのツールでは相当する機能がなかったりする
ので、CUIが使えるようになると便利
46. git-flow フロー図 – 通常の開発
開発開始
機能1
機能2
※修正等によるcommitは図から省略
開発終了
• masterからdevelopを作成する
• developから開発対象の機能の数
だけ、featureを作成する
• それぞれのfeatureの開発が完了
したらdevelopにマージし、feature
を削除する。
• 全ての機能developにマージしたら
releaseを作成する
• releaseでテストを行い、不具合修
正が終わったら、masterとdevelop
にマージし、releaseを削除する。
47. git-flow フロー図 – リリース後の不具合対応
不具合発生
• 不具合発生後、対応用のブランチとして、
hotfixを作成する。
• 修正後は、hotfixをmasterとdevelopにマー
ジする。
※修正等によるcommitは図から省略
48. git-flow フロー図 – リリース前不具合の持ち越し
• releaseで見つかった不具合等を持ち越す
場合、releaseからdevelop,featureを作成す
る。
※修正等によるcommitは図から省略
不具合発覚
49. git-flow メリット
• 管理が他のフローよりもしっかりしている
• fix(不具合)の数、マイルストーンの遷移が一目瞭然
• 本番リリースしたデータと、開発中のデータの区別
が明確になり、リリースした内容も確認しやすい
• 役割毎に明確に使うタイミングや意図が分けられて
いる
• コミットツリーを見ることでどのように作業が進んだ
かを俯瞰して把握しやすい
• 修正、リリース、機能追加などのいくつもの種類の
違う作業を並行して進められる
52. GitHub Flow 概要
• 「GitHub」の開発で使用されているワークフローで、
最もシンプルな構成
• developブランチがなく、Pull Request機能が追加され
ている
53. GitHub Flow 用語
• Pull Request
変更内容をレビュワーに通知し、マージを依頼する
機能
1人で作ると気がつかないコードの指摘やバグや記
述ミスの発見
品質向上
• レビュワーにとっても、他人が書いたコードを読むこ
とで新しい書き方を発見できる
技能向上
56. GitHub Flow ルール
• masterブランチは常にデプロイ可能である←重要!
• 作業用featureブランチをmasterから作成する
• 作業用featureブランチをmasterへ定期的にプッシュ
する
• マージにはプルリクエストを活用する
• プルリクエストが承認されたらmasterへマージする
• masterへマージが完了したら直ちにデプロイを行う
57. GitHub Flow フロー図 – 通常の開発
• 開発開始時にmasterからfeature作成する
• featureの開発が完了後、テストを行う
• feature からmasterへプルリクエストを発行し、レ
ビューを行う
• プルリクエストが承認されたらmasterへマージす
る。
• masterへマージが完了後、直ちにデプロイを行う
• 追加の開発が始まると、再度masterからfeature
を作成する
※修正等によるcommitは図から省略
58. GitHub Flow フロー図 – 開発中のmaster更新発生
• masterをfeature/2にマージし、変更箇所を取り込
む
• 通常の開発時と同様にfeature/2の開発・テスト完
了後にmasterにプルリクエストする
• masterの不具合や新規機能追加により、
feature(/2)の開発中にmasterが更新された場合
、本対応を行う
※修正等によるcommitは図から省略
59. GitHub Flow メリット
• 最も単純で学習コストが低い
• 承認フローがあるので、見られる意識からソース
コードが汚れにくい⇒品質向上
• テストを自動化しておくことで「masterにマージする
たびにデプロイ」といった運用も取れるので、リリー
ス作業を簡略化できる⇒サーバサイドとの親和性が
非常に高い
60. GitHub Flow デメリット1
• アプリの場合、1つの作業単位ごとにリリースをする
とも限らないので、どのcommitがリリース対象か区
別がつきにくくなる。
• 環境(ステージング環境、テスト環境等)を分けてデ
プロイしたい場合、デプロイタイミングとブランチとの
結びつきが不明確になる。
61. GitHub Flow デメリット2
• リリース前検証をfeatureブランチで行うことになり、
調べたいときのタイミングで、どの環境がどの
featureに割り当たっているのか判断が難しい。
• marge済みのブランチがmaster一本のため、どの
commitが環境に適用されているか分からなくなる。
64. GitLab Flow 概要
• GitLab がベストプラクティスとして提唱
• 「GitHub Flow + 各環境ごとのブランチ」の構成に
なっている
• コミットされたものが順次下流へ流れるワークフロー
• プルリクエストの代わりに、マージリクエスト機能が
追加されている
Pull RequestとMarge Requestは同等の機能
65. GitLab Flow ブランチの種類
• master
メインのブランチ
ステージング環境やApple・google審査対応apk用
分岐元:feature
分岐先:feature,pre-production
69. GitLab Flow フロー図 - 通常開発
• masterブランチからfeatureを作成し、
featureで開発を進める。
• featureの開発完了後、featureから
masterにマージリクエストを発行する
• “ステージング環境”へデプロイして
masterをテストする
• masterからpre-productionブランチへマ
ージリクエストを発行する
• pre-productionでリリース前テストを実施
する
• pre-productionからproductionへマージ
リクエストを発行する
• 承認後、マージを行い、即時リリースする
• マージ済みのfeatureブランチを削除する
※修正等によるcommitは図から省略
70. GitLab Flow メリット
• コミットが下流へ流れる構造のため、すべての環境
で全てテスト済みであることが保証される
• 承認フローがあるので、見られる意識からソース
コードが汚れにくい
71. GitLab Flow デメリット
• GitHub Flowと比べるとフローが複雑
• リリースしたいタイミングが違う開発をマージするこ
とができない(してはいけない)ため、追加要望や不
具合修正の割り込みがリリース完了するまで、
feature/hotfixからマージができず、柔軟性が低い
次ページにて解説
72. GitLab Flow デメリット - 開発中の割り込み
• masterからhotfixブランチを作成後、
通常の開発と同様のフローで進める。
• 平行して実施していたfeatureに
masterをマージし、開発を進める。
• featureの開発は、完了した場合でも、
不具合対応の修正がリリースされるま
で待機する
• 不具合対応完了後、suru hotfixにリリ
ースされるとリリース後にfeatureから
masterにマージする
不具合発生
不具合修正後
にマージ
※修正等によるcommitは図から省略
開発後待ち発生
74. GitFeature Flow 概要
• ぐるなびの小山直樹さんが3つのブランチモデルの
欠点を補うために考案
• GitHub Flowの構成にテスト環境やステージング環境
等のブランチが追加されているフロー
• featureブランチが他のブランチと依存関係が無い
78. GitFeature Flow フロー図 - 通常の開発
① featureの開発完了後、featureからmasterへ
マージリクエストを発行する
レビュワーは、マージ可否をfeatureの開発者
に回答する
承認した場合でも、マージの実行は禁止
② 承認後にfeatureからtest-envにマージし、
test-envでテストを行う
③ テスト完了後、featureからstg-envへマージし
、ステージング環境でテストする
④ テスト完了後、 featureからmasterにマージ
する
①
②
③
marge requestのレビューは
master×feature以外比較禁止
④
※修正等によるcommitは図から省略
79. GitFeature Flow フロー図 ー 開発中のバグ対応
① test-envでテスト中にバグを発見
② feature内で修正し、masterへのマージリクエス
トからやり直す
①
②
③
④
⑤
バグ発見
バグ修正版
※修正等によるcommitは図から省略
80. GitFeature Flow フロー図 ー 複数平行開発
• 複数平行開発しても本番環境へのリリース
は常時可能な状態になっているので、任意
のタイミングでmasterへのマージまで進める
タイミングを気にせず
リリース可能
不具合対応
機能1 機能2
※修正等によるcommitは図から省略
81. GitFeature Flow メリット
• 複数機能を平行して開発している場合でも、他の開
発完了を、待たずにリリースできる
⇒複数案件を同時に開発するのが容易
• featureブランチが他のブランチと依存関係が無いの
で他の開発や不具合修正の影響を受けない
• 複数環境を想定しているので、開発が終わっても
marge待ちの状態に陥らない
• テスト完了やアプリ申請ができた機能からリリースす
ることができる、毎日リリース等も対応が可能
82. GitFeature Flow デメリット
• 複数案件をまとめてリリースする場合も別々に各ブ
ランチにマージする必要があるので、手間が増える。
• 依存している機能の開発に対し、後追いで開発して
も、追い抜くことができ、その場合は不具合に繋がる
• Gitリポジトリ管理ソフトウェアが想定していないフ
ローがあるので、運用は慎重に行う必要がある
– masterへ承認してはいけないPull Requestを発行するフ
ローと承認できるフローが存在する
– test-env,stg-envに対するPull Requestはレビューしてはいけ
ない