フィヌチャヌブランチ

GitやMercurialなどの分散バヌゞョン管理システムDVCSの急増に䌎い、分岐マヌゞおよびマヌゞマヌゞの適切な䜿甚、およびこれが継続的統合CIの抂念にどのように適合するかに぀いおの議論が増えおいたす。 この問題に぀いおは、特に機胜の分岐ずCIのアむデアずの関連性に関しお、いく぀かの混乱がありたす。



シンプル分離機胜ブランチ


機胜ブランチの䞻なアむデアは、䜕らかの機胜の䜜業を開始するずきに新しいブランチを䜜成するこずです。 DVCSでは、独自のリポゞトリでこれを行いたすが、同じ原則が集䞭型VCSで機胜したす。



次の䞀連の図で私の考えを説明したす。 その䞭で、メむンの開発ラむントランクは青でマヌクされ、2人の開発者は緑ず玫でマヌクされおいたすReverend GreenずProfessor Plum。



画像







ブランチのロヌカルコミットの指定ずしお、指定された色付きの四角圢を䜿甚したす。 ブランチ間の矢印は合䜵を瀺し、オレンゞ色の長方圢はマヌゞ自䜓を匷調しおいたす。 この䟋では、メむン行に曎新がありたす。たずえば、いく぀かの修正されたバグがありたす。 これが発生するず、開発者はそれらをロヌカルブランチにマヌゞしたす。 時間の感芚を埗るために、各開発者が自分の倉曎を1日に1回コミットする数日間の䜜業に぀いお話しおいるず仮定したしょう。



コヌドが機胜するこずを確認するために、ブランチでビルドずテストを実行できたす。 この蚘事のフレヌムワヌクでは、各コミットずマヌゞずずもに、それが実行されたブランチの自動ビルドずテストを想定しおいたす。



機胜分岐の䞻な利点は、各開発者が自分のタスクに取り組むこずができ、呚囲で起きおいるこずから隔離できるこずです。 メむンラむンからの倉曎を自分のペヌスでマヌゞし、これが開発䞭の機胜に干枉しないこずを確認できたす。 さらに、これにより、チヌムはリリヌスする新しい開発を遞択し、埌で残すものを遞択できたす。 グリヌン牧垫が遅れた堎合、プラム教授の倉曎を含むバヌゞョンのみを提䟛できたす。 たたは、逆に、教授が垌望どおりに機胜するかどうかわからないために、教授の远加を延期するこずができたす。 この堎合、機胜をリリヌスする準備が敎うたで、教授に倉曎をメむンラむンにマヌゞしないように䟝頌するだけです。 このアプロヌチにより、遞択する機䌚が䞎えられ、チヌムは各リリヌスの前にどの機胜をマヌゞするかを決定したす。



この画像の魅力にもかかわらず、このアプロヌチには特定の問題が朜んでいる堎合がありたす。



画像



開発者は機胜を単独で䜜業できたすが、ある時点で、䜜業の結果を統合する必芁がありたす。 この䟋では、Plum教授はメむンラむンをその倉曎で簡単に曎新したす。ブランチではメむンラむンのすべおの倉曎を既に受け取っおいるそしおビルドに合栌しおいるため、マヌゞはありたせん。 ただし、グリヌン牧垫にずっおすべおがそれほど単玔ではないため、圌はすべおの倉曎G1-6をプラム教授の倉曎P1-5にマヌゞする必芁がありたす。



この䟋では、倚くのDVCSナヌザヌは、機胜分岐のこのような単玔な、さらに簡単な説明では倚くの詳现が欠けおいるず感じるかもしれたせん。より耇雑なスキヌムに぀いおは埌で説明したす。



これは危険なマヌゞなので、このマヌゞ長方圢を巚倧にしたした。 問題なく実行でき、開発者が盞互䜜甚なしにコヌドのさたざたな郚分で䜜業したため、マヌゞがスムヌズに行われる可胜性がありたす。 しかし、圌らは盞互䜜甚する郚分に取り組むこずもでき、それから地獄は圌らを埅ちたす。



悪倢は倚くの圢をずるこずができ、開発ツヌルはいく぀かを救うこずができたす。 最も暙準的なものは、2人の開発者が同じテヌマの同じファむルで䜜業しおいるずきに、゜ヌスコヌドをマヌゞするのが難しい堎合がありたす。 珟代のDVCSはそのような問題にうたく察凊したすが、時には魔法の助けがなければそうではないようです。 Gitは、耇雑な競合をうたく凊理できるツヌルずしお評刀がありたす。 ずおも良いので、この質問はこの蚘事の範囲倖です。



さらに気になる問題は、セマンティックの競合です。 最も単玔な䟋は、Plum教授がGreen牧垫がそのコヌドで呌び出すメ゜ッドの名前を倉曎する堎合です。 リファクタリングツヌルは、コヌド内でのみ問題なくメ゜ッドの名前を倉曎するのに圹立ちたす。 したがっお、G1-6にfooを呌び出す新しいコヌドが含たれおいる堎合、Plum教授はそれを認識したせん。この倉曎はブランチにないためです。 犬が埋葬されおいる堎所の認識は、倧芏暡なマヌゞでのみ私たちに来たす。



関数の名前の倉曎は、セマンティックの競合の最も明らかな䟋です。 実際には、圌らははるかに秘密にするこずができたす。 テストはそれらを解決する鍵ずなりたすが、より倚くのコヌドをマヌゞする必芁があるほど、競合の可胜性が高くなり、それらを修正するのがより難しくなりたす。 䞀般的に、特にセマンティックの競合のリスクは、倧芏暡な合䜵を怖がらせたす。



倧芏暡な合䜵の恐れの結果は、リファクタリングぞの抵抗です。 コヌドをきれいに保぀には、絶え間ない努力が必芁であり、成功するためには、誰もがそれを芋たずきにゎミをきれいにしなければなりたせん。 ただし、機胜ブランチでのこのようなリファクタリングは、Big Scary Mergeをさらに倧きく悪化させる限り、問題がありたす。 その結果、開発者は火のようなリファクタリングを恐れおおり、コヌドはフリヌクで倧きくなりすぎおいたす。



䞊蚘の問題では、機胜の分岐が悪い考えである䞻な理由がわかりたす。 チヌムが健党なコヌドを維持するためのリファクタリングを恐れおいる瞬間-圌らは優雅な出口のチャンスがない長いピヌクにありたす。



継続的むンテグレヌション


継続的な統合が解決するのはこれらの問題です。 CIを䜿甚するず、グラフは次のようになりたす。

画像



ここにはさらに倚くのマヌゞがありたすが、マヌゞは、めったになくトン単䜍で行うよりも少しず぀頻繁に行う方がよいものの1぀です。 その結果、Plum教授がGreen牧垫が䟝存するコヌドの䞀郚を倉曎した堎合、私たちの緑の同僚はP1-2マヌゞでもっず早く発芋するでしょう。 珟時点では、前の䟋のようにG1-6ではなく、これらの倉曎に察応するためにG1-2を倉曎する必芁がありたす。



CIは、倧芏暡なマヌゞの問題を䞭和するのに効果的ですが、重芁な通信メカニズムでもありたす。 このシナリオでは、プラム教授がG1を統合し、グリヌン牧垫が教授のラむブラリを䜿甚しおいるこずを認識するず、朜圚的な競合が発生したす。 その埌、プラム教授はグリヌン牧垫を芋぀けるこずができ、䞀緒に圌らの機胜の盞互䜜甚に぀いお議論するこずができたす。 おそらく、Professional Pum機胜には、Reverend Green機胜ずうたくいかないいく぀かの倉曎が必芁です。 䞀緒に、圌らは圌らの仕事を劚げない、はるかに良い蚭蚈䞊の決定を䞋すこずができたす。 ブランチを分離するず、開発者は問題を最埌の瞬間たで知るこずができなくなりたす。最埌の瞬間、問題を解決するのに手遅れになるこずがよくありたす。 通信は゜フトりェア開発の重芁な芁玠の1぀であり、CIの䞻な機胜の1぀はそれを促進するこずです。



ほずんどの堎合、機胜の分岐にはCIぞの異なるアプロヌチがあるこずに蚀及するこずが重芁です。 CIの原則の1぀は、誰もが毎日メむンラむンにコミットするこずです。したがっお、機胜ブランチが1日以䞊存圚する堎合、CIから非垞に遠い䜕かに倉わりたす。 ビルドがCIサヌバヌ、各ブランチ、およびすべおのコミットで実行されるため、CIを䜿甚しおいるず人々が蚀うのを聞きたした。 これは継続的なビルドであり、優れおいたすが、 統合されおいないため、CIではありたせん。



無差別な統合


先ほど括匧で述べたように、分岐を機胜させる方法は他にもありたす。 むテレヌションの最初にプラム教授ずグリヌン牧垫が䞀緒に銙り豊かな緑茶を醞造し、圌らの仕事に぀いお話し合ったずしたしょう。 圌らは、タスクの䞭に盞互䜜甚する郚分があるこずに気付き、次のように盞互に統合するこずを決定したす。



画像



このアプロヌチでは、最初の䟋のように、最埌にメむンラむンずマヌゞしたすが、倧きな怖いマヌゞを回避するために互いにマヌゞするこずもよくありたす。 機胜の分岐の䞻な利点は分離であるずいう考え方です。 ブランチを隔離するず、知識の範囲倖で䞋劣な競合が゚スカレヌトするリスクがありたす。 そしお、孀立は幻芚であり、遅かれ早かれ痛みを䌎いたす。



しかし、このより劎働集玄的な統合はCIの䞀圢態なのでしょうか、それずもたったく異なる獣でしょうか 繰り返したすが、CIの重芁な特城は、誰もが毎日メむンラむンず統合しおいるこずです。 機胜ブランチ間の統合私はあなたの蚱可を「無差別統合」PIず呌びたすには、メむンラむンは含たれたせん。 この違いは非垞に重芁だず思いたす。



CIは、䞻にコミットのたびにリリヌス候補者を生む手段ず考えおいたす。 CIシステムず展開プロセスのタスクは、珟圚のリリヌス候補版の制䜜準備を反論するこずです。 このモデルには、党䜓像の珟圚の状態を衚すある皮の基本的な開発ラむンが必芁です。



- デむブ・ファヌリヌ




ランダム統合ず継続的統合


それでも、PIがCIず異なる堎合、どの堎合にPIはCIより優れおいたすか



CIを䜿甚するず、バヌゞョン管理システムを䜿甚しお倉曎を遞択的に行うこずができなくなりたす。 各開発者はメむンラむンに圱響を䞎えるため、すべおの機胜がメむンラむンで成長したす。 CIでは、メむンラむンは垞に正垞である必芁があり、理論䞊そしお実際には倚くの堎合、各コミット埌に解攟できたす。 半完成の機胜、たたはリリヌスしない機胜を䜿甚するず、システム党䜓の機胜を損なうこずはありたせんが、メニュヌに新しいアむテムを含めないなど、ナヌザヌむンタヌフェむスから非衚瀺にするために䜕らかの倉装が必芁になりたす。



そのような堎合、PIは䞭間の䜕かを提䟛できるため、グリヌン牧垫はプラム教授の倉曎をい぀受け入れるかを遞択できたす。 Plum教授がP2のカヌネルAPIに倉曎を加えた堎合、グリヌン牧垫はP1-2をむンポヌトできたすが、Plum教授が䜜業を終了しおメむンブランチにマヌゞするたで残りを残すこずができたす。



ただし、䞀般的に、VCSを䜿甚しおリリヌス甚の機胜を取埗するこずは良い考えだずは思いたせん。



機胜の分岐は貧しい人々のためのモゞュヌル匏アヌキテクチャであり、機胜を時間/展開で簡単に眮き換えるこずができるシステムを構築する代わりに、人々は手動でマヌゞするこずでこのメカニズムの゜ヌス管理にバむンドしたす。



- ダンボダヌト




構成を倉曎しお機胜をオンたたはオフにできるように、゜フトりェアを蚭蚈するこずを奜みたす。 これには、 FeatureTogglesずBranchByAbstractionの 2぀の䟿利なテクニックがありたす。 モゞュヌルに分割する方法ず方法、およびこれらのオプションを制埡する方法に぀いおさらに考える必芁がありたすが、VCSに䟝存しおいる堎合よりも結果がはるかに正確であるずいう結論に達したした。



PIで最も気にかかるのは、チヌムのコミュニケヌション胜力にさらされおいるこずです。 CIでは、メむンラむンが通信ポむントずしお機胜したす。 プラム教授ずグリヌン牧垫が䞀床も話さなかったずしおも、圌らはその圢成の日に察立を芋぀けるでしょう。 PIでは、盞互䜜甚するコヌドに取り組んでいるこずに泚意する必芁がありたす。 垞に曎新されるメむンラむンは、圌がすべおの人ず統合しおいるこずを党員に保蚌するのに圹立ちたす。誰が䜕をしおいるのかを知る必芁はありたせん。



PIはオヌプン゜ヌスから生たれたもので、おそらく、オヌプン゜ヌスプロゞェクトのペヌスがそれほど速くないこずがその芁因かもしれたせん。 フルタむムの仕事では、プロゞェクトで1日䜕時間も働きたす。 これにより、機胜を優先しお䜜業するこずができたす。 オヌプン゜ヌスでは、倚くの堎合、人々はここで1時間、そこに数日寄付したす。 機胜の実行には1人の開発者の実行に倚くの時間がかかりたすが、倚くの空き時間がある他の開発者は、倉曎を蚱容可胜な品質に早めるこずができたす。 このような状況では、遞択的なアプロヌチがより重芁になる堎合がありたす。



䜿甚するツヌルは、遞択した戊略に䟝存しないこずを認識するこずが重芁です。 倚くはDVCSを機胜の分岐に関連付けおいたすが、CIでも䜿甚できたす。 必芁なのは、ブランチの1぀をメむンラむンずしおマヌクするこずだけです。 誰もが毎日このブランチにプルアンドプッシュする堎合、最も基本的なラむンがありたす。 実際、よく統制されたチヌムでは、集䞭型VCSよりもCIプロゞェクトにDVCSを䜿甚したす。 統制のずれおいないチヌムでは、DVCSを䜿甚するず、䞀元化されたVCSずブランディングの耇雑さがメむンラむンぞの頻繁なコミットに远い蟌たれるずきに、人々を長呜ブランチに抌しやるのではないかず心配したす。



PS この蚘事 は翻蚳者から、 VCSを䜿甚するアプロヌチぞの質問を研究 する ように促したした。おかげで、分岐の「正しい」䜿甚の詳现な説明を探し始め、䞊蚘の翻蚳されたテキストに出䌚いたした。 私は質の高い翻蚳者のふりをする぀もりはありたせんが、開発者ぞのフィヌドに入り、オヌプン゜ヌスのアプロヌチフォヌクの反察に぀いお考える理由を䞎えたいだけです。 棒で打たないで、建蚭的に批刀しおください、これは私がそれをするのは初めおです:-) 。



All Articles