この記事は、 初めて OSS 開発(IPython)にコミットした話(その1) の続きです。
いざやってみる
とりあえず CONTRIBUTING.md を読む
規模の大きいプロジェクトにはよくあるファイルで、開発に参加する際のルールが全て記載されています。 PR についての決まりは「master ブランチに対して出してね」くらいでした。 ここには記載されていませんでしたが、他の開発者はみんなリポジトリをフォークしてから PR を出していたのでそれに習いました。
実装する
編集したクラスはこの機能です。
まあ、方針は定まっていたので実装自体は秒で終わりました。 実装する際は以下のような点を意識しました。
- IPython は Python3.6 をサポートしているので、
:=
などの新しい文法を使わない。 - 破壊的変更をしない。
- 引数を追加するときはデフォルト値(ex:
hoge=None
)を持たせて、引数が渡されなくても動作するようにする。 flag=False
のように新機能はデフォルトではオフにする。
- 引数を追加するときはデフォルト値(ex:
レビューを受ける
恥ずかしいですけど百聞は一見に如かずということで、今回の PR のリンクを共有しておきます。
簡単な機能追加だからポチッと承認されて終了かなと思ったけどそんなことはなく、 以下のようなコメントを頂きました。
darker
を使ってフォーマットしてください。- 変数名を
extra
からextras
に変更してください。 - ドキュメント自動生成時にエラーが起きているので調査する必要があります。
- 新機能の説明を
.rst
形式のファイルで書いてください。
1. darker
を使ってフォーマットしてください。
darker
というフォーマッタをインストールしてコマンドを実行するだけで終了しました。 一応、コーディング規約には準拠していたのですが、独自の少し細かいルールがあるみたいです。
2. 変数名をextra
からextras
に変更してください。
最初、extras
をextra
と読み間違えて「どういうことだ?」と思って反論(?)してしまったのですが、 「複数の要素を受け付ける変数名は複数形であるべきだ」という意図のレビューだったそうです。 これには同意なのでレビューに従って修正しました。
3. ドキュメント自動生成時にエラーが起きているので調査する必要があります。
これの解決の方が機能追加よりもむしろ良い貢献だったかもしれません。どうやら同じエラーが複数の PR でも起きていたようで原因調査中だったらしいです。 このエラーは、GitHub Actions1 の実行中に起きていたので、 その設定ファイル(.github/workflows/docs.yml)を見て、 自分の PC で同じコマンドを実行してみました。
すると、intersphinx という機能を使って IPython のドキュメントから ipyparallel という 別のライブラリのドキュメントを張っている箇所でエラーが起きていました。 その原因は単純で、ipyparallel がインベントリと呼ばれる URL の設定を変更したので、IPython もそれに追従する必要があったということです。
インベントリは sphinx
がインストールされていれば、intersphinx の公式ドキュメントより
1
$ python -msphinx.ext.intersphinx https://ipyparallel.readthedocs.io/en/stable/objects.inv > ipykernel
を実行すれば入手できます。(出力が膨大なのでファイルに出力した。)
無効になったリンクを修正したらエラーは解決したのでプッシュをしたら、 「Thank you very much」「Big thanks」というコメントを頂きテンションが上りました。 そして、「この修正部分だけ先に master ブランチに反映させよう」ということになりました。
実はこのときの修正箇所はたった 3 ヶ所だったのですが、それだけを 1 つのコミットとしていました。 そのおかげでコミットを cherry-pick するだけで簡単にバグ修正単体の PR が作成できました。 粒度が細かすぎるのもどうなんだろうと思いましたが今回は成功だったようです。
4. 新機能の説明を.rst
形式のファイルで書いてください。
要は、英作文してくださいってことですね。とりあえず書きました → approve されて merge されました → そしたら、後で作成された PR で 9 割くらい書き直されてました。(笑) メンションされていなかったのでコレを見つけたのは偶然でした。
そして完成したのがこちらになります。
多分、英作文スキルが駄目だったのではなく、単に僕の文章に面白みがなかったことが原因だったみたいです。 今回実装した機能が自分が欲しいものだったので自己中っぽさが出ないように、 スポットは副産物的な部分に当てて YouTubeVideo
はそのついでみたいに書いたのですが、 修正された文章だと YouTubeVideo
が結構クローズアップされていました。 また、サンプルコードは内部の挙動の説明用ではなく実用的なものに置き換わっていて、より魅力的になっていました。
これだから自己 PR が苦手なわけだ。(プルリクではない。)
感想
英語には生まれたころから苦手意識があったので不安でしたが、なんとか会話のキャッチボールは成り立ったようで良かったです。最初は緊張してましたが途中からは楽しくなってました。また、
1
pip install ipython
をして自分が追加した機能が実行されるのは不思議な感覚でした。
機械学習系のライブラリを利用してる際によくソースコードを参照して定義を確認するのですが、 コードを見てるとそろそろ自分も実装できるレベルになっているのではないかと最近感じてきています。 今回、OSS 開発が意外と楽しいということを知ることができたので、日頃から共同開発者という気持ちで利用して アイデアが浮かび次第コントリビュートしたいと思いました。
リモートリポジトリにプッシュしたり、PR を出したときにコマンドを自動で実行してくれるサービス。 個人のパブリック・リポジトリなら無料で、このブログでも使っている。 ↩