🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

GitHubのForkとPull Requestを理解しよう(共同開発入門)

これまでの記事で、自分のプロジェクトをGitHub上で管理する基本的な流れをマスターしました。しかし、GitHubの真の力は、自分一人で使う時以上に、他人のプロジェクトに参加し、共同で開発を進める時に発揮されます。

今回は、あなたが書き込み権限を持っていない外部のプロジェクト(オープンソースプロジェクトなど)に貢献するための、最も重要で基本的なワークフローである「Fork(フォーク)」と「Pull Request(プルリクエスト)」について、その概念と具体的な手順を丁寧に解説します。この流れを理解すれば、あなたも世界中の開発者と協力する第一歩を踏み出すことができます。


なぜForkが必要?直接pushできない理由

当然のことですが、あなたは他人のGitHubリポジトリに直接コードをプッシュ(アップロード)することはできません。もし誰でも自由に書き込めたら、プロジェクトはめちゃくちゃになってしまいますよね。これは、あなたが家の鍵を持っていない他人の家に入って、勝手に模様替えができないのと同じです。

では、どうすれば他人のプロジェクトに貢献できるのでしょうか?その答えが「Fork」です。

Forkとは、他人のリポジトリを、自分のGitHubアカウント上に丸ごとコピーして、自分専用の保管場所(リモートリポジトリ)を作成する機能です。自分の家に持ち帰って、自由に作業するための「自分用の写し」を作るイメージです。あなたはその自分用のリポジトリに対しては、完全な書き込み権限を持っています。

そして、自分用のリポジトリで行った修正を「こんな変更はどうですか?」と元のプロジェクトに提案する仕組みが「Pull Request」なのです。


Fork & Pull Requestの全体像

実際にコマンドを打つ前に、全体の流れを把握しておきましょう。オープンソースプロジェクトに貢献する際の典型的なフローは、以下の6つのステップで構成されます。

  1. Fork: 元となるプロジェクトを、自分のGitHubアカウントにコピーする。
  2. Clone: Forkして作成された「自分用の」リポジトリを、自分のPCにコピーする。
  3. Branch: 修正作業を行うための新しいブランチ(枝)を作成する。
  4. Modify & Commit: 自分のPCでコードを修正し、変更内容をコミットする。
  5. Push: コミットした内容を、「自分用の」GitHubリポジトリにプッシュする。
  6. Pull Request: 自分のリポジトリから元のプロジェクトへ、「この変更を取り込んでください」というリクエストを送る。

この流れを図にすると、以下のようになります。

[図解:1. 元のリポジトリ →(Fork)→ 2. 自分のGitHubリポジトリ →(Clone)→ 3. 自分のPC →(Push)→ 4. 自分のGitHubリポジトリ →(Pull Request)→ 5. 元のリポジトリ、という流れを示す図]


実践!オープンソースプロジェクトに貢献する手順

では、具体的な手順を追っていきましょう。練習として、まずは簡単なtypo(誤字脱字)の修正を提案する、というシナリオで進めていきます。

ステップ1: 貢献したいリポジトリをForkする

まず、貢献したいプロジェクトのGitHubページを開きます。ページ右上に表示されている「Fork」ボタンをクリックしてください。

[画像:GitHubのプロジェクトページにある「Fork」ボタンを指している様子]

「Create a new fork」という画面が表示されるので、リポジトリ名などを確認し、「Create fork」ボタンを押します。少し待つと、あなたのGitHubアカウント内に、そのリポジトリの完全なコピーが作成されます。

[画像:Fork作成後の自分のアカウント上にあるリポジトリ画面。URLが自分のユーザー名になっていることがわかる]

ステップ2: Forkしたリポジトリを`clone`する

次に、先ほどForkして作成した「あなたのアカウント上にある」リポジトリを、ローカルPCに`clone`します。元のリポジトリではなく、必ず自分がForkしたリポジトリのURLをコピーする点に注意してください。

git clone git@github.com:あなたのユーザー名/forkしたリポジトリ名.git

ステップ3: 作業用のブランチを作成する

クローンしたフォルダに移動し、これから行う修正作業のための新しいブランチを作成します。元の`main`ブランチを直接汚さずに、専用の作業場で作業を行うのがマナーです。`checkout -b`を使うと、ブランチの作成と移動を同時に行えます。

cd forkしたリポジトリ名

git checkout -b fix-typo-in-readme

ステップ4: コードを修正し、`commit` & `push`する

ローカルPCで、`README.md`などのファイルを開き、誤字を修正するなど、何らかの変更を加えて保存します。変更が終わったら、これまで学んだ通り`add`と`commit`で変更を記録します。

git add .

git commit -m "Fix a typo in README.md"

最後に、このコミットを**自分のリモートリポジトリ(Forkしたもの)**にプッシュします。このとき、作成したブランチ名を指定するのを忘れないでください。

git push origin fix-typo-in-readme

ステップ5: Pull Requestを作成する

いよいよクライマックスです。ブラウザで、**あなたのForkしたリポジトリ**のページを開き直してください。すると、「'fix-typo-in-readme' had recent pushes」という黄色い通知と、「Compare & pull request」という緑色のボタンが表示されているはずです。このボタンをクリックしましょう。

[画像:Forkしたリポジトリに表示される「Compare & pull request」ボタン]

「Open a pull request」というページに移動します。ここで、あなたの変更内容を元のプロジェクトに取り込んでもらうための依頼状を作成します。

[画像:Pull Requestの作成画面。タイトルと説明文の入力欄が強調されている]

内容を確認し、「Create pull request」ボタンを押せば、あなたの提案が元のリポジトリの管理者に送信されます。

ステップ6: レビューとマージ(を待つ)

Pull Requestが作成されると、元のリポジトリの管理者に通知が届きます。管理者はあなたのコードを確認し、コメントを付けたり、追加の修正を依頼したりすることがあります。やり取りを経て、変更内容に問題がなければ、管理者があなたのPull Requestをマージ(取り込み)してくれます。

[画像:自分のPull Requestが「Merged」と表示され、紫色のアイコンになっている様子]

マージされた瞬間、あなたの修正が正式にプロジェクトの一部となります。おめでとうございます!これがオープンソースへの貢献です。