Sphinx のメンテナになって一年が経過した話
クリスマスが過ぎてから始まる Sphinx アドベントカレンダーへようこそ (嘘)
Sphinx 大型連載第二夜です。
タイトルにある通り、Sphinx のメンテナ活動をして一年が過ぎたので、その話をします。
OSS 開発者のひとつのサンプルケースとして、何かの参考になれば幸いです。
Sphinx のメンテナ活動をはじめました
去年の 12月から Sphinx のメンテナ活動をはじめました。
Python のリリースマネージャ活動が忙しかったからか原作者の Georg の活動が鈍り、
また、その後を継いだ清水川さんも忙しくて身動きが取れなくなっていたことから、
コミット権をもらっていたことだし、パートタイムで手伝うかと思ったことがきっかけでした。
以前からコミット権は持っていたものの、一切メンテナとしての活動をしていなかったので、
徐々にチケットが溜まっていく様子に後ろめたくなったのかもしれません。
増え続けるチケットの戦い
Sphinx は 2015年1月はじめに bitbucket から github にプロジェクトが移動しました。
移動した時点では 1662件だったイシューは、現在 3300件弱あります。
bitbucket 時代は開発開始から 6年間分、そして github 時代は約 2年間分なので、イシューが増加するペースはかなり増していることがわかります。
また、github 移行後の増加グラフを見ると、2015年代は 40件/月程度だったのが 2016年代は 80件/月程度に増加していることもわかります*1。
対する Sphinx のメンテナの人数は、この間あまり変化がありません。
一人ないしは二人。これがアクティブな Sphinx のメンテナの人数です。
2015年末に自分が、そして 2016年に入ってから TeX 使いがひとり、メンテナとして活動をしていますが、メンテナの人数はかぎられているため、絶えず増え続けるイシューに対して常に後手に回っています。
現時点では、増加するペースのほうがやや大きく、チケットが増えていく傾向にあります。
むしろ、難しいイシューはそのまま積まれており、かんたんなイシューから解決していくことが多いので、件数だけでなく濃度も徐々に高まっているという印象があります。
メンテナ活動でやっていること
主にこんなことをやっています。
- バグ修正
- 機能追加
- ドキュメント更新
- PR レビュー
- イシュー対応
- 環境改善 (テスト、CI、その他)
- 定期リリース
- メジャーリリース
- リリース計画立案
- 開発者メーリングリストでのフォローアップ
- ユーザメーリングリストでのフォローアップ (Q&A などなど)
- 関連ライブラリ(docutils)へのパッチ投稿
他のメンテナが機能停止していることもあって、ここ一年は大体自分ひとりで動いていました*2。
我ながらよく頑張った。
その他、Sphinx-Users.jp のコミュニティ活動としてこんなこともやってました。
- Sphinx+翻訳 Hack-a-thon の開催
- Software Design 誌での連載 (執筆は 4回ほど。レビューにはなるべく協力)
- slack で雑談
- 勢いに任せて Sphinx 拡張の開発 (雑誌の題材だったり、slack でのリクエストだったり)
なんというか、本当に Sphinx 漬けな生活を送ってますね。
メンテナという責任との付き合い方
挙げていくとイシューもやることも山積みのように見えますが、オープンソースという場なので、
あまり責任とかは気にせずに付き合っています。
外から見るとずーっと活動し続けているようにも見えるそうですが、
仕事が忙しいときはサボっていたり、旅行に行ったり、飲みに行ったりも適度にしています。
あとひたすらプレミアリーグ見てます。
継続的に活動し続けていくことが大事だという大義名分のもとに、
あくまでマイペースに、ときどき放置しながらも、コードを書いたりイシューに返事をしたりしてます。
ということで、あまりに根を詰めて燃え尽きたりせずに、一年を過ごせたのは良かったと思っています。
引き続き、飽きるまでマイペースに付き合っていくつもりです。
メンテナしていて得すること
僕は個人的にもお仕事でも Sphinx を使っていないので、コードそのものから得られるメリットはありません。
blockdiag を作っていたころもそうですが、どうも自分の使わないコードをいじるのが好きなようです。
強いてあげるとすれば
- 英語の読み書き能力
- Python 能力 (docutils パワー?)
- ハックするネタ
- ドキュメントネタへの興味 (出版とかフォーマットとか)
- メンテナとしての自意識/自尊心の拡大
あたりが得したことでしょうか。
特に、英語については反射能力がついたと強く感じています。
飛んできたイシューを片っ端から読んで、コメント書いてを繰り返しているので
英語に対するハードルがかなり下がって、フットワークが軽くなっています。
語彙や単語などはあまり変わっていないのですが、これもひとつのレベルアップと言ってもよいはずです。
あとは、ハックネタが提供されたことで常に Sphinx のことばかり考えるようになってますね。
何者かになりきれない自分にはいい素材が提供されたと思っています。
メンテナをして損したこと
とにかく時間が吸い取られます。
blockdiag や testing.mysqld など、他にもメンテナンスすべきパッケージがあるはずなのですが、
そっちに時間を割くことができていません。
Sphinx 以外の他のこともやってみたい、というぼんやりとした考えもあるのですが、
イシューの物量に押し流されているところもあります。
メンテナに必要な知識
先程挙げたように、やるべきことは山積みで、そして広範囲です。
コードをいじるにしても、docutils や Python そのものの知識もそうですが
出力フォーマット(HTML や LaTeX、EPUB)や Python のコード解析、フレームワーク化など、
Sphinx が扱っている分野そのものがとても広いので「この知識を持っていればよい」というものではありません。
むしろそんなスーパーマンはいないので、みんなの力を結集して解決していきたいところです。
ですので、なにかひとつでも継続的に関わることができるのであれば、
胸を張って手伝っていけばよいと思います。
最近、usaturn 氏がイシューのトリアージに参加するようになりました。
Sphinx のトリアージを頑張ってやっていこうと思います https://t.co/HZV35ILJFl #sphinxjp
— うさたーん (@usaturn) 2016年12月10日
イシューに溢れかえった Sphinx では、再現確認や一時切り分け、単なる質問の対処などであっても
やるべき作業が減るのでとても助かります。
メンテナであれば〜〜ができなくてはならない、なんて自分でハードルを上げずに
やれることを手伝っていくスタンスから始めるのが良いと思います。
ひとつ付け加えるとするなら、英語の能力があると心理的なハードルが下がります。
でも、先日 Google 翻訳がパワーアップをして、かなりハードルを下げてくれたので
そんなに気にしなくても良いかもしれません。
OSS メンテナのモチベーション/キャリアプラン
Sphinx のメンテナとして活動していることは誇らしくもあるのですが、
一方で自分のスキルアップ、キャリアアップには役立っていないと感じている面もあります。
Web フレームワークやインフラなど仕事のメインとなるツールではないこと、
自分の業務には(いまは)ほとんど関係のないツールであること、
ドキュメンテーションというニッチな(あまり人気のない分野の)ツールであることなど、
メンテナ活動を続けることが自分のキャリアにあまり貢献をしていないと感じることがあり、
たまに隣の芝生が青く見えることがあります。
この記事は、そうした自分を写した鏡を見たような気分になりました。
A Million Hello Worlds - steps to phantasien
自覚しているだけに、胸に刺さる / “自分を突き動かす社会的欲求の必死さがない。それは弱さでもある。” / A Million Hello Worlds - steps to phantasien https://t.co/pYTjz7Hxsz
— Takeshi KOMIYA (@tk0miya) 2016年12月10日
また、ドキュメンテーションツールとしても、markdown 全盛のこの世の中、
Sphinx に将来があるのかどうか、自分自身あまり信じられていないこともあって
もやーっとしている思いがないわけでもありません
*3。
僕の今の居場所は Sphinx なのは間違いないけど、同時に僕は Sphinx には先のない、斜陽感を感じていて、このままメンテナを続けていくと一緒に沈んでいってしまうのではないかという不安感がある。
— Takeshi KOMIYA (@tk0miya) 2016年12月10日
かと言って見捨てるわけにもいかないし、他に興味がある技術があるわけでもなし、ずるずるとメンテナンスを続けているという部分は少なからずある。
— Takeshi KOMIYA (@tk0miya) 2016年12月10日
十分優れたソフトウェアだし、利用者もかなりいるし、手を入れなくちゃならない/入れたい課題も山盛りだし、やりがいは十分にあるはずなのだけど、自分では使ってないし、時間は食うしでなんでお前メンテしてるの? 動機は? と尋ねられてもなんとも答えられない。
— Takeshi KOMIYA (@tk0miya) 2016年12月10日
言葉にするとあまりに正確じゃなくてこまる部分ではある。嫌なわけでも、義務でやってるわけでもないし、楽しんでやってる部分もある。そりゃ苛立ちとかそういうのもたまにはあるけど。でも、僕は Sphinx の先に道があるとは信じられていないので、閉塞感みたいなのがあるのよね。
— Takeshi KOMIYA (@tk0miya) 2016年12月10日
お金持ちになりたいわけでも、人気ものになりたいわけでもないけど、どうせなら多くの人を支えるツールに関わりたいよなーという、承認欲求なのか社会的欲求なのかそういうのにさらされる瞬間がある。が、既に十分に使われてはいるし、流行っている方に興味があるわけでもないしねえ。
— Takeshi KOMIYA (@tk0miya) 2016年12月10日
隣の芝生は青白く発光している
— Takeshi KOMIYA (@tk0miya) 2016年12月10日
では、モチベーションってなんだろう、と考えたのがこちら:
@voluntas 自分が使うツールって、ほとんど作ってないなあ。きっと根っからの SIer なんでしょw
— Takeshi KOMIYA (@tk0miya) 2016年12月10日
パソコン通信の時代から、誰かに使ってもらえるツールを作ることに憧れていたので、
それを考えるといまはそれを満たしているので満足してるんじゃないか、と自己分析しています。
結論:僕の OSS 活動はキャリアと関係なかった。
キャリアの問題とか関係ないよーな気がしてきた。みんなは修練に励んでステップアップしてるけど、僕はそっちに興味が持てなくて盆栽いじりしてるだけだもんなあ。閉塞とかかっこいい言葉を使ってないで、もっとシンプルに、なにもしなくても給料上がらないかなあって言えばいいんだ
— Takeshi KOMIYA (@tk0miya) 2016年12月10日
承認欲求が満たされないと、雪が降る夜にマッチを擦って承認を満たして、翌日凍死体として発見されることになる。早急にわかり合うべきだ。
— Takeshi KOMIYA (@tk0miya) 2016年12月19日