GitHub で積み上がったプルリクエストを処理する。

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
    gh stack
    CLI を活用すると、スタックの作成、連動型のリベースの実行、ブランチのプッシュおよびプルリクエストの作成、レイヤー間の移動など、すべての作業をターミナルから快適に行えます。
  • AI エージェントとの統合
    npx skills add github/gh-stack
    を実行することで、AI コーディングエージェントにスタックと連携する方法を学習させます。大きな差分をスタックに分割するか、当初からスタックを使って開発を進めることも可能です。

大規模なプルリクエストはレビューが難しく、マージが遅く、競合が発生しやすい傾向にあります。レビュワーが文脈を失い、フィードバックの品質が低下すると、チーム全体の生産性が低下してしまいます。スタック付き PR は、大規模な変更を互いに積み上がる一連の小さな焦点化されたプルリクエストに分解することで、この課題を解決します。各プルリクエストは独立してレビュー可能でありながら、全体としての整合性を保ちます。

スタック形式で PR を並べる

スタックとは、同一のリポジトリ内で順次関連付けられた一連のプルリクエストを指し、各プルリクエストは直前のプルリクエストがターゲットとするブランチをベースとし、最終的にメインブランチへと統合されるように順序付けされたチェーンを形成します。

GitHub は、スタック全体にわたって完結したサポートを提供します:

  • プルリクエストの UI ではスタックマップが表示され、レビュワーがレイヤー間を移動できます。
  • ブランチ保護ルールは、最終的なターゲットブランチに対して適用されます(直接のベースブランチのみを対象とはしません)。
  • スタック内の各プルリクエストに対し、最終ターゲットブランチを対象としていたかのように CI が実行されます。

gh stack
CLI はローカルのワークフローを管理します:ブランチの作成、リベースの管理、GitHub へのプッシュ、適切なベースブランチを持つプルリクエストの作成などです。一方、GitHub 上の PR UI ではレビュワーに必要なコンテキスト——レイヤー間の移動のためのスタックマップ、各レイヤー向けの焦点化された差分、および適切なルール適用——を提供します。

マージ準備が整った時点で、スタックの一部または全体をマージできます。各プルリクエストは直接マージするか、マージキューを通じてマージすることも可能です。マージ後、スタックに残りのプルリクエストは自動的に再ベースされ、未マージで最も低いプルリクエストのターゲットをベースブランチに変更されます。

CLI エクステンションのインストール

gh extension install github/gh-stack

使用しやすさのため
gh stack
のエイリアスを
gs
とする(オプション)

gh stack alias

スタックを始める

まずは最初のブランチを作成してチェックアウトします:

gs init auth-layer
... # コミットを実行 ...

スタックの新しいレイヤーを追加します(新規ブランチの作成とチェックアウトも同時に行われます):

gs add api-routes
... # コミットを実行 ...
gs add frontend
... # コミットを実行 ...

すべてのブランチをプッシュします:

gs push

スタック形式のプルリクエストを開きます:

gs submit

早速始めたいですか?「クイックスタート」ガイドからご覧いただくか、全体像については本文書をご覧ください。

同じ日のほかのニュース

一覧に戻る →

2026/04/14 2:54

1 つ、30 の WordPress プラグインを購入し、それぞれにバックドアを埋め込まれた。

## Japanese 翻訳: 元サマリーの原文は明確で正確であり、高レベルの概要として十分に範囲内に収まっており、改行文筆は必要ありません。

2026/04/14 0:31

『何事も起きない:スポーツ市場以外では常に「いいえ」と購入する Polymarket ボット』

## Japanese Translation: 本書では、Polymarket でスポーツ以外の Yes/No マーケットにおける「NO」エントリを取引することを目的に特化して構築された非同期の Python ボット「Nothing Ever Happens」を معرفیしています。本プロジェクトは娯楽目的でのみ提供されるものであり、保証や免責事項は一切適用されません(as-is)として提供されます。ライブフラグが設定されていないデフォルト状態では `PaperExchangeClient` が採用され、シミュレーションテストが行われます。リアルな取引を実行するには、環境変数を明示的に設定する必要があるためです。具体的には、`BOT_MODE=live`、`LIVE_TRADING_ENABLED=true`、`DRY_RUN=false` などを設定することでリアル取引モードを有効化します。また、ライブオーダーの送信を有効にするには、`PRIVATE_KEY`、`FUNDER_ADDRESS`(署名タイプ 1 および 2 の場合)、データベース URL、および Polygon RPC URL などの特定のエントリが必要となります。 ボットのアーキテクチャはモジュール化されており、ランタイムロジック、取引所クライアント、ダッシュボード UI、回復ツール、そしてコア戦略モジュールである「nothing_happens」で構成されています。ローカルでのセットアップでは、`pip install -r requirements.txt` によって依存関係をインストールし、`config.example.json` を `config.json` にコピーして非機密設定をその中で構成し、秘密鍵やフラグは `.env` ファイル(パス:`strategies.nothing_happens`)に保存します。ローカル設定は意図的に git 無視されており、ユーザーは環境変数 `CONFIG_PATH` を通じてランタイムが参照する異なるパスを指定できるようにしています。 Heroku でのクラウドデプロイメントでは、特定のコマンドヘルパー(`alive.sh`、`logs.sh`、`kill.sh`)を使用して、アプリの状態を管理し、ライブ取引の有効化/無効化やロギングを行うことができます。デプロイには、bot モード、プライベートキー、RPC URL、データベースに関する環境変数を `heroku config:set` コマンドを用いて設定する必要があります。-production 環境では、誤って長時間実行タスクを実行してしまうのを防ぐためにワーカーダイノを除外し、ウェブダイノのみを使用するようにスケーリング構成されています。また、`db_stats.py`、`export_db.py`、`wallet_history.py`、`parse_logs.py` などのユーティリティスクリプトは、データベースの点検やログ分析を実行することなく市場の変動を意図的に引き起こさずにこれらの情報を可視化することを可能にするため、透明性を高めています。

2026/04/14 3:50

# フォアファイアのビルドを 17% 高速化する手順 Mozilla のビルド環境を最適化し、**17% のパフォーマンス向上**を実現するための手順をご紹介します: - ビルドシステムと依存関係を最新の状態に更新してください。 - `MOZ_MAKEFLAGS` を適切に設定して(例:`-j$(nproc)`)、並列ビルドプロセスを有効にしてください。 - `-O2` や `-O3` といった最適化されたコンパイラフラグを、状況に応じて使用してください。 - 不要な負荷を削減するために、古くなったビルドアーティファクトを削除してください。 - インクリメンタルビルドにおいては、プリビルドされたツールキットやキャッシュされたオブジェクトファイルの利用を検討してください。 これらの変更を加えることで、コード品質を損なうことなくコンパイル時間を大幅に短縮できます。

## Japanese Translation: このアップデートは、Firefox のビルドシステムへの重要な修正を導入し、Buildcache Lua プラグインシステムを介して WebIDL バインディングコードの生成に対して有効なキャッシュ化を実現します。歴史的に、この Python ベースのステップ(`python3 -m mozbuild.action.webidl`)は ccache や sccache のような標準的なコンパイラキャッシュと互換性がありませんでした。これは任意のコマンドを効果的にラップできないためです。修正内容は `dom/bindings/Makefile.in` に条件付きラッパーを追加するものであり、Buildcache を使用する際にのみ有効化されます(`MOZ_USING_BUILDCACHE` が定義されている場合)。これにより呼び出しは `buildcache python3 -m mozbuild.action.webidl ...` へと変換されます。Buildcache の Lua ラッパー (`webidl.lua`) は `.webidl` ファイルや Python スクリプトなどの入力を、および `file-lists.json` と `codegen.json` から出力を識別し、ハッシュ化には `direct_mode` を使用します。Linux におけるタイミング測定では、このラッパーがなかった場合に Buildcache が使用されなかった場合の約 3m27sに対して、ccache(約 3m21s)および sccache(約 2m49s)が以前より優れていました。Lua ラッパーを有効にすると、ウォームビルド時間は約 1m12s–1m27s に低下します。設定には、central を更新するか `buildcache-wrappers` をクローンし、`~/.buildcache/config.json` で `lua_paths` を構成する(または mozconfig を通じて `BUILDCACHE_LUA_PATH` を設定)ことを必要とします。構成には、Rust クレートからの大規模なエントリに対応するための 2.5 GB の `max_local_entry_size` が含まれています。現在では概念実証として機能していますが、この最適化は将来の Firefox 開発において大きな可能性を示しており、反復サイクルの加速とより高速なアップデートをもたらすとともに、他の確定論的コード生成ステップへの拡張の可能性もあります。

GitHub で積み上がったプルリクエストを処理する。 | そっか~ニュース