読者です 読者をやめる 読者になる 読者になる

たごもりすメモ

コードとかその他の話とか。

業務とオープンソース活動の話 (日本OSS奨励賞 受賞報告にかえて)

先日書いたエントリでも触れたけど、日本OSS奨励賞、というものをいただくことになりました。ご推薦いただいた方がいるということで、本当にありがとうございます。

「第9回 日本OSS貢献者賞・日本OSS奨励賞」受賞者を選定 | 日本OSS推進フォーラム

で、せっかくの機会だし、普段思っていることを書いておこうと思う。この内容はほとんど将来の自分に対する自戒だ。アレな内容になることを申し上げておきます。先日に引き続いてアレですが、まあせっかくの機会なんですよ。ねえ。

ちなみに、ちょー長くなりました。あっはっは。

業務としてのオープンソース活動

自分はフルタイムのオープンソースコミッタではない。オープンソース活動に貢献すること、などという文言は自分の業務内容にはひと言も含まれていないし、自分が所属する部署の目標にも無い。自分の業務はあくまで自社サービスに貢献すること、自社サービスの開発および運用を改善することだ。その貢献によって給料をもらっている。*1

いっぽう、その業務に使っているハードウェア、ソフトウェア、それらをどのように用いるかというアーキテクチャ、あるいは作ったものをどう運用していくかという面において、多くの部分については自社独自のものなどありはしない。渋谷の、東京の、日本のあるいは世界のあらゆる同業他社が似たようなハードウェアとソフトウェアを使って彼ら彼女ら自身の業務をこなしている。自分が直面する問題は大抵は他社でも抱えうるものだ。

また視点を変えると、自分の勤務先というのは、問題を解決するために人数を集めるということはしない。清々しいくらいに、しない。自分が抱えている問題は自分が解決するべき問題だ。もちろん同僚に意見を求めるけれど、それでも、自分の問題は自分が責任をもつ。

ということで必然的に、自分の能力にレバレッジをかける必要が出てくる。何も参考にせず誰にも頼らずに手元の問題と格闘するのは非効率で、その効率の低さを考えると、現実的にはほとんど不可能だからだ。公開されているドキュメントに頼るし、誰かが書いたblogエントリに頼るし、Twitterでその問題に詳しそうな知り合いに頼るし、頼る先が思い付かなかったらとりあえずTwitterに放流して、食い付いてくれた人に頼る。

OSSに見付けた問題に独力でパッチを当てそのパッチを管理し続けるのは不可能だから、開発コミュニティにフィードバックして直してくれるのを期待するし、直されたものを使う。問題を回避するための方法を思い付いたけどビミョーな方法だったら、blogエントリに書いてしまえば誰かもっとステキなアイデアがあるよ! と教えてくれるかもしれない。
必要があって書いたソフトウェアだけどどこにどんなバグがあるかわからず、そのバグは将来的に環境をちょっと変えたら顕在化するかもしれないけれど、OSSとして公開してしまえば、誰かが使ったときに自分が巧妙に回避してしまっていたバグをちゃんと踏んで報告をくれるかもしれない。

更に嫌らしく現実的な話。普段から何かを公開している人、ソースコードでもバグレポートでも事例のblogエントリでも、ちょっとでも役に立つものを公開していると思ってもらえていれば、人はすごく親切にしてくれるんだ。それは自分の能力にレバレッジをきかせることに大いに役に立つ。

業務におけるオープンソース活動とは、ずばり、他人によくしてもらうためのものだ。そしてそれはボランティアでも善意でもない。実利が全てだ。

……とはいえ、これは「誰かが踏んだ大抵の問題は自分も踏みうるし、周囲の人達も踏みうる」という前提があるから成立するモデルだ。だから問題の解決に少しだけOSS活動のコストを上乗せすることが許される。その少しのコストをつかって開発元に・ユーザコミュニティに・あるいはこれからGoogleで検索する誰かにフィードバックすることで、自分が抱えた問題に対してフィードバックを期待できる可能性が、少しだけ上がる。業務としてのオープンソース活動はそうやって成立している、そう思っている。

業務のなかのオープンソース活動

そうやってオープンソース活動的なことを業務に密接に結び付いた状態でやっていると、あるとき、オープンソース活動のダークサイドに堕ちそうになる。

コードを、ソフトウェアのノウハウを、バグ情報を、パッチを、そういったオープンソース的な活動をやっていると、あるときそれに歯止めがかからなくなりそうになる瞬間がある。本来の業務上の優先度や、抱えている問題の解決に抱えていいコストや、問題を解決すべきデッドラインの期日や、そういった諸々のことを忘れそうになることがある。問題を解決するためにやっていたはずのオープンソース活動に没頭してしまいそうになる。

なぜかって、困ったことに、キモチイイからだ。オープンソース活動。まじで。

Blogエントリを書いているとそのソフトウェアに関わっている人達はブクマしてくれるし、Twitterで反応きたりする。ソフトウェアを公開していると使っているという反応が見えたり、運がよければバグ報告やPull Requestが来たりする。これがもう、物凄くキモチイイ。Pull Requestとか来ちゃうと、そのとき目の前にどんな困難な業務上の問題があっても、それを放り出して対応したくなるという誘惑に駆られる。

社内の問題に対処するためについつい公開可能なソフトウェアとしてちゃんとしたものを作りたくなることもある。冷静に考えれば数十行のシェルスクリプトを書けば片付くのに、うっかりGitHubリポジトリ作りたくなったりする。なんとなく壮大で知り合いのあんな人やこんな人に使ってもらえそうなソフトウェアに仕立てたくなる。

これはオープンソース活動のダークサイドだ。堕ちてはいけない。あれこれやっているとどうしてもその深淵に近付くタイミングは来る。必ず来る。むしろ、効率を求めるほどその深淵に近付くといってもいい。

だから、自分がその業務のなかで何をやっているか、どのようにオープンソース活動に関わり、どの領域ではオープンソースなコードに背を向けるか、というバランスが非常に大事になる。自分はどの問題にどのくらい時間をかけるべきか、どの問題のどの部分は効率優先にして社内で片付けてしまうべきか、どの問題はどの程度他者と共有しうるか(これがOSSにする候補になる)。

何度でも、前提条件に戻る必要がある。自分の業務はあくまで自社サービスに貢献すること、自社サービスの開発および運用を改善することだ。オープンソース活動は、あくまでその構成要素でしかない。これは信条や心情とは切り離して考えるべきことだ。忘れると暗黒面に支配される。

目的とバランスの話

どこでどうバランスを取るか、については、自分は本当に恵まれていると思う。

これは本当に自慢で言うんだけれど、いまの勤務先には極めて優れたOSS開発者がたくさんいて、彼らのバランスの取り方を見ていられるのは物凄い価値がある。普段の業務上の問題を解決しながら、その一部を見事に一般の問題として切り出して公開する彼らの技量は信じ難く高い。有用で一般性の高い問題を一方で解きながら、もう一方では問題をコスト低く素早く堅実に解決するために見事なハックをやってのける。
それを間近で見ていられること以上に自分の将来にとって有用なものがあるかと言われると、正直、なかなか思い付かない。

もうひとつ、自分たちが何の上に立っているか、ということを、彼らはとてもよく把握している、と思う。自分も努めて意識するようにしている。
つまり、こういうことだ。自分たちのシステムは、基本的に、すべてOSSの上に成立している。LinuxやそのディストリビューションApache httpd、Nginx、MySQLMemcachedPerlRubyJavaErlang、その他ありとあらゆる言語とミドルウェア、そしてそれらの上で動作するありとあらゆるプログラムとライブラリ。商用製品を使うことはごく一部の例外を除いて有り得ないから、ほとんど全てがOSSだ。そういった巨大なものを、コミュニティから受けている。

自分が書いたソフトウェア、公開した知見やパッチや事例、そういったものは、この本当に巨大な恩恵の前では比較にもならない。受けたものが100だとすれば、出したものは1にも遥か遠く及ばない。その程度でしかない。あるいはオープンソース活動というのは、遥かに遠い1を目指すための、絶望的な努力でしかない、と言えるかもしれない。
ほんとうは、貢献する、というのは、我々Webサービス業者の中では、圧倒的に不遜な物言いなのだと思う。普段から受け取っているものが大き過ぎるからだ。

だから、貢献することを目的にすると、多分何かを履き違える。オープンソース活動に貢献したことによる自己実現を目的にしたら、たぶんあまり良いものは残らない。普段から受け取っているものの大きさを忘れて自分の貢献の大きさを誇ることに、あまり正しさは無いような気がする。

オープンソース活動は、たぶん、業務のためか、興味関心を満たすためにやるべきだ。殊に、自分のいる位置においては。

謝辞

これは本当はいつか退職エントリを書くことになったら書こうと思っていたことなんだけど、いまのところその予定が全く無いし、いい機会なので、ここに書く。

自分の関わっているプロジェクト、コミュニティ、Twitterのタイムライン上の人々みんなに感謝している。そしてそれ以上に、いま会社でいっしょに働いている人達に感謝している。

自分のオープンソースとの関わりかたの大部分は、いまの会社で同僚となっている彼ら、特に名前を挙げなくてもみんな知っているだろう彼らから学んだものだ。日本OSS奨励賞なんていうものをもらうことができた理由のほとんどはそこから来ている。面と向かって言うときっと大笑いするだろうけど。それがムカつくから、直接言う機会は来ないかもしれないけれど。だから、ここに書いておく。

ありがとうございます。

*1:もちろん、業務外でのOSS活動が無い、ということではないけれども。Focuslightとかfluent-plugin-bigqueryとか、業務で使うアテのないソフトウェアを書くのは、それはそれでけっこう楽しい。