Ccmmutty logo
Commutty IT
4 min read

MatplotlibにPull RequestしMergeされた話

https://cdn.magicode.io/media/notebox/aa34707c-9f2f-4dbb-96f1-555c8b8cb36b.jpeg

ことの経緯

大層な話ではないのですが、matplotlibのドキュメントを読んでいたら、たまたまタイプミスを見つけました。
タイプミスくらい、ちょちょっと直してしまえば解決する問題です。ちょうど自分のパッケージのPull Requestガイドラインをどうしようかと悩んでいたところだったので、勉強のためにPull Requestをしてみようと思い立ちました。

公式ガイドを読みながらやってみる

MatplotlibはPull Requestのやり方を解説するガイドラインを公開しているので、まずはそれを読みました。
とりあえずmatplotlibのmainブランチを自分のgithubアカウントにフォークし、ローカルにクローンせよとのことで、その通りにします。
次に開発者向けのセットアップガイド通りにvenv環境を作って、開発モードでmatplotlibをインストールしました。
そして、クローンしたブランチからmy-featureというブランチを切りました。これもガイドライン通りですが、別にmy-featureという名前でなくても良いんだと思います。
$ git clone https://github.com/dermasugita/matplotlib.git
$ cd matplotlib
$ python -m venv .
$ source bin/activate
$ python -m pip install -ve .
$ git checkout -b my-feature origin/master
OK、ではこのブランチで作業をすれば良いわけですね。

コード(docstrings)を編集する

Pythonパッケージのdocumentation生成はは大体sphinxを使っており、コード内のDocstringsからドキュメントを自動生成しています。なので対象機能(今回はQuadMesh)のソースコードの場所が分かれば、そこの文章を編集すれば良いということになります。親切にもQuadMeshのドキュメントにGitHubのリンクが貼ってあったため簡単でした。
編集は必ずVimを使用してください(戦争の予感)。
これでタイプミスを修正できました。

コミットしてpush

いつものコマンドでForkのリモートにpushします。
$ git add lib/matplotlib/collections.py
$ git commit -m "Fixed typo in the QuadMesh docstrings"
$ git push -u origin my-feature

プルリクを立てる

GitHubのmy-featureのページに行き、Contributeをクリックします。
Matplotlibの場合、mainブランチにプルリクしてくださいとドキュメントに書いてあるので、そうします。
それと同時に、チェックボックス付きの注意書きみたいなのが出てくるので良い感じに埋めます。
こんなもんでいいかな、と思ったらCreate Pull Requestをクリックしましょう。
すると本当にプルリクが立ちます。
下の画像は実際にプルリクしたときの画面です。GitHubアクションでテストやらなんやらが動いていました。初めての体験なのでワクワクです。

マージされた

朝起きたらマージされてました。なんか嬉しい! というかチョー簡単だった!

雑感

人生初の巨大OSSへのプルリクでした。
一番びっくりした点は、mainブランチに直接マージされたという点です。自分のライブラリはmasterを安全に管理したいという考え方からmasterからdevelopを切って、そこからさらにfeature branchesを切る構成にしています。一方matplotlibほどのOSSが、mainからの直切りを採用していることには衝撃を受けました。どうやらpandasも同じ仕組みを採用しているようです。自分も今度からそうしようかと思うくらいには影響を受けています。
しかしその一方で、Pull RequestをトリガーとしたGitHub上でのテスト実行や、そもそものテストの充実度など、mainブランチ直切りを実現するためのハードルは高いようにも感じました。
OSSへのプルリクは学ぶことが多かったですね。皆さんも挑戦してみてはいかがでしょうか? まずは誤字脱字から始めるのが良いと思います、といってもそんなに見つかるものではないか笑

Discussion

コメントにはログインが必要です。