大きな変更をする際の GitHub コントリビューションワークフロー

概要

このワークフローは、大きな変更を加える必要があるコントリビューターや、リポジトリの使用頻度の高いコントリビューターに適しています。頻度の高いコントリビューターは、通常は継続的な(長期にわたる)変更を取り扱います。つまり、構築/検証/ステージングのサイクルを繰り返したり、プルリクエストのサインオフやマージまでに数日かかったりする変更を扱います。

用語

まず、このワークフローで使用される Git/GitHub の用語をいくつか確認しましょう。

名前 説明
フォーク 通常は名詞として使用され、メイン GitHub リポジトリのコピーを指します。実際のところ、フォークは単にもう 1 つのリポジトリですが、メイン(親)リポジトリとの双方向的な接続が GitHub によって維持されるという特別な性質を持ちます。「まずリポジトリをフォークする必要があります」のように、動詞として使用される場合もあります。
リモート リモートリポジトリへの名前付きの接続です。「origin」や「upstream」などのリモートがあります。Git でこれらの接続をリモートと呼ぶのは、別のコンピューターにホストされているリポジトリを参照するときに使用されるからです。このワークフローでは、リモートは常に GitHub リポジトリです。
origin ローカルリポジトリと、そのクローン元のリポジトリとの間の接続に割り当てられる名前です。このワークフローでは、origin は、作成されたフォークへの接続を表します。「origin に対する変更を必ずプッシュしてください」のように、origin リポジトリ自体を指す名称として使用されることもあります。
upstream origin リモートと同じく、upstream も別のリポジトリへの接続の名称です。このワークフローでは、upstream は、ローカルリポジトリとメインリポジトリ(フォーク作成元)との間の接続を表します。「upstream から変更を必ずプルしてください」のように、upstream リポジトリ自体を指す名称として使用されることもあります。

Git および GitHub のリポジトリやブランチといった概念に馴染みがない場合は、Git および GitHub の基礎をまず確認してください。

ワークフロー

重要

設定の手順がまだ終わっていない場合は、まずそちらを完了してください。

このワークフローでは、変更は反復的なサイクルとして実行されます。変更は、使用しているデバイスのローカルリポジトリから、GitHub フォークに反映され、次にメインの GitHub リポジトリに反映されます。その後、再度ローカルに反映されて、他のコントリビューターの変更内容が統合されます。

GitHub フローの使用

Git および GitHub の基礎で説明されているように、Git リポジトリには、master ブランチと、まだ master に統合されていない作業中のブランチが含まれています。論理的に関連性のある一連の変更を導入するときは、このワークフローを通して変更を管理するための​作業ブランチ​を作成することをお勧めします。これを作業ブランチと呼ぶのは、master ブランチに統合できる状態になるまで変更の反復修正や手直しをするための作業用スペースとなるからです。

関連する変更を特定のブランチに隔離しておくと、これらの変更を独立して管理したり導入したりでき、公開サイクルの特定のリリースをターゲットにすることもできます。おこなう作業の種類にもよりますが、実際の作業環境では、リポジトリ内に複数の作業ブランチができることがよくあります。それぞれ別のプロジェクトの複数のブランチで同時に作業することも珍しくありません。

メモ

master ブランチで変更をおこなうことは​お勧めしません。例えば、あなたが master ブランチを使用して、期日の決まっている機能リリースにいくつかの変更を導入しているとします。あなたは変更作業を終えて、リリースを待っています。リリースの前に、緊急の修正作業を依頼されたので、あなたは master ブランチ内のファイルを変更し、変更をパブリッシュしました。この場合は、最新の修正結果と、特定期日のリリースに導入した保留中の変更の​両方​が誤ってパブリッシュされてしまいます。

次に、ローカルリポジトリ内に新しい作業ブランチを作成し、ここで変更案を反映します。Git クライアントによって作業方法が異なるので、使用するクライアントのヘルプを参照してください。プロセスの概要については、GitHub ガイドの GitHub フローの説明を参照してください。

プルリクエストの処理

いくつかの変更案を新しいプルリクエスト(PR)にまとめて提出します。PR は、宛先リポジトリの PR キューに追加されます。プルリクエストは GitHub の共同作業モデルを動かすための要素です。プリリクエストを使用して、作業ブランチから変更をプルし、別のブランチにマージするよう依頼することができます。ほとんどの場合は、メインリポジトリ内のデフォルト/master ブランチがマージ先になります。

検証

プルリクエストを宛先ブランチにマージする前に、1 つ以上の PR 検証プロセスを経なければならない場合があります。検証プロセスは、変更案の範囲や宛先リポジトリのルールに応じて異なります。プルリクエストを提出すると、そのコンテンツがレビューされ、適宜メインリポジトリにマージされます。

レビューとサインオフ

すべての PR 処理が完了したら、その結果(PR コメント、プレビュー URL など)を見直し、他の変更を加える必要がないかを確認したうえで、マージに進むためのサインオフをおこないます。PR レビュー担当者がプルリクエストをレビューする場合は、マージ前に解決すべき未処理の問題や質問があるときに、コメントでフィードバックが提供されることもあります。

プルリクエストが問題のない状態でサインオフされると、変更が親ブランチにマージされて、プルリクエストがクローズされます。

パブリッシュ

変更を次のパブリッシュ実行に含めるためには、PR レビュー担当者によってプルリクエストがマージされる必要があります。プルリクエストは、通常は提出された順番でレビューおよびマージされます。特定のパブリッシュ実行にプルリクエストをマージする必要がある場合は、事前に PR 担当者と話し合って、パブリッシュ前にマージが確実におこなわれるようにします。

このページ