Home Blog 初めてOSS開発(IPython)にコミットした話 ①
初めてoss開発(ipython)にコミットした話 ①
Cancel

初めてOSS開発(IPython)にコミットした話 ①

ダイジェスト


JupyterLab で重い処理が終了したら YouTube を流して気付ける様にする機能を作りたい。しかし、Chrome は IFrame の自動再生をデフォルトでは無効化するから、IFrame の属性を編集できる機能を追加したくなり、人生初めて OSS へプルリクエスト(以下、PR)を出すことにした。最終的に承認されて公式ドキュメントにも反映された。
The ability to configure magics to be lazily loaded has been added to IPython. See the ipython --help-all section on MagicsManager.lazy_magic. One can now use:
(ただ、自分のための機能は fork してそこで作ればよかったのでは、と後で気づいた。) PR を出すと自分の編集箇所と無関係な箇所で GitHub Workflow がエラーを出したのでついでに直したら、他の PR でも起きてた問題が解消されてらしくお役に立たみたいで嬉しかった。このとき、commit の粒度をちゃんとしていてよかったなと思った。

まず、OSS とは

OSS とはオープンソースソフトウェアの略で、利用者がソースコードの使用・改変・再配布ができるソフトの総称です。プログラミング言語やその外部ライブラリの多くは OSS です。例えば、こちらの Python の OSS ライブラリ一覧 を見ると Python でデータ分析をしている人にとっては親しみのある名前がたくさん並んでいると思います。

OSS の利点は、ソースコードが公開されているので利用者が共同開発者として機能追加・バグ修正をすることができます。開発以外にもバグ報告やドキュメント作成とその翻訳などから貢献することもできます。

少し前に接触確認アプリ COCOA のバグが話題になり、その時の朝日新聞に GitHub の issue のスクショが載っていました。(プログラマとしてはよく見る画面が新聞に切り抜きされているのが面白かったです。)あの件も OSS の形をとっていなかったら、一般の方がソースコードを調査することができなかったのでもっと発見が遅れていたことでしょう。

コミットしようと思った経緯

僕の IPython の使い方

今回、私は IPython の開発プロジェクトに参加しました。IPython の「I」は Interactive の略で、ターミナルで

1
$ python

としたときに開かれる対話モードをよりリッチにしてくれるライブラリです。Jupyter Lab というライブラリを使うともっとリッチな画面でプログラミングすることができます。

対話モードだとターミナルをシャットダウンするまで生成した変数(オブジェクト)が削除されないので、データ分析の様に同じ変数に対して色々な処理を試してみたいときによく使っています。

作りたい機能

データ分析のアルゴリズムによっては実行終了するまで数十分から 1 時間くらいかかる処理もあったりします。その間に別の作業をしたり PC を放置して寝転んだりして、終わったかなと思ったときに実行画面に戻ってきます。この確認を何回もするのがめんどくさいので IPython 側から人間に知らせる機能を作りたいなと思いました。この手の話題は検索してみると

  • LINE や Slack のように PC のシステム通知を使って(macbook だと)右上にメッセージを表示する。
  • Slack API を使って bot から DM する。
  • echo "^G", say, afplay などの音が出るコマンドを実行する。

などいろんなアプローチを見つけました。そこで僕は

  • YouTube を再生する。

という方法なら面白いし実装コストも少ないのではないかと思い、開発することにしました。

生じた問題 → コントリビュートのきっかけ

IPython には元々、YouTubeVideo という YouTube を IFrame で埋め込めるクラスが用意されています。1 これを使って先ほどの機能を叶えるためには、IFrame で埋め込んだプレーヤーを自動再生することが必須なのですが、YouTube 側の過去の仕様変更により Chrome では allow="autoplay" を IFrame の属性に追加しなければ自動再生できません。しかし、IPython で提供されている YouTubeVideo からは IFrame の属性をいじることができませんでした。

このとき、「属性を追加するインターフェースは IPython 側が用意してくれてもいいのになー、実装も簡単だし。」と感じました。 そこで、OSS の利用者は同時に共同開発者であるということを思い出し、以前から OSS 開発に興味があったことから、 PR を出してみることにしました。2

ここから実際にやったことの話になり流れが変わるので一旦終わりにします。 初めて OSS 開発(IPython)にコミットした話(その2) に続く。

  1. コミットログを見ると 10 年以上前からあるみたい。 

  2. 「別に IFrame を埋め込む機能を 0 から作ればよくね?」だって?もちろんそれは僕も思いました。PR 出した後にね!!(ときすでにお寿司)