# プロジェクトに貢献する

フォークを通じてプロジェクトに貢献する方法について説明します。

GitHub でのプロジェクトへのコントリビューションは、開発者とコラボレーターが協力して共通の目標を達成するために不可欠なスキルです。 バグの修正、機能の追加、ドキュメントの改善のいずれであっても、コントリビューションのプロセスにより、組織化された効率的なコラボレーションが保証されます。

GitHub のフローに従ってリポジトリのフォーク、ブランチの作成、pull request の送信を行うことで、他の開発者の作業を中断することなく、プロジェクトへの変更を提案してフィードバックを得ることができます。

このガイドでは、GitHub UI とコマンド ラインを使用してプロジェクトに貢献する方法について説明します。 GitHub Desktop での投稿の詳細については、「[GitHub Desktopからのリポジトリのクローンとフォーク](/ja/desktop/adding-and-cloning-repositories/cloning-and-forking-repositories-from-github-desktop)」を参照してください。 GitHub CLI (コマンド ライン インターフェイス) と同じ方法については、[GitHub CLI のクイック スタート](/ja/enterprise-server@3.22/github-cli/github-cli/quickstart) を参照してください。

## フォークについて

他のユーザーのプロジェクトに貢献したいけれども、直接変更するアクセス許可がない場合は、プロジェクトの独自のコピーを作成し、更新を行ってから、それらの更新をメイン プロジェクトに含めることを提案できます。 このプロセスは、"フォークと pull request" ワークフローと呼ばれることがよくあります。

プロジェクトの独自のコピー (つまり "フォーク") を作成するのは、元のプロジェクトとコードを共有する新しいワークスペースを作成するようなものです。 これは、オープンソース プロジェクトの場合や、元のプロジェクトへの書き込みアクセス権を持っていない場合に役に立ちます。

自分のコピーで変更を行った後、それを pull request として送信できます。これは、変更をメイン プロジェクトに戻すことを提案する方法です。 詳しくは、「[リポジトリをフォークする](/ja/enterprise-server@3.22/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo)」をご覧ください。

## プロジェクトの独自コピーの作成

このチュートリアルでは、[Spoon-Knife プロジェクト](https://github.com/octocat/Spoon-Knife) (GitHub でホストされているテスト リポジトリ) を使用して、フォークと pull request のワークフローをテストします。

1. `Spoon-Knife` にある <https://github.com/octocat/Spoon-Knife> プロジェクトに移動します。
2. ページの右上隅の **\[フォーク]** を選択します。

   ![リポジトリの main ページのスクリーンショット。 フォーク アイコンと "フォーク 59.3k" のラベルが付いたボタンが濃いオレンジの枠線で囲まれています。](/assets/images/help/repository/fork-button.png)
3. \[所有者] の下のドロップダウン メニューを選び、フォークされたリポジトリの所有者をクリックします。
   > \[!NOTE] ユーザー名が淡色表示になっている場合、フォークが既に存在します。 その代わりに、既存のフォークを最新の状態にする必要があります。 詳しくは、「[フォークを同期する](/ja/enterprise-server@3.22/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork#syncing-a-fork-branch-from-the-web-ui)」をご覧ください。
4. 既定では、フォークの名前はその上流リポジトリと同じです。 必要に応じて、\[リポジトリ名] フィールドに名前を入力すると、フォークをさらに区別できます。
5. 必要に応じて、\[説明] フィールドにフォークの説明を入力します。
6. 必要に応じて、 **\[DEFAULT ブランチのみをコピーする]** を選びます。

   オープンソース プロジェクトへのコントリビューションなど、多くのフォーク シナリオでは、既定のブランチのみをコピーする必要があります。 このオプションを選ばないと、すべてのブランチが新しいフォークにコピーされます。
7. **\[フォークの作成]** をクリックします。

> \[!NOTE]
> 上流リポジトリから追加のブランチをコピーする場合は、**\[Branches]** ページから行うことができます。 詳しくは、「[リポジトリ内のブランチの管理](/ja/enterprise-server@3.22/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-and-deleting-branches-within-your-repository)」をご覧ください。

## コンピューターにフォークをクローンする

Spoon-Knife リポジトリのフォークが正常に生成されましたが、現時点では GitHub にのみ存在しています。 プロジェクトで作業できるようにするには、コンピューターに複製する必要があります。

フォークは、コマンド ライン、GitHub CLI、または GitHub Desktop を使用して複製できます。

1. GitHub で、Spoon-Knife リポジトリの**自分のフォーク**に移動します。

2. ファイル一覧の上にある **\[<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-code" aria-label="code" role="img"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg> Code]** をクリックします。

   ![リポジトリのランディング ページのファイル リストのスクリーンショット。 \[コード\] ボタンが濃いオレンジ色の枠線で囲まれています。](/assets/images/help/repository/code-button.png)

3. リポジトリの URL をコピーします。

   * HTTPS を使用してリポジトリを複製するには、"HTTPS" の下にある <svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-copy" aria-label="copy icon" role="img"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg> をクリックします。
   * Organization の SSH 認証機関から発行された証明書などの SSH キーを使ってリポジトリをクローンするには、 **\[SSH]** 、<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-copy" aria-label="Copy to clipboard" role="img"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg> の順にクリックします。
   * GitHub CLI を使ってリポジトリをクローンするには、 **\[GitHub CLI]** をクリックしてから、<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-copy" aria-label="Copy to clipboard" role="img"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg> をクリックします。

     ![\[コード\] ドロップダウン メニューのスクリーンショット。 リポジトリの HTTPS URL の右側に、コピー アイコンが濃いオレンジ色の枠線で囲まれています。](/assets/images/help/repository/https-url-clone-cli.png)

4. Mac または Linux では、ターミナルを開きます。 Windowsで Git Bash を開きます。

5. カレントワーキングディレクトリを、ディレクトリをクローンしたい場所に変更します。

6. 「 `git clone`」と入力し、先ほどコピーした URL を貼り付けます。 次のように、`YOUR-USERNAME` ではなく、自分の GitHub のユーザー名が表示されます。

   ```shell
   git clone https://HOSTNAME/YOUR-USERNAME/Spoon-Knife
   ```

7. **Enter** キーを押します。 これで、ローカルにクローンが作成されます。

   ```shell
   $ git clone https://HOSTNAME/YOUR-USERNAME/Spoon-Knife
   > Cloning into `Spoon-Knife`...
   > remote: Counting objects: 10, done.
   > remote: Compressing objects: 100% (8/8), done.
   > remove: Total 10 (delta 1), reused 10 (delta 1)
   > Unpacking objects: 100% (10/10), done.
   ```

## 作業のためのブランチの作成

プロジェクトへの変更を行う前に、新しいブランチを作成してチェックアウトする必要があります。独自のブランチに変更を保持することで、GitHub のフローに従うことになり、今後同じプロジェクトに再び貢献するのが容易になります。 「[GitHub フロー](/ja/enterprise-server@3.22/get-started/using-github/github-flow#following-github-flow)」を参照してください。

```shell
git branch BRANCH-NAME
git checkout BRANCH-NAME
```

## 変更の作成とプッシュ

[Visual Studio Code](https://code.visualstudio.com) などのお気に入りのテキスト エディターを使用して、プロジェクトにいくつかの変更を加えます。 たとえば、`index.html` のテキストを変更して自分の GitHub ユーザー名を追加できます。

変更を送信する準備ができたら、変更をステージングしてコミットします。
`git add .` は、次のコミットにすべての変更を含める必要があることを Git に指示します。
`git commit` は、これらの変更のスナップショットを取得します。

```shell
git add .
git commit -m "a short description of the change"
```

ファイルをステージングしてコミットするときは、基本的に、"変更のスナップショットを作成してください" と Git に指示します。 引き続き変更を行って、コミットのスナップショットをさらに多く作成できます。

現時点では、変更はローカルにのみ存在します。 変更を GitHub にプッシュする準備ができたら、変更をリモートにプッシュします。

```shell
git push
```

## pull request の作成

Pull request の作成は、他のユーザーのプロジェクトのフォークを生成する最後のステップです。 有益な変更を行い、元のリポジトリにそれを提案したい場合は、メンテナがレビューするための pull request を作成します。

そのためには、GitHub でプロジェクトが存在するリポジトリに移動します。 この例では、`https://github.com/<your_username>/Spoon-Knife` です。 自分のブランチが `octocat:main` よりも 1 コミット分進んでいることを示すバナーが表示されます。
**\[貢献]** をクリックし、 **\[Open a pull request]\(pull request を開く)** をクリックします。

GitHub を使用すると、フォークと `octocat/Spoon-Knife` リポジトリの違いを示すページが表示されます。
**\[Pull request の作成]** をクリックします。

GitHub を使用すると、タイトルと変更の説明を入力できるページが表示されます。 そもそもこの pull request を行う理由について、できるだけ多くの有用な情報と根拠を提供することが重要です。 プロジェクトの所有者は、変更が自分が考えるほどすべてのユーザーにとって役に立つかどうかを判断できる必要があります。 最後に、**\[pull request の作成]** をクリックします。