Sphinx のメンテナになって一年が経過した話

クリスマスが過ぎてから始まる Sphinx アドベントカレンダーへようこそ (嘘)
Sphinx 大型連載第二夜です。

タイトルにある通り、Sphinx のメンテナ活動をして一年が過ぎたので、その話をします。
OSS 開発者のひとつのサンプルケースとして、何かの参考になれば幸いです。

Sphinx のメンテナ活動をはじめました

去年の 12月から Sphinx のメンテナ活動をはじめました。
Python のリリースマネージャ活動が忙しかったからか原作者の Georg の活動が鈍り、
また、その後を継いだ清水川さんも忙しくて身動きが取れなくなっていたことから、
コミット権をもらっていたことだし、パートタイムで手伝うかと思ったことがきっかけでした。

以前からコミット権は持っていたものの、一切メンテナとしての活動をしていなかったので、
徐々にチケットが溜まっていく様子に後ろめたくなったのかもしれません。

増え続けるチケットの戦い

Sphinx は 2015年1月はじめに bitbucket から github にプロジェクトが移動しました。
移動した時点では 1662件だったイシューは、現在 3300件弱あります。
bitbucket 時代は開発開始から 6年間分、そして github 時代は約 2年間分なので、イシューが増加するペースはかなり増していることがわかります。
f:id:tk0miya:20161225221155p:plain

また、github 移行後の増加グラフを見ると、2015年代は 40件/月程度だったのが 2016年代は 80件/月程度に増加していることもわかります*1
f:id:tk0miya:20161225221208p:plain


対する 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 や LaTeXEPUB)や Python のコード解析、フレームワーク化など、
Sphinx が扱っている分野そのものがとても広いので「この知識を持っていればよい」というものではありません。
むしろそんなスーパーマンはいないので、みんなの力を結集して解決していきたいところです。

ですので、なにかひとつでも継続的に関わることができるのであれば、
胸を張って手伝っていけばよいと思います。

最近、usaturn 氏がイシューのトリアージに参加するようになりました。

イシューに溢れかえった Sphinx では、再現確認や一時切り分け、単なる質問の対処などであっても
やるべき作業が減るのでとても助かります。

メンテナであれば〜〜ができなくてはならない、なんて自分でハードルを上げずに
やれることを手伝っていくスタンスから始めるのが良いと思います。

ひとつ付け加えるとするなら、英語の能力があると心理的なハードルが下がります。
でも、先日 Google 翻訳がパワーアップをして、かなりハードルを下げてくれたので
そんなに気にしなくても良いかもしれません。

OSS メンテナのモチベーション/キャリアプラン

Sphinx のメンテナとして活動していることは誇らしくもあるのですが、
一方で自分のスキルアップ、キャリアアップには役立っていないと感じている面もあります。

Web フレームワークやインフラなど仕事のメインとなるツールではないこと、
自分の業務には(いまは)ほとんど関係のないツールであること、
ドキュメンテーションというニッチな(あまり人気のない分野の)ツールであることなど、
メンテナ活動を続けることが自分のキャリアにあまり貢献をしていないと感じることがあり、
たまに隣の芝生が青く見えることがあります。

この記事は、そうした自分を写した鏡を見たような気分になりました。
A Million Hello Worlds - steps to phantasien

また、ドキュメンテーションツールとしても、markdown 全盛のこの世の中、
Sphinx に将来があるのかどうか、自分自身あまり信じられていないこともあって
もやーっとしている思いがないわけでもありません
*3






では、モチベーションってなんだろう、と考えたのがこちら:

パソコン通信の時代から、誰かに使ってもらえるツールを作ることに憧れていたので、
それを考えるといまはそれを満たしているので満足してるんじゃないか、と自己分析しています。

結論:僕の OSS 活動はキャリアと関係なかった。



まとめ

飽きるまではもうしばらくはやっていくつもりですが、一人の力だけではどうにもならないので、
Sphinx プロジェクトでは手伝ってくれる人を募集しています。

興味がある人は声を掛けてください。

そういえば、来年(2017年)は Sphinx-Users.jp の会長をふたたび務めることになりました。
いまも十分に活動しているので、基本的にはいまの状態を継続できるよう、ほどよくやっていこうと思います。
でも、なにか面白そうなネタがあれば顔を出していこうと思うので、ネタがあれば振ってください。

*1:このうち幾つかは開発が活発化したことによって、開発者自身がイシューを作ったり、PR を投げ合ったりしたものが含まれます。ですので、純粋に倍増ではありません

*2:途中から参画した TeX 使いの人は TeX に関するイシュー、バグ修正まわりを中心に活動していました。なので、厳密にはこのうち一部はふたりでやってます。

*3:かといって markdown は仕様が明確ではない上に方言が多いので、とても好きにはなれないのですが