pandasへの貢献#

すべての貢献、バグ報告、バグ修正、ドキュメントの改善、機能強化、アイデアを歓迎します。

バグ報告と機能強化のリクエスト#

バグ報告と機能強化のリクエストは、pandasをより安定させるための重要な部分であり、Githubのイシューを通じて管理されています。イシューやリクエストを報告する際は、適切なカテゴリを選択し、イシューフォームをすべて記入してください。これにより、他のユーザーやコア開発チームがイシューの範囲を完全に理解できるようになります。

その後、イシューはpandasコミュニティに表示され、他のユーザーからのコメントやアイデアを受け付けるようになります。

貢献するイシューを見つける#

pandasやオープンソース開発が初めての場合は、興味のあるイシューを見つけるためにGitHubの「issues」タブを検索することをお勧めします。未割り当てのイシューでDocsおよびgood first issueのラベルが付いているものは、通常、新しい貢献者にとって良いものです。

興味のあるイシューを見つけたら、他の人が同じ作業を重複しないように、そのイシューを自分に割り当てるのが良いでしょう。Githubイシューで、正確なテキストtakeを含むコメントをすると、自動的にイシューが割り当てられます(これには数秒かかり、ページを更新しないと表示されない場合があります)。

何らかの理由でイシューの作業を続行できない場合は、他の人が再び利用できることを知るために、割り当てを解除してください。割り当てられたイシューのリストを確認できます。なぜなら、人々がもうそれに取り組んでいない可能性があるからです。もし割り当てられているイシューに取り組みたい場合は、現在の担当者に丁寧に引き継いでよいか尋ねてください(イシューの作業が中止されたと見なす前に、少なくとも1週間の非活動期間を設けてください)。

私たちはいくつかの貢献者コミュニティのコミュニケーションチャネルを持っています。ぜひ参加して、疑問に思ったことを質問してください。その中には、新しい貢献者向けの定例会議、開発者会議、開発者メーリングリスト、貢献者コミュニティ向けのSlackがあります。すべてのpandas貢献者はこれらのスペースに歓迎されており、互いに交流することができます。長年私たちと一緒にいるメンテナーでさえ、始めた頃はあなたと同じように感じていました。そして、私たちがどのように働き、どこに何があるかを知るにつれて、あなたを歓迎し、サポートできることを嬉しく思います。詳細については、次のセクションをご覧ください。

プルリクエストの送信#

バージョン管理、Git、GitHub#

pandasはGitHubでホストされており、貢献するには無料のGitHubアカウントにサインアップする必要があります。多くの人がプロジェクトで協力できるように、バージョン管理にはGitを使用しています。

Gitが初めての場合は、Git学習のためのこれらのリソースを参照できます。必要であれば、貢献者コミュニティに遠慮なく助けを求めてください。

また、プロジェクトはこのページでさらに詳しく説明されているフォークワークフローに従っており、貢献者はリポジトリをフォークし、変更を加えてからプルリクエストを作成します。そのため、このガイドのすべての指示を必ず読み、従ってください。

GitHubでフォークを通じてプロジェクトに貢献するのが初めての場合は、プロジェクトへの貢献に関するGitHubドキュメントをご覧ください。GitHubは、テストリポジトリを使用した簡単なチュートリアルを提供しており、リポジトリのフォーク、フォークのクローン、機能ブランチの作成、変更のプッシュ、プルリクエストの作成に慣れるのに役立つかもしれません。

GitHubでのフォークとプルリクエストについて詳しく学ぶための役立つリソースを以下に示します。

Gitの始め方#

GitHubには、gitのインストール、SSHキーのセットアップ、gitの設定に関する手順があります。ローカルリポジトリとGitHubの間でシームレスに作業できるようになる前に、これらのすべてのステップを完了する必要があります。

pandasのフォークを作成する#

コードの作業を行うには、pandasの独自のコピー(別名フォーク)が必要です。pandasプロジェクトページに移動し、Forkボタンをクリックしてください。Create Forkを選択する前に、メインブランチのみをコピーするチェックボックスをオフにしてください。フォークを自分のマシンにクローンします。

git clone https://github.com/your-user-name/pandas.git pandas-yourname
cd pandas-yourname
git remote add upstream https://github.com/pandas-dev/pandas.git
git fetch upstream

これにより、ディレクトリpandas-yournameが作成され、自分のリポジトリがアップストリーム(メインプロジェクト)のpandasリポジトリに接続されます。

シャロークローン(--depth==Nを使用、Nは1以上)を実行すると、バージョン番号が計算できなくなるため、一部のテストやpd.show_versions()などの機能が壊れる可能性があります。

機能ブランチの作成#

ローカルのmainブランチは、常にpandasリポジトリの現在の状態を反映している必要があります。まず、メインのpandasリポジトリと最新の状態であることを確認してください。

git checkout main
git pull upstream main --ff-only

次に、変更を加えるための機能ブランチを作成します。例えば、

git checkout -b shiny-new-feature

これにより、作業ブランチがmainからshiny-new-featureブランチに変更されます。このブランチでの変更は1つのバグまたは機能に特化させて、そのブランチがpandasに何をもたらすかを明確にしてください。多くの機能ブランチを持つことができ、git checkoutコマンドを使用してそれらを切り替えることができます。

ブランチを作成した後、メインの変更で機能ブランチを更新したい場合は、PRの更新のセクションを確認してください。

コードの変更#

コードを変更する前に、適切な開発環境をセットアップするために貢献環境のガイドラインに従っていることを確認してください。

コード変更を行った後、実行することで現在行われたすべての変更を確認できます。

git status

変更または追加する予定のファイルについては、以下を実行します。

git add path/to/file-to-be-added-or-changed.py

再度git statusを実行すると、以下のように表示されるはずです。

On branch shiny-new-feature

     modified:   /relative/path/to/file-to-be-added-or-changed.py

最後に、説明的なコミットメッセージを付けて変更をローカルリポジトリにコミットします。

git commit -m "your commit message goes here"

変更のプッシュ#

GitHubページに自分の変更を公開したい場合は、フォークした機能ブランチのコミットをプッシュします。

git push origin shiny-new-feature

ここで、originはGitHub上のリモートリポジトリに与えられたデフォルト名です。リモートリポジトリを確認できます。

git remote -v

上記のようにアップストリームリポジトリを追加した場合、次のような表示になります。

origin  [email protected]:yourname/pandas.git (fetch)
origin  [email protected]:yourname/pandas.git (push)
upstream        git://github.com/pandas-dev/pandas.git (fetch)
upstream        git://github.com/pandas-dev/pandas.git (push)

これであなたのコードはGitHubにありますが、まだpandasプロジェクトの一部ではありません。それには、GitHubでプルリクエストを送信する必要があります。

プルリクエストの作成#

コードの変更が完了したら、そのコード変更が正常に受け入れられるためには、pandas貢献ガイドラインに従う必要があります。

すべて問題なければ、プルリクエストを作成する準備ができています。プルリクエストは、あなたのローカルリポジトリからのコードがGitHubコミュニティでレビューされ、プロジェクトにマージされて次のリリースに登場する方法です。プルリクエストを送信するには

  1. GitHub上の自分のリポジトリに移動します。

  2. Compare & pull requestボタンをクリックします。

  3. その後、CommitsFiles Changedをクリックして、すべてが最後に問題ないことを確認できます。

  4. プレフィックスを含む説明的なタイトルを記述します。pandasはタイトルのプレフィックスに慣習を使用します。いつ使用すべきかの一般的なガイドラインと共に、いくつかの一般的なプレフィックスを以下に示します。

    • ENH: 機能強化、新しい機能

    • BUG: バグ修正

    • DOC: ドキュメントの追加/更新

    • TST: テストの追加/更新

    • BLD: ビルドプロセス/スクリプトの更新

    • PERF: パフォーマンス改善

    • TYP: 型アノテーション

    • CLN: コードクリーンアップ

  5. Preview Discussionタブで変更内容を記述します。

  6. Send Pull Requestをクリックします。

このリクエストはリポジトリのメンテナーに送られ、彼らがコードをレビューします。

プルリクエストの更新#

プルリクエストに対するレビューに基づいて、コードにいくつかの変更を加える必要があるでしょう。フィードバックに対応し、プルリクエストを更新するには、再度コードコミット手順に従うことができます。

また、pandasのmainブランチの更新がプルリクエストに反映されていることが重要です。pandasのmainブランチの変更で機能ブランチを更新するには、以下を実行します。

git checkout shiny-new-feature
git fetch upstream
git merge upstream/main

競合がない場合(または自動的に修正できた場合)、デフォルトのコミットメッセージが記載されたファイルが開くので、単にファイルを保存して終了します。

マージ競合がある場合は、それらの競合を解決する必要があります。例えば、https://help.github.com/articles/resolving-a-merge-conflict-using-the-command-line/でその方法が説明されています。

競合が解決されたら、以下を実行します。

  1. 更新したファイルをステージングするためのgit add -u;

  2. マージを完了するためのgit commit

mainでブランチを更新したい時点で未コミットの変更がある場合は、更新する前にそれらをstashする必要があります(stash docsを参照)。これにより、変更が一時的に保存され、更新後に再適用できます。

機能ブランチがローカルで更新されたら、GitHub上のブランチにプッシュしてプルリクエストを更新できます。

git push origin shiny-new-feature

任意のgit pushは、ブランチの変更でプルリクエストを自動的に更新し、継続的インテグレーションチェックを再開します。

開発環境の更新#

ローカルのmainブランチをpandasのmainブランチからの更新で定期的に更新し、開発環境を開発中に使用される様々なパッケージの変更を反映するように更新することが重要です。

mambaを使用している場合は、以下を実行します。

git checkout main
git fetch upstream
git merge upstream/main
mamba activate pandas-dev
mamba env update -f environment.yml --prune

pipを使用している場合は、以下を実行します。

git checkout main
git fetch upstream
git merge upstream/main
# activate the virtual environment based on your platform
python -m pip install --upgrade -r requirements-dev.txt

成功するプルリクエストのためのヒント#

プルリクエストの作成フェーズに到達した場合、コア貢献者の一人が確認するかもしれません。ただし、少数の人々がすべての貢献をレビューする責任を負っているため、ボトルネックになることが多いことに注意してください。

プルリクエストがレビューされる可能性を高めるためには、以下の点に注意してください。

  • 自明でない変更の場合は、PRの目的を明確にするためにオープンなイシューを参照する

  • 適切なテストがあることを確認する。これらはPRの最初の部分であるべきです。

  • プルリクエストは可能な限りシンプルにする。大きなPRはレビューに時間がかかります。

  • CIがグリーン状態であることを確認する。そうでなければレビュー担当者が見てくれないかもしれません。

  • プルリクエストの更新は、要求された場合、または数日ごとに行う