福田
はじめに
OSSへの貢献、とくに普段利用しているOSSにコントリビュートしたいという願望は多くの方にあるのではないでしょうか。わたし自身、OSSへのコントリビュートを実践するエンジニアに憧れを持っていますが、なかなか一歩を踏み出せていませんでした。そんな中、今年参加したEuroPython 2023というヨーロッパのPythonイベントのスプリント [1] で、はじめてCPythonへのコントリビュートの機会を得ました。内容はとても小さなドキュメントの修正でしたが、実際に経験できたことはとても嬉しかったです。
ご参考までに、わたしの小さなPRはこちらになります。
ドキュメントの充実と簡単なチャレンジから
Pythonは開発者向けドキュメントが非常に充実しています。少しでもOSSへのコミットをした経験がある方ならば、これらのドキュメントを読めばコントリビュートの流れがわかるようになっています。本記事では、どなたでもチャレンジできるように要点をまとめ、Issueの中でも
本記事は、2023年10月現在の情報をもとに執筆しています。内容は変更される可能性がありますので、最新およびより詳細な情報は開発者向けドキュメントの
CPythonへのコントリビュートのきっかけ
前述の通り、わたしはEuroPython 2023でのスプリントにて、はじめてCPythonへのコントリビュートを行いました。
EuroPython 2023では、さまざまなスプリントが実施されました。参加方法はとても簡単で今回の場合、スプリントの当日現地に行くだけでした。カンファレンスのチケットを持っていれば、誰でもスプリントに参加可能です。わたしは、
他にも次のようなスプリントがありました。気になったものをいくつか紹介します。
- Typing PEPs
- qutebrowser: A keyboard-driven, vim-like browser based on Python and Qt
- Patito – A data modelling layer built on top of polars and pydantic
- Pyodide
スプリントの詳細については、EuroPython 2023のWebサイトを参照してください。
スプリント会場は
CPythonへのコントリビュートの流れ
コントリビュートのおおよその流れは以下のとおりです。
- CPython環境の構築
- 対応できそうな課題を探す
- 対応・
動作確認をする - コミットとPRの作成
- ライセンスの承諾
- レビューとマージ
順に見ていきましょう。
CPython環境の構築
CPythonの開発環境を構築する方法はいくつかあります。今回は、Visual Studio Codeの拡張機能
筆者の環境と事前準備
スプリントでの筆者の環境は以下のとおりです。
- M2 MacBookAir macOS Ventura 13.
4.1 - Docker Desktop 4.
19. 0 - Visual Studio Code
- Visual Studio Code Dev Containers Extension
- Git client
筆者の環境はMacですが、Windows/
- Get Started | Docker
- Documentation for Visual Studio Code
- Dev Containers - Visual Studio Marketplace
- Set up Git - GitHub Docs
また、CPythonはGitHubのリポジトリで管理されているため、GitHub アカウントが必要になります。
GitHubのCPythonリポジトリをforkする
CPythonでは、GitHubのリポジトリをforkして、自分のリポジトリにコピーしてから開発を行います。
- ブラウザで https://
github. を開くcom/ python/ cpython - 右上のForkボタンをクリックする
- 自分のアカウントにforkする
Forkについての詳細は、GitHubの公式ドキュメントをご参考ください。
ローカルにgit cloneして、upstreamを設定する
自分のローカルにcloneして、Visual Studio Codeで開きます。<your-username>
は自分のGitHubのユーザー名に置き換えてください。
cloneしたリポジトリに移動して、upstreamを設定します。upstreamを設定しておくことで、forkしたリポジトリの更新をスムーズに取り込むことができ、常に最新の状態で開発を進められます。CPythonの開発は活発で、多くの人が更新を行なっています。自分の対応を行う前に、最新の状態にしておくためにupstreamを設定しておきましょう。
git remote -v
で設定を確認します。次のようになっていればOKです。
詳細については、以下の開発者向けガイドの
- 開発者ガイド:Setup and building
Dev Containerを起動する
Dev Containerを起動し、ビルドができることを確認します。事前にDocker Desktopを起動しておいてください。
Visual Studio Codeでcloneしたリポジトリを開き、Dev Containerを起動します。Dev Containerを起動するには左下の
次に
起動後、Visual Studio Codeで
CPythonとドキュメントのビルド テストの実行
Visual Studio Codeで起動したDev Containerにて、CPythonとドキュメントのビルド、テストの実行ができるか確認します。本セクションで紹介した内容については、次の開発者ガイドを参照してください。
- コンパイルとビルドについて:Compile and build
- テストについて: Running and writing tests
- ドキュメントのビルドについて:Build using make / make.
bat
まずはじめに、CPythonのビルドを実行します。ターミナルにて以下のコマンドを実行してください。--with-pydebug
オプションは、Pythonのビルド時にデバッグ情報と追加のランタイムチェックを有効にするためのものです。オプションの詳細については、公式ドキュメント
実行後、次のようなメッセージが表示されればOKです。
make
を実行しエラーが発生する場合には、make clean
を実行後、再度configure
とmake
を実行してみてください。筆者の環境では、make clean
を実行しないとエラーが発生する場合がありました。
次にpython.
を実行して、インタプリタが起動することを確認してください。
続いて、テストを実行してみましょう。次のコマンドを実行します。
特定のモジュールのみテストを実行する場合には、次のようにします。
最後にドキュメントのビルドを確認します。ドキュメントの修正を行う場合には必要です。次のようなメッセージが表示されビルドが成功すればOKです。
ビルドされたHTMLファイルcpython/
)
これで開発環境が整いました。Dev Containerのおかげで、簡単に開発環境の構築ができました。
対応できそうな課題を探す
次に、対応できそうな課題を探します。課題はGitHubのIssuesで管理されています。検索は、GitHubの検索機能を利用します。まずはじめに、ラベルが "easy" のIssuesを見てみると良いでしょう。その中で自分の興味のある分野、好きな機能などを探してみてください。
- CPythonリポジトリのlabel:easyのIssues:Issues ·python/
cpython
タイミングによっては、対応できそうな課題がなかなか見つからないかもしれません。EuroPythonのスプリントの中では、スプリントリーダーから参加者へ
- Python Organizationの "good first issue","help wanted" のIssues:Issue search results
対応・動作確認をする
修正したい課題を見つけたら、対応してみましょう。対応する時の注意点としては次のとおりです。
- Issueの内容をよく読む
- Issueの内容に沿って、修正を行う
- テストを実行して、修正が正しく動作することを確認する
- ドキュメントの修正を行う場合には、ドキュメントのビルドを行い、修正が反映されていることを確認する
修正していてわからないことがあれば、Issueにコメントを残してみましょう。他にもさまざまな方法で助けを求めることができます。Issueのコメントのほかに、メーリングリストや、Discordのチャンネルなどがあります。詳細については、開発者ガイドを参照してください。
コミットとPRの作成
良いコミットとは
CPythonでは良いコミットは以下の2点であるとされています。
- 1つのコミットで複数の修正を行わない
- 修正と関係のないコードのレイアウトの修正を行わない
またコミットメッセージの書き方として、Pythonの開発者ガイドの中でHow to Write a Git Commit Messageというブログ記事が紹介されています。その中では次のように書くと良いとされています。抜粋して紹介します。
- タイトルと本文を空白行で区切る
- タイトルは50文字まで
- タイトルをピリオドで終わらせない
1行目をタイトルとして概要を簡潔に書き、$ git log --oneline
で表示したときに読みやすいように心がけましょう。もちろん英語で書く必要があります。
コミットやコミットメッセージの詳細については、前述のブログや次の開発者ガイドを参照してください。
- 開発者ガイド:Making good commits
良いPull Requestとは
CPythonでの良いPull Request
- 適切なバージョンへの変更 - 一般的にはmainに行う
- PEP 8/
PEP 7に従うこと - 下位互換性を考慮すること
- 適切なテストが追加されていること
- すべてのテストにパスしていること
- ドキュメントが更新されていること
またこれらをチェックするために、以下のコマンドが用意されています。確実に実行するようにしましょう。
$ make patchcheck
- 開発者ガイド:Making good PRs
ライセンスの承諾
修正を行いCPythonへのPRを出すと、ライセンスの承諾を要求するボットが自動でコメントします。
コントリビュートを行うためには、Contributor Agreements に同意する必要があります。これはPythonを管理する非営利団体
署名するには、ボットのコメントにあるリンクをクリックし、数ステップの操作が必要です。操作はとても簡単です。内容をよく読み、同意する場合には署名してください。クリックするだけで署名を行うことができ、即日完了します。署名すると、ボットのコメントに署名したことが表示されます。
詳細については開発者ガイドを参照してください。
- 開発者ガイド:Licensing
レビューとマージ
ここまでで、コミットとPRの作成ができました。最後にレビューとマージが必要です。PRを出すと、CPythonのコア開発者がレビューを行います。レビューのコメントを受けて、修正を行いましょう。
マージまでは時間がかかる場合があります。気長に待ちましょう。わたしの場合は、PRを出してから約1ヵ月後にマージされました。
まとめ
本記事では、CPythonへのコントリビュートの流れを紹介しました。参加したスプリントでコントリビュートの流れを体験できたのは、とても良い経験でした。今回わたしは課題を持って参加しませんでしたが、課題を持って参加されている方も多くいらっしゃいました。課題解決の議論を気軽に、CPythonのコア開発者
CPythonは、多くの人によって開発、利用されているOSSです。30年以上の歴史を経て、多くの人が気軽にコントリビュートできる環境が整っています。開発環境構築の容易さ、開発者向けドキュメントの充実、また問題解決のための助けを求めることができるコミュニティの存在など、コントリビュートしやすい環境が整っています。すぐにコントリビュートできる課題に出会えないかもしれませんが、気長に探してみてください。
また、2023年10月26日