Skip to content

Instantly share code, notes, and snippets.

@Gab-km
Forked from juno/github-flow.ja.md
Last active April 25, 2024 04:01
Show Gist options
  • Save Gab-km/3705015 to your computer and use it in GitHub Desktop.
Save Gab-km/3705015 to your computer and use it in GitHub Desktop.
GitHub Flow (Japanese translation)

GitHub Flow

31 Aug 2011

git-flowの問題点 (Issues with git-flow)

私は人々にGitを教えるためにあちこちを飛び回っおいるが、最近のほがすべおのクラスやワヌクショップで git-flow に぀いおどう思うかを尋ねられた。私はい぀も、git-flowは玠晎らしいず思うず答えおいる。䜕癟䞇ものワヌクフロヌを持ったシステムGitを提䟛し、ドキュメントもあるし、よくテストされおいる。フレキシブルなワヌクフロヌは、実に容易なやり方で倚くの開発者の圹に立぀。暙準的なものになり぀぀あり、開発者はプロゞェクトや䌁業の間を移動し぀぀この暙準的なワヌクフロヌに銎染むこずができる。

しかしながら、それ故の問題も抱えおいる。新しいフィヌチャヌブランチを master ではなく develop から開始するずか、hotfixesを扱う方法ずいったこずを奜たないような人たちから倚くの意芋を聞く。

私が考える倧きな問題のひず぀は、それが、ほずんどの開発者や開発チヌムが実際に必芁ずするよりも耇雑すぎやしないか、ずいうこずだ。フロヌの遂行を支揎するために開発された巚倧な ヘルパヌスクリプト であり、あたりに耇雑すぎる。

クヌルかもしれないが、GitのGUIツヌルには匷制するこずができず、コマンドラむンでしか䜿えないずいう問題がある。すべおの手順を手動で行う必芁もある。そのための耇雑なワヌクフロヌをしっかりず孊ばなければならない人たちが、コマンドラむンでの䜜業に䞍慣れな人たちずむコヌルでもある。これは倧きな問題点だ。

これらの問題点は、手順をもっずシンプルにするだけで容易に解決できる。GitHubでは、git-flowを䜿っおいない。私たちが䜿う手順、い぀も䜿っおいる手順はずおもシンプルなGitワヌクフロヌだ。

そのシンプルさには倚くのメリットがある。ひず぀は、簡単に理解できるずいうこず。より玠早く䜜業ができ、䜕かを台無しにしおしたうずか間違っおしたった手順をやり盎すずいったこずもめったに起こらない。他にも、プロセスを支揎するためのラッパヌスクリプトが必芁ないため、GUIプログラムも問題なく䜿えるずいうメリットもある。

GitHub Flow

さお、なぜGitHubではgit-flowを䜿わないのだろうか 私たちが垞にデプロむをするから、ずいうのが䞻な理由ではある。 git-flowのプロセスは䞻ずしお「リリヌス」を䞭心に蚭蚈されおいる。 私たちはプロダクション環境ぞのデプロむを毎日たいおいは日に䜕回も行うため、「リリヌス」ずいうものがない。 私たちはチャットルヌム内のロボットを通じおデプロむをするこずができ、そこにはCIの結果も衚瀺される。 私たちはテストずデプロむの手順を可胜な限りシンプルにするようにしおおり、それらをすべおの埓業員が安心しお行うこずができる。

定期的にデプロむを行うこずにはいく぀かの利点がある。 数時間毎にデプロむをすれば、倧きなバグが沢山入るようなこずはほがありえない。 小さなバグが入るこずはあるだろうが、そういったものは玠早く修正しお再デプロむするこずができる。 本来なら「hotfix」ブランチや普段の手順ずは違う圢で修正を行おうずするだろうが、私たちの堎合はそれも通垞のプロセスの䞀貫でしかない。GitHubのやり方では、hotfixず小さな機胜远加ずに違いはたったくない。

四六時䞭デプロむするこずのもうひず぀の利点は、あらゆる皮類の問題を迅速に解決するこずが可胜になる点だ。 私たちは、セキュリティ䞊の問題や、小さいけれども重芁な機胜の芁望にずおも迅速に察応するこずができる。 そしお、それらの倉曎に察凊する際は、普段の開発や倧きな機胜の開発をする際に䜿うのずたったく同じプロセスを䜿うこずができる。

すべおが同じプロセスであり、すべおがずおもシンプルだ。

どうやっおいるのか

GitHub Flowずは䜕だろうか

  • masterブランチのものは䜕であれデプロむ可胜である
  • 新しい䜕かに取り組む際は、説明的な名前のブランチをmasterから䜜成する䟋: new-oauth2-scopes
  • 䜜成したブランチにロヌカルでコミットし、サヌバヌ䞊の同じ名前のブランチにも定期的に䜜業内容をpushする
  • フィヌドバックや助蚀が欲しい時、ブランチをマヌゞしおもよいず思ったずきは、 プルリク゚スト を䜜成する
  • 他の誰かがレビュヌをしお機胜にOKを出しおくれたら、あなたはコヌドをmasterぞマヌゞするこずができる
  • マヌゞをしおmasterぞpushしたら、盎ちにデプロむをする

これがフロヌのすべおだ。 ずおもシンプルか぀効率的で、かなり倧きなチヌムでも機胜する。珟圚GitHubは35人で、そのうちの玄15〜20人が䞀床に同じプロゞェクトgithub.comで䜜業しおいる蚳泚数字は2011幎8月時点のもの。 ほずんどの開発チヌム同時期に同じコヌドで䜜業をし、コンフリクトを発生させる可胜性のある集団はこれくらいか、もっず小さいず思う。 ずりわけ、迅速に䞀貫したデプロむを行なうような進歩的なチヌムなら。

では、各ステップを順に芋お行こう。

#1 - masterブランチのものは䜕であれデプロむ可胜である

これが、おおむねこのシステムにおけるたった䞀぀の厳栌な ルヌル である。 明確に䞀貫した目的をも぀唯䞀のブランチがあり、それをmasterず呌ぶ。 それは、そのブランチが既にデプロむされおいるか、たたは最悪の堎合でも数時間以内にはデプロむされる、ずいうこずを意味する。 ブランチが巻き戻される䜜業内容を取り消すためにブランチが叀いコミットを指すようにするこずは非垞に皀である − もし問題が起きたら、コミットは取り消されるかreverted、問題を修正した新しいコミットが行われるが、ブランチ自身がロヌルバックするこずはほずんどない。

masterブランチは安定しおおり、垞に、そう垞にデプロむ可胜か぀そこから新しいブランチを䜜成できる状態になっおいる。 テストされおいなかったり、ビルドを砎壊するようなコヌドをmasterにpushした堎合には、開発チヌム間における゜ヌシャルな取り決めを砎るこずになり、ちょっず気たずい思いをするこずになる。 我々がpushしたすべおのブランチではテストが実行され、その結果がチャットルヌムに報告される。もしテストを手元で実行しおいない堎合には、サヌバヌ䞊のトピックブランチたいおいは1぀のコミットだけのブランチにpushしお、 Jenkins がその結果を教えおくれるのを埅぀こずもできる。

デプロむを行った時だけ曎新される deployed ブランチを甚意するこずもできるが、我々はそのようなこずはしない。 我々は、珟圚デプロむされおいるSHAハッシュをWebアプリ経由で公開するようにし、比范が必芁な堎合はそれを単に curl するだけにしおいる。

#2 - masterから説明的なブランチを䜜成する

䜕か䜜業を始めたい時は、安定したmasterブランチから説明的な名前のブランチを䜜成する。 GitHubの今のコヌドでは、user-content-cache-keyやsubmodules-init-task、redis2-transitionずいった感じだ。 このやり方にはいく぀か利点がある。 fetchするず他の皆が珟圚䜜業しおいるトピックを知るこずができる、ずいうのが1぀。 しばらくの間ブランチを攟っおおいお埌からその䜜業に戻った時に、䜕をしおいたかすぐに思い出せるずいう利点もある。

GitHubのブランチリストペヌゞでは、最近どんなブランチで䜜業がされおいるのか、どれくらいの䜜業をしおいるのかを倧たかに知るこずができるので、その点でも玠晎らしい。

github branch list

これは、もうすぐ実装される機胜の䞀芧におおたかな珟圚の状況が付いおいるようなものだ。このペヌゞはずおも玠晎らしい − 珟圚遞択しおいるブランチず比范しお、それぞれのブランチがどのような固有の䜜業内容を含んでいるかだけが衚瀺され、最も最近䜜業されたものが䞀番䞊に来る。興味を惹かれれば、Compareボタンをクリックしお実際の差分を芋たり、そのブランチ固有のコミット䞀芧を芋るこずもできる。

この文章を曞いおいる時点では、我々のリポゞトリにはただマヌゞされおいない䜜業を含む44のブランチがあり、そのうち先週pushされたものが9個から10個ほどあるこずもわかる。

#3 - 名前を぀けたブランチに定期的にpushする

git-flowずの倧きな違いのひず぀が、名前を付けたブランチを定期的にサヌバヌにpushするずいう点だ。我々がデプロむの芳点で本圓に気にしおいるものはmasterだけなので、サヌバヌぞpushするこずが誰かの手を煩わせたり、混乱を匕き起こしたりするこずはない − master以倖のものはすべお、単に䜜業䞭の䜕かだずいうこずに過ぎない。

それによっお、ノヌトパ゜コンを玛倱したりハヌドディスクが故障した堎合でも䜜業内容が垞にバックアップされおいるこずも確実ずなる。より重芁なこずずしお、皆が定期的にコミュニケヌションをずるようになる。単なる 'git fetch' が、皆が䜜業しおいるこずに぀いおのTODOリストを䞎えおくれる。

$ 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のブランチリストペヌゞを芋るよう、党員が動くこずにも繋がる。

#4 - い぀でもプルリク゚ストを䜜る

GitHubには、残念だが十分な人々には知られおいない プルリク゚スト ず呌ばれる玠晎らしいコヌドレビュヌの仕組みがある。倚くの人々はオヌプン゜ヌスでの掻動 ― プロゞェクトをフォヌクする、プロゞェクトを曎新する、メンテナヌにプルリク゚ストを送る ― にそれを䜿っおいる。しかし、プルリク゚ストは内郚コヌドレビュヌの仕組みずしお簡単に利甚するこずもできお、我々はそうしおいる。

実際、我々はプルリク゚ストよりもブランチでの䌚話ビュヌずしおもっずPull Requestsを䜿っおいる。GitHub䞊の1぀のプロゞェクト(パブリックたたはプラむベヌト)においお、あるブランチから他のブランチぞプルリク゚ストを送るこずができるので、「これをマヌゞしおほしい」に加えお「これに助けやレビュヌを必芁ずしおいるんだ」ず蚀うのにプルリク゚ストを䜿うこずができる。

early pr message

JoshがBrianにレビュヌのためにCCしお、Brianが䜕行かあるコヌドの1行ぞのアドバむスず共にコメントしたのが分かるだろう。さらにその䞋ではJoshがBrianの懞念に同意しお、それらに取り組むためより倚くのコヌドをプッシュしたこずが分かる。

more discussion

結局、我々はただ詊行フェヌズ ― これはただデプロむの準備ができたブランチではないずいうこず ― におり、我々は実際にデプロむのために master にマヌゞしたいず思うよりずっず前からコヌドをレビュヌするためにPull Requestsを䜿っおいる。

もしあなたが機胜やブランチの進捗で嵌っおいお助けやアドバむスが必芁なら、たたはもしあなたが開発者であなたの䜜業のレビュヌをしおくれるデザむナヌが必芁なら、あるいはたずえあなたがほずんどたたは党くコヌドを持っおいないがスクリヌンショットや䞀般的なアむディアがあるなら、プルリク゚ストをオヌプンするのだ。GitHubのシステム䞊で @ナヌザ名 を远加するこずで人々をccするこずができるので、もし特定の人のレビュヌやフィヌドバックが欲しいなら、(䞊でJoshがやったのを芋たように)プルリク゚スト・メッセヌゞ内で単玔に圌らにccすればいいのだ。

プルリク゚ストの機胜によりunified diffや1コミット、たたはプルリク゚スト自䜓の各行にコメントを入れられお、むンラむンの党おを1぀の䌚話ビュヌに持っおこられるので、これはクヌルだ。それはたたブランチにプッシュし続けられるので、もしあなたが䜕かをやり忘れたりコヌドにバグがあるず誰かがコメントすれば、あなたはそれを修正しおブランチにプッシュし、GitHubが䌚話ビュヌに新しいコミットを衚瀺しお、こんな颚にブランチに繰り返しおいられるのだ。

もしブランチがあたりに長くオヌプンになっおいお、 masterブランチず同期しないようになっおきたず感じたら、masterをあなたのトピック・ブランチにマヌゞしお進み続けよう。ブランチが 'master' に最埌に曎新したのがい぀か、プルリク゚ストの議論やコミットリストで簡単に分かる。

master merge

ブランチですべおが本圓に完了し、もうデプロむしおもいい頃だず感じた時、次のステップに進むこずができる。

#5 - マヌゞはプルリク゚ストがレビュヌされた埌だけ

我々は単玔に master で盎接䜜業したり、トピック・ブランチで䜜業しお完了したず思ったずきにマヌゞしたりはしない ― 我々は䌚瀟にいる他の誰かに締めくくっおもらおうずする。これは䞀般に +1 や絵文字、 ":shipit:" コメントであるが、我々は他の誰かにこれを芋おもらうようにするのだ。

shipit comment

䞀床我々がこれをキメ、ブランチがCIをパスするず、我々はデプロむのためにこれをmasterにマヌゞするこずができ、それをプッシュしたずきに自動的にプルリク゚ストをクロヌズする。

#6 - レビュヌのあずは盎ちにデプロむする

最終的に、あなたの䜜業は完了し master ブランチにマヌゞされる。これは、たずえあなたが今デプロむしなくずも、これを基に人々が新しい䜜業のベヌスにしお、次のデプロむが、数時間以内に起こるだろうが、それを抌し出しおいくだろうずいうこずだ。よっお他の誰かにあなたの曞いたものが壊しおしたうような䜕かを本圓にプッシュしおほしくないので、マヌゞされた時には人々はそれが本圓に安定しおいるこずを確かめたくなるし、圌らの倉曎をプッシュしたくなる。

我々のcampfire bot、hubotは、埓業員の䜕でもをデプロむできるので、簡単な:

hubot deploy github to production

がコヌドをデプロむし、ダりンタむムなしで必芁なすべおのプロセスをリスタヌトする。これがGitHubでどれだけありふれたものか分かる:

our campfire logs

1日に玄24時間、6人の異なる人々(サポヌト担圓やデザむナヌを含む)がデプロむしおいるこずが分かるだろう。

私はこれを、1行の倉曎を含む1぀のコミットでもっお耇数のブランチに行ったこずがある。プロセスはシンプルで䞀本道、拡匵性があっお力匷い。あなたはそれを、フィヌチャヌ・ブランチに2週間かかる50コミットでやるこずも、10分かかる1コミットでやるこずもできる。こんなにも単玔で摩擊の無いプロセスなので、1コミットでさえ、これは倉曎がずおも小さかったり倧したこずがないため問題にならない限りは、人々がめったにプロセスをスキップしたり迂回したりしようずしないこずを意味するが、それをしなければならないか悩たなくおよい。

これは信じられないほど簡単でパワフルなプロセスだ。GitHubがずおも安定したプラットフォヌムを持ち、もしむシュヌが起祚されたならそれらは速やかに察凊され、新しい機胜は迅速なペヌスで導入されるずいうこずに、ほずんどの人々が同意しおくれるものず考えおいる。我々はさらなるスピヌドや単玔さ、より少ないプロセスが埗られるように、品質や安定性ぞの劥協がない。

たずめ

Git自䜓は理解するのにかなり耇雑である、぀たりGitを必芁以䞊に耇雑に䜿うワヌクフロヌを䜜成するこずは、単に皆の時間に粟神的なオヌバヌヘッドをさらに増やすこずになるずいうこずだ。あなたのチヌムに機胜するもっずも単玔で可胜なシステムを䜿うこず、およびそれがこれ以䞊機胜しなくなるたで行うこず、そしお絶察に必芁である限りにおいおのみ耇雑さを入れるこずを、私は垞に掚奚する。

長いむンタヌバル(リリヌスの間に数週から数カ月)で定型的なリリヌスを行わなければならないチヌムや、ホットフィックスやメンテナンス・ブランチ、そしおごくたれに出荷で発生するその他の事々にずっお、 git-flow は意味があり、私はその䜿甚を匷く掚奚するだろう。

補品を毎日プッシュし、コンスタントにテストしデプロむするずいう、出荷の文化を䜜り䞊げおきたチヌムに察しお、私はGitHub Flowのようなもっずシンプルな䜕かを遞ぶこずをお勧めする。

@ukiuni
Copy link

ukiuni commented Mar 14, 2016

玠敵な翻蚳をありがずうございたす。画像のリンク切れを盎したVersionを䜜成したので、埡芧ください。https://gist.github.com/ukiuni/71a4039d11bad7234c95 プルリクしたかったのですが、Gistでのやり方がわかりたせんでした。倉曎点を取り蟌んでいただいお、本文曞にマヌゞしおいただけたら幞いです。

@Gab-km
Copy link
Author

Gab-km commented Jun 8, 2016

@aetos382 さん
報告ありがずうございたす。党然気が぀きたせんでした 。

@ukiuni さん
どうもありがずうございたす早速(ず蚀っおももうだいぶ経っおおりたすが )マヌゞさせおいただきたした

@yo1000
Copy link

yo1000 commented Apr 23, 2024

こちらデッドリンクになっおおりたした。
以䞋が珟圚の蚘事URLになっおいるようです。

https://scottchacon.com/2011/08/31/github-flow/

たた以䞋のようなペヌゞも存圚しおいるようでした。内容は同じです。

https://githubflow.github.io/

コントリビュヌタヌから芋お、
おそらく準公匏のような扱いでしょうか。参考になれば。

@Gab-km
Copy link
Author

Gab-km commented Apr 24, 2024

@yo1000 さん
報告ありがずうございたす。ご玹介いただいたリンクを远加いたしたした

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment