
2026/04/14 5:36
GitHub で積み上がったプルリクエストを処理する。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
本テキストでは、「Stacked PRs(スタックされたプルリクエスト)」を紹介します。これは、大規模で管理が困難なプルリクエストによる問題、例えばレビューの難易度が高いこと、マージにかかる時間が長いこと、頻繁な衝突などを解決するために GitHub が実装した機能です。開発者は一度に巨額の変更を提出するのではなく、作業を注力し独立した層に分割し、それらが互いに縦方向に積み上げられ、最終的に main ブランチへマージされるまで進めます。
GitHub 本家はこのワークフローを、ナビゲーション用の可視化「スタックマップ(stack map)」UI でサポートしており、ブランチ保護規則がターゲットとなる最終ブランチに対して自動的に適用され、継続的統合(CI)システムが各層ごとに個別にテストを実行し、main ブランチへのマージを想定する manner で動作します。また、ユーザーはスタックの全て、または一部の PR をマージすることができ、残りの PR は自動的にリベースされ、スタック構造が維持されます。
このワークフローをローカル環境で管理するためには、開発者は
gh stack CLI ツールを使用します。これは、拡張機能をインストール(gh extension install github/gh-stack)し、gs init、gs add、gs push、gs submit などのコマンドを用いてブランチを作成し、カスケードリベースを管理し、スタックをレビューまたはマージのためにオープン化することを意味します。将来的には、AI コーディングエージェントもこのスタックを自律的に処理できるように、特定のスキルパッケージ(npx skills add github/gh-stack)をインストールすることで教育できます。Ultimately(結果として)、Stacked PRs はチームが段階的なレビューを通じてコードの品質を向上させながら、大規模なコードベースを維持するために必要な手動作業を劇的に削減することを可能にします。本文
大規模な変更を、互いに積み上がる小さなレビュー可能なプルリクエストに分割し、GitHub 固有の機能をフル活用しながら進めましょう。gh stack CLI を組み合わせて使用します。
クイックスタート
オーバービュー
- GitHub ネイティブのスタック付き PR
プルリクエストを順序立てたスタックとして整理し、ワンクリックですべてマージできます。各プルリクエストは変更の一部である「レイヤー」に対応しており、個別にレビューされ、統合されたタイミングでマージされます。 - 簡素化されたスタック管理
GitHub の UI からスタック内のプルリクエスト間で移動し、すべてのレイヤーのステータスを一目で確認できます。さらに、ワンクリックでスタック全体にわたる連動型のリベースをトリガーすることも可能です。 - 強力な CLI
CLI を活用すると、スタックの作成、連動型のリベースの実行、ブランチのプッシュおよびプルリクエストの作成、レイヤー間の移動など、すべての作業をターミナルから快適に行えます。gh stack - AI エージェントとの統合
を実行することで、AI コーディングエージェントにスタックと連携する方法を学習させます。大きな差分をスタックに分割するか、当初からスタックを使って開発を進めることも可能です。npx skills add github/gh-stack
大規模なプルリクエストはレビューが難しく、マージが遅く、競合が発生しやすい傾向にあります。レビュワーが文脈を失い、フィードバックの品質が低下すると、チーム全体の生産性が低下してしまいます。スタック付き PR は、大規模な変更を互いに積み上がる一連の小さな焦点化されたプルリクエストに分解することで、この課題を解決します。各プルリクエストは独立してレビュー可能でありながら、全体としての整合性を保ちます。
スタック形式で PR を並べる
スタックとは、同一のリポジトリ内で順次関連付けられた一連のプルリクエストを指し、各プルリクエストは直前のプルリクエストがターゲットとするブランチをベースとし、最終的にメインブランチへと統合されるように順序付けされたチェーンを形成します。
GitHub は、スタック全体にわたって完結したサポートを提供します:
- プルリクエストの UI ではスタックマップが表示され、レビュワーがレイヤー間を移動できます。
- ブランチ保護ルールは、最終的なターゲットブランチに対して適用されます(直接のベースブランチのみを対象とはしません)。
- スタック内の各プルリクエストに対し、最終ターゲットブランチを対象としていたかのように CI が実行されます。
gh stack CLI はローカルのワークフローを管理します:ブランチの作成、リベースの管理、GitHub へのプッシュ、適切なベースブランチを持つプルリクエストの作成などです。一方、GitHub 上の PR UI ではレビュワーに必要なコンテキスト——レイヤー間の移動のためのスタックマップ、各レイヤー向けの焦点化された差分、および適切なルール適用——を提供します。
マージ準備が整った時点で、スタックの一部または全体をマージできます。各プルリクエストは直接マージするか、マージキューを通じてマージすることも可能です。マージ後、スタックに残りのプルリクエストは自動的に再ベースされ、未マージで最も低いプルリクエストのターゲットをベースブランチに変更されます。
CLI エクステンションのインストール
gh extension install github/gh-stack
使用しやすさのため gh stack
のエイリアスを gs
とする(オプション)
gh stackgsgh stack alias
スタックを始める
まずは最初のブランチを作成してチェックアウトします:
gs init auth-layer ... # コミットを実行 ...
スタックの新しいレイヤーを追加します(新規ブランチの作成とチェックアウトも同時に行われます):
gs add api-routes ... # コミットを実行 ... gs add frontend ... # コミットを実行 ...
すべてのブランチをプッシュします:
gs push
スタック形式のプルリクエストを開きます:
gs submit
早速始めたいですか?「クイックスタート」ガイドからご覧いただくか、全体像については本文書をご覧ください。