【IT用語】フォーク(fork)とは?「意味」や「クローン(clone)との違い」などを解説!

ソフトウェア開発やオープンソースの世界でよく使われる「フォーク(fork)」という言葉。

GitHubやGitLabを使っている方であれば、「このリポジトリをフォークしました」といった表現を見たことがあるかもしれません。

でも、こんな疑問を持ったことはありませんか?

  • フォークってそもそも何?
  • どんなときに使うの?
  • クローンとの違いは?

この記事では、そんな疑問を持つ方向けに、「フォーク」の意味や使い方をわかりやすく解説します。

フォーク(fork)とは?

「フォーク(fork)」はもともと英語で「分岐する」や「枝分かれする」という意味を持つ言葉です。

ITの分野では、ソフトウェアやプロジェクトのコピーを作成して、元のプロジェクトとは別に独自に開発を進めることを指します。

たとえば、あるオープンソースのプロジェクトに新しい機能を加えたいけれど、そのプロジェクトの管理者がその機能を取り入れる予定がない場合、そのプロジェクトを「フォーク」することで、自分の環境で改良したり、新しい機能を追加したりできます。

つまり、フォークを使えば、元のプロジェクトには手を加えずに、自分だけの環境で修正したり、実験したりできるようになります。

GitHubやGitLabにおけるフォークの「意味」と「使い方」

GitHubやGitLabなどのバージョン管理サービスでは、「フォーク」はよく使われる操作です。

主に、他人が一般公開しているリポジトリを、自分のアカウントのリモートリポジトリにコピーして、そこから独自に開発を進めたいときに使います。フォークによって作られたリポジトリは、元のリポジトリとは独立しているため、たとえば以下のような作業が自由に行えます。

  • バグを修正する
  • 新しい機能を追加する
  • デザインを変更する

さらに、フォークによって作られたリポジトリは、自分で自由に編集できる独立したリポジトリになりますが、元のリポジトリとの“つながり”は保たれているため、自分が加えた変更を元のリポジトリに提案したいときは、プルリクエスト(GitLabならマージリクエスト)を通じて、元のリポジトリの管理者に変更の取り込みを依頼することもできます。

フォーク(fork)とクローン(clone)の違い

フォーク(fork)とクローン(clone)の違い

「フォーク」と似た言葉に「クローン(clone)」があります。どちらもコードをコピーする操作ですが、コピーする「場所」や「目的」が異なります。違いを以下の表にまとめてみました。

項目フォーク(Fork)クローン(Clone)
内容他人が一般公開しているリポジトリを個人用リモートリポジトリ(例:自分のGithubのアカウント上)にコピーする他人が一般公開しているを自分のパソコン(ローカルリポジトリ)にコピーする
主な目的他人が一般公開しているリポジトリとは別に、個人用リモートリポジトリで管理・改良したい場合ローカル環境で編集やビルド、実行を行いたい
通知の有無フォーク時に元のリポジトリの所有者に通知が届くことがあるクローンしても通知は行われない
よく使う場面他人が一般公開しているリポジトリをフォークして個人用リモートリポジトリにコピーした後、クローンして、ローカルで編集し、変更内容を個人用リポジトリにプッシュして、プルリクエストを作成するローカル環境で編集やビルド、実行を行う

クローンではできず、フォークでできることは?

クローンではできず、フォークでできることは何でしょうか?

それは、「他人が一般公開しているリポジトリに対して、変更内容の提案をプルリクエストとして送ることができる」という点です。

クローンは、他人が一般公開しているリポジトリを自分のパソコン(ローカルリポジトリ)にコピーするだけの操作です。このコピーには元のリポジトリとの「つながり」や「関係性」の情報は含まれません。そのため、元のリポジトリに書き込み権限がない場合は、自分が加えた変更を反映させることができません。

一方、フォークは、他人が一般公開しているリポジトリを個人用リモートリポジトリ(例:自分のGithubのアカウント上)にコピーします。このとき、Gitサービス(GitHubなど)は「どのリポジトリからフォークされたか」という情報を保持します。この情報があるおかげで、自分が行った変更を「プルリクエスト」として、元のリポジトリに提案できるようになります。

具体的にはフォークを用いて以下の処理をすることで、他人が一般公開しているリポジトリに対して改善や修正の提案が可能となります。

フォークしてプルリクエストを送る流れ
  • 一般公開しているリポジトリをフォークして、自分のリモートリポジトリにコピーする
  • フォークしたリポジトリを自分のパソコン(ローカルリポジトリ)にクローンする。
  • コードを編集して、変更内容をコミットする
  • 変更内容を自分のリモートリポジトリにプッシュする
  • 一般公開しているリポジトリに対して、変更内容のプルリクエストを作成する
  • 一般公開しているリポジトリの管理者はプルリクエストの内容をレビューし、問題がなければ変更をマージする

OSにおける「フォーク(fork)」の意味

実は「フォーク」という言葉は、オペレーティングシステム(OS)におけるプロセス管理の分野でも使われます。

Unix系のOS(LinuxやmacOSなど)では、fork()というシステムコールがあります。これは、現在動作中のプロセスをまるごと複製して、新しいプロセス(子プロセス)を作るというものです。

この機能を使うことで、プログラムは複数の処理を並行して実行できるようになります。

ただし、このOSでの「fork」は、Gitサービス(GitHubなど)で使われる「フォーク(fork)」とは文脈が異なります。どちらもコピーする操作ですが、用途と意味が違うことを覚えておきましょう。

本記事のまとめ

この記事では『フォーク(fork)』について、以下の内容を説明しました。

  • フォーク(fork)とは?
  • GitHubやGitLabにおけるフォークの「意味」と「使い方」
  • フォーク(fork)とクローン(clone)の違い
  • クローンではできず、フォークでできることは?
  • OSにおける「フォーク(fork)」の意味

「フォーク(fork)」とは、他人が一般公開しているリポジトリを自分のリモートリポジトリとしてコピーし、独立した開発を行うための仕組みです。

たとえば、新しい機能を追加したり、バグを修正したりといった作業を、自分の環境で自由に進めることができます。

そして、完成した変更を「プルリクエスト」として元のリポジトリに提案することもできます。これはクローンでは実現できない、フォークならではの強みです。

フォークという仕組みを正しく理解すれば、オープンソースの世界に参加したり、チーム開発を円滑に進めたりする際にとても役立ちます。

お読み頂きありがとうございました。

スポンサーリンク