Slide 1

Slide 1 text

サルでもわかるgithub Takashi Abe Mynet Inc. 28/01 2015

Slide 2

Slide 2 text

おまえだれよ @takashabe PHPでソシャゲ作ってます Scalaとかgolang,つけ麺が好き 社内ではgithubおじさんと呼ばれています 若手です

Slide 3

Slide 3 text

git移行時あるある

Slide 4

Slide 4 text

ブランチの子供が出来過ぎ てマージ困難

Slide 5

Slide 5 text

いつの間にかmasterに取り 込まれるコミット

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

ブランチ戦略決めましょう

Slide 8

Slide 8 text

メジャーなブランチ戦略 git-flow 5種類のブランチを使って機能開発、リリース、hotfix などの役割を明確に分けている 堅牢なモデルだが慣れないうちは煩雑 github flow masterと機能開発ブランチのみを持つ masterはすぐデプロイ対象するワイルドなモデル

Slide 9

Slide 9 text

git-flow

Slide 10

Slide 10 text

使用するブランチ develop 開発安定版ブランチ。featureブランチなどはここにマージされる feature 機能開発用ブランチ。機能開発やバグフィックスなどの開発を機能ごとに開発する ためのブランチ。最終的にdevelopにマージされる release リリース用ブランチ。リリース時にdevelopから作成される。リリース作業中でも developに対する変更を行えるようになる。 master 安定版ブランチ。リリースを終えたreleaseブランチからmasterにマージされる。 hotfix 緊急のバグ修正ブランチ。masterから作成され、releaseブランチを介さずにそのま まmasterにマージされる。

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

feature

Slide 13

Slide 13 text

release

Slide 14

Slide 14 text

hotfix

Slide 15

Slide 15 text

git-flowの特徴 releaseやhotfixのための手順が明確に定められていて プロダクションに上げるコードを堅牢に保つことが出来 る 使用するブランチが多いため手順が煩雑

Slide 16

Slide 16 text

github flow

Slide 17

Slide 17 text

使用するブランチ master 安定版、リリース用ブランチ。featureブランチは全て masterにマージされ、即座にデプロイ対象になる。 feature 機能開発用ブランチ。masterから作成され、そのまま masterにマージされる。

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

github flowの特徴 使用するブランチが最小限で理解しやすい masterを常にデプロイ可能な状態にしないといけない コードレビュー CI

Slide 20

Slide 20 text

弊チームのブランチ戦略

Slide 21

Slide 21 text

やりたいこと

Slide 22

Slide 22 text

やりたいこと 規模の大きい新機能など、複数人で1つの機能を作りた い リリースする機能は絞る場合がある リリース前にQA環境でQAしたい

Slide 23

Slide 23 text

git-flowのアレンジ

Slide 24

Slide 24 text

featureブランチの亜種を2 つ追加した

Slide 25

Slide 25 text

追加したfeatureブランチ feature-develop 1つの大きな機能における開発安定版。developから 作成され、feature-developから更にfeatureブランチ を作成する。featureブランチはfeature-developブラ ンチにマージされる。 QA QA用ブランチ。developから作成され、次回リリースに 盛り込むブランチを全てマージする。ここにはfeature- developブランチが含まれる。

Slide 26

Slide 26 text

機能開発フロー developブランチからfeature-developブランチを作成 feature-developブランチからfeatureブランチを作成 featureブランチをfeature-developブランチにマージ

Slide 27

Slide 27 text

リリースフロー feature-developブランチをQAブランチにマージ QA中の修正は全てQAブランチにマージ QAが完了したらreleaseブランチにマージ

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

GitHub導入時の話

Slide 30

Slide 30 text

GitHub導入時 メンバーのスキルセット 個人ではGit/GitHubを使っていた チーム開発でGitを使ったことはあるがGitHubは無し Git/GitHub共にそれほど使ったことがない

Slide 31

Slide 31 text

チーム開発でGitHubを使ったこ とがあるメンバーは居なかった

Slide 32

Slide 32 text

GitHubに慣れるために GitHubらしい開発フローの徹底 既存プロダクトはsvnでmasterブランチ1本運用だった Pull Request駆動開発の徹底 git-flowをベースにしたブランチ戦略の徹底

Slide 33

Slide 33 text

GitHubでの開発ってこんな感 じだということを浸透させる

Slide 34

Slide 34 text

GitHubについての社内勉強会やチームMTG Git自体は複雑なツールなので必要な機能だけつまみ 食いする 開発において最低限必要なフローをドキュメント化して 共有 機能開発〜Pull Requestを送るまでの手順 QA環境への適用手順 git rebaseとかgit resetは使えれば便利だけど必須で はない

Slide 35

Slide 35 text

こんな時どうすれば良いの?ということを聞けるの超大 事 pull 出来ない! push 出来ない! コンフリクトした! 詳しい人が1人いると便利 仮に詳しい人がいなくてもGitHubの情報はググれば いくらでもある

Slide 36

Slide 36 text

それなりに開発が回るように なってきた

Slide 37

Slide 37 text

コミット粒度 Pull Request粒度 ラベルの運用

Slide 38

Slide 38 text

チームの習熟度によってフォーカス するレイヤを変える

Slide 39

Slide 39 text

tips

Slide 40

Slide 40 text

ブランチを作るとき ブランチ作成時は常にリモートブランチから作成するこ とを意識する git checkout -b feature/a origin/develop GitHubなどのGUIフロントエンドが使えればそれでも 古いローカルブランチから作成することによってリモート の最新コミットが取り込まれない コンフリクトの原因になる

Slide 41

Slide 41 text

CUIでやる SourceTreeなど優秀なGUIツールを使うのもいいが、git の構造を知るにはCUIでやると捗る ローカル/リモートリポジトリの違い working copy,index,ローカルリポジトリの違い 慣れるとGUIでやるよりも捗る(と思う)