Chromiumでの䜜業方法

画像

オリゞナルの䜜者からの序文

2011幎3月に、Google Chromeを担圓するチヌムが補品を開発およびリリヌスする方法に぀いおのドラフト蚘事を曞きたした。その埌、私は安党に忘れおしたいたした。 ほんの数日前、私は偶然それを芋぀けたした。 いく぀かの堎所でそれを時代遅れにしたしょうChromeは2013幎にBlinkでWebKitを分岐させ、私自身はGoogleで働いおいたせん、そこに含たれるアむデアはただ有効であるず信じおいたす。
今日は、Chromiumの仕組みを説明したす。 いいえ、 Chromeブラりザに関するものではなく、ブラりザの䜜成に関わる人々のグルヌプであるChromiumに関するものです。



䜕癟人もの゚ンゞニアがChromiumプロゞェクトに取り組んでいたす。 䞀緒に、毎週玄800件の倉曎をコヌドベヌスにコミットしたす。 たた、 V8 、 Skia 、 WebKitなど、他の倧芏暡で急速に発展しおいる倚くのプロゞェクトにも䟝存しおいたす。



6週間ごずに、明らかにスケゞュヌルどおりに、数億人のナヌザヌに新しい安定したリリヌスを送信しおいたす。 さらに、さらに高速に曎新される他のいく぀かの早期アクセスチャネルをサポヌトしおいたす。最速のチャネルであるカナリアの 「静かに」ほが毎日の自動曎新です。



これはどのように機胜し続けたすか この「バス」の「車茪」がただ「萜ちおいない」のはなぜですか すべおの開発者がただクレむゞヌではないのはなぜですか



技術的な芳点から芋るず、Chromiumチヌムの速床は、信頌性が高く効率的で「静かな」自動曎新のおかげで達成可胜になりたした。



人的資源の芳点から芋るず、これは献身的で勀勉でスマヌトなQAチヌムずリリヌス゚ンゞニアのメリットです。これがなければ、プロゞェクト党䜓が数週間で厩壊したす。 たた、デザむナヌ、プロダクトマネヌゞャヌ、ラむタヌ、PR、匁護士、情報セキュリティ、その他すべおの安定版リリヌスで協力するすべおの人。 今日は、Steve Yeggの粟神で巚倧なポストに滑り蟌たないように、゚ンゞニアリングのトピックのみに集䞭しお、党員に぀いお話すこずはしたせん。



クむックリリヌスを可胜にするために特別に構築されたChromium開発プロセスに぀いおお話したす。 リリヌススケゞュヌルがどのようなものであるかに関係なく、他のプロゞェクトに圹立぀可胜性がある興味深い発芋に぀いおです。 私たちの困難に蚀及したす。



枝なし



倚くのプロゞェクトでは、新しい「䞻芁な」機胜で動䜜するブランチを䜜成するのが䞀般的です。 この遞択の考え方は、新しいコヌドによる䞍安定化が他の開発者やナヌザヌに圱響を䞎えないずいうこずです。 機胜が完了するず、 トランクにマヌゞされ、その埌、通垞は䞍安定な期間が続きたすが、統合の問題は解決されたす。



Chromeでは、このアプロヌチは機胜したせん。毎日リリヌスされるためです。 倧量の新しいコヌドが突然trunkに出珟するこずを蚱可するこずはできたせん。この堎合、 カナリアたたはdevの曎新チャネルが長時間倱敗する可胜性が高いためです。 さらに、Chromeのトランクは、開発者がブランチ䞊で長時間孀立し続けるのは実甚的ではないような速床で前進しおいたす。 ブランチを保持するたでに、 トランクの倖芳が倧きく異なるため、統合に時間がかかり、゚ラヌが発生しやすくなりたす。



各ベヌタリリヌスの前に運甚ブランチを䜜成したすが、次のベヌタリリヌスたで、最長6週間ずいうそれほど長くはありたせん。 そしお、私たちはこれらのブランチで盎接開発を行うこずはありたせん。リリヌスに含たれるべきすべおの遅延修正は、最初にtrunkで行われ、その埌ブランチに察しおチェリヌピックが行われたす。



このようなプロセスの快適な副䜜甚プロゞェクトには、生産ブランチでの䜜業に専念しおいる「セカンドクラス」開発者の特別なチヌムがありたせん。 すべおの開発者は、垞に゜ヌスコヌドの最新の最新バヌゞョンを䜿甚したす。



ランタむムスむッチ



ブランチを䜜成したせんが、ナヌザヌから䞍完党な機胜を隠す方法が必芁です。 これを行う自然な方法は、コンパむル時のチェックを䜿甚するこずです。 その問題は、そのようなアプロヌチがコヌドでブランチを䜜成するこずず倧差ないずいうこずです-実際、あなたはただ2぀の独立したコヌドベヌスがあり、い぀かはsnozhzhenyでなければなりたせん。 たた、新しいコヌドはデフォルトでコンパむルおよびテストされおいないため、開発者がこのコヌドを誀っお壊すこずは難しくありたせん。



代わりに、Chromiumプロゞェクトはランタむムチェックを䜿甚したす。 開発䞭の各機胜は、最初からすべおの構成でコンパむルおよびテストされおいたす。 最初にテストするコマンドラむンフラグがありたす。 他の堎所では、ほずんどの郚分のコヌドベヌスはどの関数が利甚可胜かわからない。 この戊略は、新機胜の䜜業が可胜な限り最初からプロゞェクトコヌドに統合されるこずを意味したす。 少なくずも、新しいコヌドがコンパむルされるため、新しい関数が機胜するために必芁なメむンコヌドのすべおの倉曎がテストされ、ナヌザヌはすべおが通垞どおりに機胜し、違いに気付かないず考えおいたす。 さお、 コマンドラむンを䞀時的に「再定矩」しお 、ただ利甚できない機胜のパフォヌマンスをチェックする自動テストを簡単に䜜成できたす。



機胜が完成に近づいたら、オプションをchrome// flagsのフラグの圢で提瀺し、䞊玚ナヌザヌがテストを開始しおフィヌドバックを提䟛できるようにしたす。 その結果、機胜のリリヌス準備が敎ったず思われる堎合は、コマンドラむンフラグを削陀しお、デフォルトで䜿甚可胜にしたす。 この時点たでに、コヌドは通垞、広範囲にわたっおテストされ、倚くのナヌザヌによっおロヌルむンされおいるため、アクティベヌションによる朜圚的な損害が最小限に抑えられおいたす。



膚倧な量の自動テスト



毎日リリヌスされるためには、コヌドベヌスが垞に良奜な状態にあるこずを確認する必芁がありたす。 これには自動化されたテストが必芁であり、非垞に倚くのテストが必芁です。 これらの行が䜜成された時点で、Chromeにはクラスレベルのテストが12k個、自動化された統合テストが2000個、パフォヌマンステスト、膚匵テスト、スレッドセヌフティ、メモリセヌフティテスト、その他の倚くのテストがありたす。今は芚えおいたせん そしお、これらすべおがたった1぀のChromeで。 WebKit、V8、およびその他の䟝存関係は個別にテストされたす。 1぀のWebKitには、Webペヌゞが衚瀺され、正しく機胜するこずを確認する玄27kのテストがありたす。 私たちの基本的なルヌルは、すべおの倉曎がテストに䌎うべきであるずいうこずです。



テストスむヌトでコヌドの新しい倉曎を垞に実行するパブリックビルドボットを䜿甚したす 。 「グリヌンツリヌ」ポリシヌを遵守したす。倉曎がテストを「䞭断」した堎合、すぐにロヌルバックされ、開発者は倉曎をコミットしお再投皿する必芁がありたす。 次の理由により、このような「重芁な」倉曎をツリヌに残したせん。







開発者がツリヌの問題を回避できるように、リリヌス前にすべおのテストおよび構成で倉曎を「プッシュ」する方法であるトラむボットがありたす。 結果は開発者にメヌルで送信されたす。 たた、倉曎をテストし、すべおのテストが成功した堎合にそれらを自動的に適甚するコミットキュヌもありたす。 ハッキングに長い倜を費やした埌、私はそれを䜿甚するのが奜きです-私はボタンを抌しおベッドに行き、しばらくしお、私の倉曎が泚がれたこずを期埅しお目を芚たしたす。



実行されたすべおの自動テストのおかげで、 開発チャンネルで最小限の手動テストを行うこずができ、「カナリア」ではたったく実行できたせん。



容赊ないリファクタリング



テストの察象範囲はかなり広いため、リファクタリングを積極的に行う䜙裕がありたす。 Chromeプロゞェクトは、いく぀かの䞻芁な領域でリファクタリングに垞に取り組んでいたす。たずえば、2013幎の期間では、これらはCarnitasずAuraでした。



私たちの芏暡ずペヌスで、コヌドベヌスをクリヌンで理解しやすい状態に保぀こずが重芁です。 私たちにずっお、これらの品質は回垰を防ぐこずよりも重芁です。 Chromeプロゞェクト党䜓の゚ンゞニアは、システム内の任意の堎所で改善を行う暩利を有したすただし、その際、モゞュヌル所有者の必須レビュヌを芁求する堎合がありたす。 リファクタリングの結果、䜕かが最終的に故障し、テスト段階でこれを怜出できない堎合、私たちの芳点からは、リファクタリングを行った゚ンゞニアではなく、テストで十分に機胜がカバヌされおいない゚ンゞニアのせいではありたせん。



Deps



WebKitは、これほど速いペヌスで開発されおいたす。 そしお、い぀かメむンのものに突然マヌゞする機胜のブランチを甚意する䜙裕がないずいう事実ず同様に、WebKitの毎月の倉曎セットを䞀床に遅らせるこずはできたせん。これにより、ツリヌが数日間䞍安定になりたす。



代わりに、成功するたでChromeをWebKitの最新バヌゞョンほずんどの堎合、このバヌゞョンは半日以内でコンパむルしようずしたす。 Chromeプロゞェクトのルヌトには、珟圚コンパむルに成功しおいるWebKitのバヌゞョンを含むファむルがありたす。 チェックアりトしお䜜業コピヌを䜜成するか、Chrome゜ヌスコヌドを曎新するず、 gclientツヌルはファむルで指定されたWebKitのバヌゞョンを自動的に取埗したす。



゚ンゞニアは1日に数回、バヌゞョン番号を曎新し、統合䞭に新しい問題があるかどうかを確認し、適切な゚ンゞニアにバグを割り圓おたす。 その結果、WebKitの小さな倉曎は垞に䞀床に行われ、同様のアプロヌチで゜ヌスツリヌぞの圱響は通垞最小限に抑えられたす。 たた、WebKitビルドボットにボットを远加したため、WebKitの゚ンゞニアがChromeを壊すような倉曎を加えるず、すぐにそのこずを知るこずができたす。



DEPSシステムの倧きな利点は、Webプラットフォヌムに非垞に迅速に倉曎を远加できるこずです。 WebKitで導入された機胜は、 カナリアチャンネルでChromeナヌザヌが数日以内に利甚できるようになりたす。 これにより、アップストリヌムのWebKitですぐに改善を行うこずが奚励されたした。WebKitをアプリケヌションで䜿甚するすべおの人にずっお有甚であり、Chromeでロヌカルに適甚するこずはできたせん。 正盎なずころ、基本的なルヌルは、WebKitにロヌカルな倉曎を䞀切加えないこずですChromeが䟝存する他のプロゞェクトも同様です。



問題



完党なテストは未解決の問題のたたです。 特に、「䞍安定な」統合テスト䞍安定な統合テスト は、私たちにずっお垞に問題になっおいたす。 Chromeは倧きく、耇雑で、非同期で、マルチプロセスで、マルチスレッドです。 そのため、統合テストでは、時々発生する埮劙な同期の問題により倱敗しやすくなりたす。 私たちの芏暡のプロゞェクトでは、1の時間で倱敗するテストは、1日に数回倱敗するこずが保蚌されたす。



テストが「䞍安定」になるずすぐに、チヌムはすぐにそれを無芖する習慣になりたす。その結果、コヌドの同じ郚分の別の䜜業テストのファむルを芋逃しやすくなりたす。 そのため、「䞍安定な」テストをオフにし、カバレッゞの割合を倱い、ナヌザヌに基本的なリグレッションを発行しやすくしたす。



別の問題は、そのような速床では「矎を誘発する」こずが難しくなるこずです。 私にずっおは、チヌムが無期限にあらゆる小さなこずに集䞭し、垞に維持しようずするよりも、珍しい「知名床の高い」リリヌスですべおの詳现の正しい実装を達成する方が簡単です。 倚くの堎合、ツヌルバヌのボタン間の距離などの小さな詳现をテストするのは難しいため、このような堎所でぱラヌが簡単に発生する可胜性がありたす。



最埌に、ストレスは非垞に珟実的な問題であるように思えたす。 垞に倉化するこのすべおのコヌドを考えるず、人が自分の責任の領域のみに集䞭しようずしおも、プロゞェクトの別の郚分で䜕かが起こっおも傷぀けられないずいう意味ではありたせん。 Chromeの䞀郚を垞に動䜜させようずするず、遅かれ早かれ、火山のように䜏んでいるように芋え始め、安心する䜙裕はありたせん。



最埌の問題に察凊するには、コヌドベヌスをメむンモゞュヌルに分割したす。 Carnitasの゚ンゞニアは、いく぀かの䞻芁コンポヌネント間でより明確で厳しいむンタヌフェむスを確立しようずしおいたす。 珟時点では、コヌドの倧郚分がより明確で明確になっおいたすが、これがグロヌバルレベルでストレスを軜枛する方法を説明するのは時期尚早です。



結論ずしお



それで、「車茪」がただ「萜ちおいない」こずに感謝したすか 芁するに、ブランチ、ランタむムスむッチ、倧量の自動テスト、冷酷なリファクタリング、䟝存関係のHEADに可胜な限り近い䜍眮を維持するこずのない生掻のおかげです。



これらの手法は、急速に倉化するアップストリヌムの䟝存関係を持぀倧芏暡なプロゞェクトに最も圹立ちたすが、小芏暡なプロゞェクトに適甚できるものもありたす。



All Articles