Skip to content
tutorials

GitHubが巨大なPRに対抗する武器

巨大なプルリクエスト(PR)は、チームの速度とコード品質を密かに低下させる要因です。GitHubが数年ぶりに発表した最大のリリースは、ついにネイティブな解決策を提供しますが、それにはワークフローに対する新しい考え方が必要です。

Dani Roth
GitHubが巨大なPRに対抗する武器

なぜあなたのPRがボトルネックになるのか

巨大なPRは開発速度を著しく低下させます。数百、時には数千行ものコードをレビューすることは不可能な作業となり、バグの見落とし、表面的なレビュー、そして深刻なレビュー疲れを引き起こします。これらの巨大な変更は、他の開発者が作業を統合することを妨げ、広範囲にわたるボトルネックを生み出します。

その結果、マージ競合の激化、コードブランチの急速な陳腐化、そしてリリースの大幅な遅延を招きます。この非効率なサイクルは、膨大なエンジニアリング時間を浪費し、コードベースに重大なリスクをもたらし、その複雑さゆえに開発チームを疲弊させます。

GitHubは、この永続的な問題に対する公式かつプラットフォームネイティブな回答として、Stacked PRsを提供します。この強力な機能は、場当たり的なコミュニティの回避策を超え、強力な依存関係管理をワークフローに直接統合します。

中心となる概念はシンプルです。大きなコード変更を、依存関係を持つ小さなプルリクエストの連鎖に分割することです。各PRは前のPRの上に直接構築されるため、機能全体をブロックすることなく、独立したレビュー、承認、マージが可能になります。

この依存関係の連鎖を説明します。最初の基盤となるPRはmainをターゲットにします(例:重要なデータベーススキーマの移行)。次に、2番目のPRがその最初のPRをターゲットにし、更新されたスキーマに依存する新しいAPIルートを実装します。最後に、3番目のPRが2番目のPRをターゲットにし、新しいAPIを利用するUIコンポーネントを追加します。これにより、複雑な機能に対して明確で論理的、かつ管理しやすい進行が可能になります。

新しいワークフロー:スタック、追加、送信

GitHub CLIを使用してStacked PRsを実装し、効率的なワークフローを実現しましょう。gh stack init [branch-name]で新しいスタックを開始します。このコマンドは基盤となるブランチを確立し、自動的にリポジトリのデフォルトブランチ(通常はmain)をベースにします。これにより、最も低レベルの変更が最初に準備されます。

変更を追加して、段階的に開発を進めます。gh stack add [branch-name]を使用して、スタック内の前のブランチを自動的にベースとする新しいブランチを作成します。これにより明確な依存関係の連鎖が確立され、基盤となる型からAPIルートに至るまで、各変更が前の変更の上に論理的に構築されるようになります。

重要なのは、このCLIの利便性の下でも標準的なGit操作が維持される点です。各gh stack addコマンドは最終的に新しいGitブランチを作成し、スタック内のどのブランチにおいても複数のコミットを含める柔軟性は維持されます。これにより、コミット履歴に対する詳細な制御を犠牲にすることなく、構造化された開発が可能になります。

スタック全体の変更が完了したら、gh stack submitという単一のコマンドで作業を統合します。これにより、スタック内のすべてのブランチが同時にGitHubにプッシュされ、それぞれに対して個別のプルリクエストが生成されます。GitHubはこれらをUI上でまとまりのあるstacked PRとして表示し、レビューを簡素化します。

GitHub CLIは強力な自動化と利便性を提供しますが、厳密な前提条件ではありません。各プルリクエストが正しい先行ベースブランチを明示的にターゲットにすることで、開発者は手動でスタックを構築することも可能です。GitHubはCLIによるオーケストレーションがなくても、これらの依存関係をインテリジェントに検出し可視化するため、同様のUI上の利点とレビュー体験が得られます。

CLIを超えて:現場でのスタック活用

GitHubは、ファーストクラスのUIサポートによりStacked PRsを強化しました。プルリクエスト一覧ページに表示されるようになった独自のスタックアイコンにより、そのPRがより大きな依存関係チェーンの一部であることを即座に把握できます。この視覚的なインジケーターにより、相互に関連する作業の特定と管理が効率化され、プロジェクト全体の可視性が向上します。

スタック内の任意のPRを開くと、専用のスタックビューを活用できます。この強力なインターフェースは依存関係チェーン全体を可視化し、各PRの位置、ターゲットブランチ、現在のレビュー状況を明確にマッピングします。複雑な機能セットの依存関係や進捗状況を一目で把握でき、即座に明確な理解が得られます。プルリクエストと新しいスタック機能の基本的な詳細については、About stacked pull requests - GitHub Docsを参照してください。

真の効率性はMerge stackボタンによって実現します。スタック内の個々のPRすべてが承認されると、ワンクリックで承認済みのチェーン全体をメインブランチにマージできます。GitHubはシーケンシャルなマージを自動的に実行し、リベースやブランチ更新といった中間ステップをすべて処理します。このアトミックな操作により、手動介入なしでクリーンかつ統合されたマージが保証され、デリバリーパイプラインが加速し、マージコンフリクトが最小限に抑えられます。

この記事が気に入ったら、毎朝同じようなものをメールで受け取れます。

1日1通 · 2クリックで解除 · サードパーティのトラッキングなし

スタックは人間だけのものではない

より小さく焦点を絞った差分(diff)は、レビュー担当者の作業を即座にブロック解除し、レビューサイクルを劇的に加速させます。コンテキストスイッチと認知的負荷が軽減されることで、承認が迅速化し、より質の高いフィードバックが得られます。チームはより速くイテレーションを回し、かつてない効率で機能をデプロイできるようになります。

人間によるワークフローを超えて、Stacked PRsはAIにとって強力な未来を切り拓きます。AIエージェントは、複雑なマルチパートの機能を、構造化された依存関係のあるプルリクエストとして送信できるようになります。これにより、AIが生成した巨大なコードが、管理可能でレビュー可能な単位に分割されます。AIは単一の巨大なコードの塊を出す代わりに、人間がレビュー可能な依存関係チェーンを出力し、洗練されたAIによる貢献を統合するための明確で監査可能なパスを提供します。

この機能は単なるワークフローの最適化にとどまらず、共同開発プラクティスにおける根本的な転換を意味します。複雑な機能のデリバリーや同時並行作業に対するチームのアプローチを根本から再定義するものです。開発者からの反応は圧倒的に肯定的であり、コア開発を進化させるというGitHubのビジョンが裏付けられました。チームのベロシティとプロジェクト全体の処理能力が即座に大幅向上することが期待されます。

よくある質問

GitHub Stacked PRsとは何ですか?

個別にレビュー可能であり、かつ単一のユニットとしてマージできる、依存関係のある小さなプルリクエストのチェーンを作成するためのGitHubネイティブ機能です。

Stacked PRsを使用するためにGitHub CLIは必要ですか?

いいえ。CLI(gh stackコマンド)を使用するとプロセスが効率化されますが、後続のPRを前のPRのブランチに向けて作成することで、手動でスタックを作成することも可能です。GitHubはスタックを自動的に検出します。

スタックと単なるPRのチェーンは何が違うのですか?

Gitの概念としては似ていますが、GitHubはこれらのチェーンを公式に「スタック」として認識するようになりました。これにより、スタック全体を管理、可視化、一括マージするための専用UIが提供されます。これは以前は手動で行う必要があったプロセスです。

アクティブなスタックがある状態で他のブランチで作業できますか?

はい。スタックはGitの上位にある管理レイヤーです。git checkoutのような標準的なGitコマンドを使用して無関係なブランチに切り替え、後でスタック内のブランチに戻っても問題ありません。

Found this useful? Share it.

For builders

Want Stork to write one of these about your product?

Send us a URL. We use the product, form a view, and publish what we actually think — in 8 languages, labeled Sponsored, with no copy approval on your side. That last part is what makes it worth quoting.

See how it works$500 · AI tools & software only