Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 10725] ファイルの概要

このコミットは、GoプロジェクトのAUTHORSファイルとCONTRIBUTORSファイルに、新しい貢献者であるChristoph Hack氏の名前を追加するものです。

  • AUTHORSファイル: 通常、プロジェクトの主要な作者、著作権保持者、またはプロジェクトの歴史において重要な役割を果たした個人をリストアップするために使用されます。これは、プロジェクトの知的財産権に関する情報を提供することが多いです。
  • CONTRIBUTORSファイル: プロジェクトにコード、ドキュメント、バグ報告、テストなど、何らかの形で貢献したすべての個人をリストアップするために使用されます。これは、コミュニティの努力を認識し、感謝を示すためのものです。

これらのファイルは、オープンソースプロジェクトにおいて、貢献者の透明性を高め、プロジェクトの法的側面(特にライセンスと著作権)を明確にする上で重要な役割を果たします。

コミット

commit fbff033ecf3a644f083552e04958a14aa3b5c91d
Author: Russ Cox <rsc@golang.org>
Date:   Mon Dec 12 18:01:02 2011 -0500

    A+C: add Christoph Hack (individual CLA)
    
    R=golang-dev, dsymonds, gri
    CC=golang-dev
    https://golang.org/cl/5485048

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/fbff033ecf3a644f083552e04958a14aa3b5c91d

元コミット内容

A+C: add Christoph Hack (individual CLA)

このコミットメッセージは非常に簡潔で、「A+C」はAUTHORSCONTRIBUTORSの両方のファイルを指し、「add Christoph Hack (individual CLA)」は、Christoph Hack氏を個人貢献者ライセンス契約(CLA)を締結した上で追加したことを示しています。

変更の背景

この変更の背景には、Goプロジェクトへの新しい貢献者が現れ、その貢献がプロジェクトに組み込まれる前に、法的な要件を満たす必要があったことが挙げられます。多くの大規模なオープンソースプロジェクト、特にGoogleが関与するプロジェクトでは、貢献者がコードを提出する前にContributor License Agreement (CLA) に署名することを義務付けています。

CLAは、プロジェクトの所有者(この場合はGoogle)が、貢献されたコードをプロジェクトのライセンスの下で配布する権利を持つことを保証するための法的な合意です。これにより、将来的な著作権侵害の申し立てやライセンスに関する紛争のリスクを軽減し、プロジェクトの法的健全性を維持することができます。

Christoph Hack氏がGoプロジェクトに何らかの貢献(コード、ドキュメント、バグ修正など)を行ったため、その貢献を正式に受け入れるプロセスの一環として、彼の名前がAUTHORSおよびCONTRIBUTORSファイルに追加されました。これは、彼の貢献を公式に認識し、CLAの要件を満たしたことを示すものです。

前提知識の解説

Contributor License Agreement (CLA)

CLA(貢献者ライセンス契約)は、個人または企業がオープンソースプロジェクトに貢献する際に、プロジェクトの所有者と締結する法的な契約です。主な目的は以下の通りです。

  1. 著作権の明確化: 貢献されたコードの著作権が誰に帰属するかを明確にします。多くの場合、貢献者は自身の著作権を保持しつつ、プロジェクトの所有者に対して、そのコードをプロジェクトのライセンスの下で利用、変更、配布する永続的で取り消し不能な権利を付与します。
  2. ライセンスの統一性: プロジェクト全体で一貫したライセンスを維持することを可能にします。これにより、プロジェクトのコードベースが異なるライセンスのコードで混在し、将来的なライセンス問題を抱えるリスクを減らします。
  3. 法的保護: プロジェクトの所有者やユーザーが、貢献されたコードの使用に関して、将来的に著作権侵害の訴訟やその他の法的紛争に巻き込まれるリスクを軽減します。
  4. 再ライセンスの可能性: プロジェクトの所有者が、将来的にプロジェクトのライセンスを変更する必要が生じた場合に、貢献されたコードを新しいライセンスの下で再ライセンスする権利を確保できる場合があります。

Googleが関与する多くのオープンソースプロジェクト(Go、Kubernetesなど)では、CLAの締結が必須となっています。これは、Googleがプロジェクトの法的リスクを管理し、長期的な持続可能性を確保するための戦略の一環です。

AUTHORSファイルとCONTRIBUTORSファイル

  • AUTHORSファイル:

    • プロジェクトの主要な作者、創設者、または著作権を保持する個人や団体をリストアップするために使用されます。
    • 歴史的な記録としての意味合いが強く、プロジェクトの起源や主要な貢献者を追跡するのに役立ちます。
    • 法的な観点から、著作権表示の一部として機能することもあります。
    • 通常、このファイルに名前が記載されるのは、プロジェクトに対して非常に大きな影響を与えた、または初期段階から関わった人物に限られます。
  • CONTRIBUTORSファイル:

    • プロジェクトに何らかの形で貢献したすべての個人をリストアップするために使用されます。これには、コードのコミット、バグ報告、ドキュメントの作成、テストの記述、翻訳、デザインなど、多岐にわたる貢献が含まれます。
    • コミュニティの努力を認識し、感謝を示すためのものです。
    • プロジェクトの活動と成長を示す指標としても機能します。
    • AUTHORSファイルよりもはるかに多くの名前が含まれることが一般的です。

これらのファイルは、通常、プレーンテキスト形式で、各行に貢献者の名前と(オプションで)連絡先情報が記載されます。

Goプロジェクトの貢献プロセス

Goプロジェクトへの貢献は、通常、以下のステップで行われます。

  1. Issueの特定または作成: 解決したい問題や追加したい機能を見つける。
  2. コードの記述: 変更を実装する。
  3. テストの記述: 変更が正しく機能し、既存の機能を壊さないことを確認するテストを作成する。
  4. CLAの締結: 初めての貢献の場合、GoogleのCLAに署名する。
  5. 変更の提出: Gerrit(Goプロジェクトが使用するコードレビューシステム)を通じて変更を提出する。
  6. コードレビュー: 既存のGo開発者によってコードレビューが行われ、フィードバックが提供される。
  7. マージ: レビューが承認されると、変更がGoのリポジトリにマージされる。

このコミットは、上記のプロセスの中で、CLAの締結と貢献者のリストへの追加という、法的な側面と認識の側面を担う部分に該当します。

技術的詳細

このコミットは、Gitの基本的な機能であるファイルの変更(追加行)によって実現されています。具体的には、AUTHORSCONTRIBUTORSという2つのプレーンテキストファイルに対して、新しい行がそれぞれ1行ずつ追加されています。

  • ファイルの形式: これらのファイルは、特別な構造を持たない単純なテキストファイルです。各行が1人の貢献者を表し、通常は「名前 <メールアドレス>」の形式で記述されます。
  • Gitの差分(diff): Gitは、ファイルの変更を「差分」(diff)として記録します。このコミットの差分は、既存のファイル内容に対して新しい行が挿入されたことを示しています。+記号は追加された行を示します。
  • インデックスとハッシュ: index cae64eb87e..0385f470c6 100644のような行は、変更前と変更後のファイルのGitオブジェクトのハッシュ(SHA-1)と、ファイルのパーミッション(100644は通常のファイル)を示しています。これにより、Gitはファイルの変更履歴を効率的に追跡できます。
  • コミットのメタデータ: コミットには、作者(Author)、コミット日時(Date)、コミットメッセージ、レビュー担当者(R=)、CCリスト(CC=)、関連するコードレビューのURL(https://golang.org/cl/5485048)などのメタデータが含まれています。これらは、コミットの文脈を理解し、誰が、いつ、なぜ変更を行ったかを把握するために重要です。

この種の変更は、Gitの基本的な操作であり、特別なツールや複雑なスクリプトを必要としません。手動でファイルを編集し、Gitでコミットするだけで実現できます。

コアとなるコードの変更箇所

diff --git a/AUTHORS b/AUTHORS
index cae64eb87e..0385f470c6 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -38,6 +38,7 @@ Chris Farmiloe <chrisfarms@gmail.com>
 Chris Jones <chris@cjones.org>
 Chris Lennert <calennert@gmail.com>
 Christian Himpel <chressie@googlemail.com>
+Christoph Hack <christoph@tux21b.org>
 Christopher Nielsen <m4dh4tt3r@gmail.com>
 Christopher Wedgwood <cw@f00f.org>
 Clement Skau <clementskau@gmail.com>
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 0195bd52de..88c15093b7 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -74,6 +74,7 @@ Chris Hundt <hundt@google.com>
 Chris Jones <chris@cjones.org> <chris.jones.yar@gmail.com>
 Chris Lennert <calennert@gmail.com>
 Christian Himpel <chressie@googlemail.com> <chressie@gmail.com>
+Christoph Hack <christoph@tux21b.org>
 Christopher Nielsen <m4dh4tt3r@gmail.com>
 Christopher Wedgwood <cw@f00f.org>
 Clement Skau <clementskau@gmail.com>

コアとなるコードの解説

上記の差分は、AUTHORSファイルとCONTRIBUTORSファイルに対する変更を示しています。

  • diff --git a/AUTHORS b/AUTHORS: AUTHORSファイルに対する差分セクションの開始を示します。a/は変更前のファイル、b/は変更後のファイルを指します。
  • index cae64eb87e..0385f470c6 100644: 変更前(cae64eb87e)と変更後(0385f470c6)のファイルのGitオブジェクトハッシュと、ファイルのパーミッション(100644)を示します。
  • --- a/AUTHORS+++ b/AUTHORS: それぞれ変更前と変更後のファイルのパスを示します。
  • @@ -38,6 +38,7 @@: これは「hunk header」と呼ばれ、変更がファイルのどこで行われたかを示します。
    • -38,6: 変更前のファイルでは、38行目から6行(38行目から43行目)が表示されています。
    • +38,7: 変更後のファイルでは、38行目から7行(38行目から44行目)が表示されています。
    • これは、元の6行のブロックに1行が追加されたことを意味します。
  • +Christoph Hack <christoph@tux21b.org>: この行が、AUTHORSファイルに追加された新しい行です。行頭の+記号は、この行が追加されたことを示します。
  • 同様に、CONTRIBUTORSファイルに対しても同じ形式の変更が適用されており、Christoph Hack <christoph@tux21b.org>という行が追加されています。

このコミットは、既存のリストに新しいエントリを挿入する非常に単純なテキストファイルの変更であり、複雑なロジックやアルゴリズムの変更は含まれていません。これは、新しい貢献者をプロジェクトの公式記録に追加するための標準的な手順です。

関連リンク

参考にした情報源リンク