本記事では、「OSS応援企画」として記事の最初と最後に「応援ボタン」を設置しています。1回の応援につき、Findyが100円をOSS団体などへ寄付し、エンジニアの成長とOSSの発展を応援する取り組みです。開発者の想いや取り組みに共感した気持ちが、OSSの支援にもつながっていく、そんな前向きな循環をFindyは目指しています。「応援ボタン」は、1日1回まで押すことができます。記事を読んで「いいな」と感じたら、ぜひボタンを押してあなたの応援の気持ちを届けてください。
こんにちは、mizzy(@gosukenator)と申します。サーバーの状態をテストするツールServerspecの開発者で、Infrastructure as Code領域を中心にフリーランスのソフトウェアエンジニアとして10年以上活動しています。
私が今で言うOSSに触れ始めたのは1995年です。それから30年経ちますが、「OSS活動/貢献」を意識して行ったことはあまりありません。自分が使いたいツールをつくって公開する、それは私にとって、ブログを書いたりカンファレンスで発表したりすることと同じ、アウトプット活動のひとつです。使っているOSSに不具合や欲しい機能があれば、修正してパッチを送る、それは貢献というより、自分が使う道具を手入れする感覚です。そんなことを続けてきた結果、気づけば多くの人とのつながりが生まれ、今のキャリアにもつながっていました。そんな私の経験についてご紹介します。
“OSS”を始めたつもりはなかった
私がOSSに関わるようになったのは、学生時代にさかのぼります。1995年頃、まだ「OSS」という言葉が存在しなかった時代に、大学の所属ゼミのウェブサイト運用のためにNCSA HTTPdを触ったり、自宅PCにLinuxをインストールしてMuleとTeXでレポートを書いたり、卒論のための統計処理や個人ウェブサイトへのCGIスクリプト設置のために、Perlでプログラムを書いたりしていました。
自分で書いたコードを公開するようになったのは2003年頃からです。MTV2000というテレビキャプチャーボードの録画予約をリモートからできるようにする方法を個人サイトで記事にしたのが最初だったと思います。コードも一緒に公開しましたが、あくまで記事の付随物という位置づけでした。
2005年頃になるとブログブームの中、Blosxomというブログツールで自分のブログを立ち上げ、自作のBlosxomプラグインを公開するようになりました。一例として、はてなブックマークの投げ銭機能に対応するため、アカウント情報をメタデータとして埋め込むプラグインをつくって公開しました。また、Bloglinesというフィードリーダーにガラケーからアクセスするためのゲートウェイを開発していて、その過程でmiyagawaさんのWebService::BloglinesというCPANモジュールにパッチを送りました。自分が欲しい機能を追加するためのパッチで、これがOSSへのコントリビューションの最初です。当時はGitHubもなく、メールでパッチを送っていました。
この頃、仕事ではSIerに勤めていて、OSSとは無縁な環境にいました。プライベートでOSSに関わる楽しさを知る一方で、仕事との間にギャップを感じるようになり、OSSを活用できる仕事がしたいと思うようになりました。2006年にウェブ業界へ転職したのは、そうした思いからです。
こうして振り返ると、私は「OSS活動/貢献しよう」と意識して始めたわけではありませんでした。自分でつくったものを公開することは、ブログで記事を書いたり、カンファレンスで発表したり、雑誌や書籍に寄稿したりすることと同じ、「アウトプット活動」のひとつであり、「OSS活動をしている」という意識はありません。また、OSSにパッチを送ることも、「貢献」というより「自分が使っている道具を直す・改良する」という感覚で自分のためにやっていることなので、「OSS貢献」という言葉は、私の活動を表す言葉としてはふさわしくないと感じています。
「みんなでつくる」文化に触れた、印象に残っている2つの思い出
特に印象に残っているものとして、2006年〜2008年あたりの、当時のPerlコミュニティの雰囲気を感じていただけるような思い出をふたつ紹介します。
Plagger
ひとつ目はPlaggerというOSSです。Plaggerは先述のmiyagawaさんが開発した、Perlで書かれたプラグインベースのフィードアグリゲータで、プラグインを組み合わせてRSS/Atomフィードを自在に加工して出力できます。「それPla(それPlaggerでできるよ)」という言葉が生まれるほど、何でもできる便利ツールとして人気がありました。実用的なものからGoogleで『はらへった』と検索するとピザが届くといったネタ的なものまで、多種多様なプラグインが開発されていました。
当時はIRC上でみんなでワイワイやりとりしながら開発していて、私もGoogle Videosの検索結果をiPodに取り込むためのプラグインなど、自分が欲しい機能のためにプラグインを書いていたらコミッターになり、気づけばPlagger Conferenceで登壇することになっていました。自分のためにやっていたことが、いつの間にか広がっていた、という感覚です。これが私にとって初めてのカンファレンス登壇です。また、初めての雑誌記事執筆や書籍執筆もPlaggerを題材にしたものでした。Plaggerをきっかけに、アウトプット活動の幅が大きく広がりました。
CodeRepos
もうひとつ印象深いのがCodeReposです。当時はGitHubもなく、各開発者がそれぞれ自前でコードリポジトリを持っている状況でした。そこにtypesterさんの発案に呼応する形でYappoさんが立ち上げたのがCodeReposで、TracとSubversionをベースにした共有リポジトリとして、みんなでコードを共有できる場所として機能していました。コミット権をもらえば誰でも参加でき、Plaggerでみんなでワイワイ開発していた雰囲気が、他の様々なOSSや、Perl以外の言語コミュニティにも広がったような場所でした。
今でこそGitHubがあるので当たり前のように感じるかもしれませんが、当時はコードを共有する場所自体が貴重でした。CodeReposは、そうした「みんなでつくる」文化の先駆けだったと思います。
ちなみに、日本の技術系アドベントカレンダーの先駆けであるJPerl Advent Calendarも、2008年の開始当初はCodeReposのリポジトリに記事をコミットする形で運営されていました(参考: 技術系アドベントカレンダーの歴史に思うこと | おそらくはそれさえも平凡な日々)。
アウトプットが生んだ人との縁
楽しみながら自分のためにやってきたことが、結果として人とのつながりをもたらしてくれました。
2006年にSIerからウェブ業界へ転職した際、転職先の決め手になったのはアウトプット活動でした。自分のブログ記事を読んでいた家入一真さんが、Blosxomプラグインをつくって対応したはてなブックマークの投げ銭機能で1,000ポイントをくださったことがあり、ブログを見に行ったら社員募集をしていたので応募しました。
Perlコミュニティをはじめ、アウトプット活動を通じて知り合った方々には、2014年に職を失った際にも相談に乗ってもらったり仕事を紹介してもらったりと、とても助けられました。それがその後フリーランスとして独立するきっかけにもなりました。
それ以来、フリーランスとして10年以上活動していますが、仕事が途切れそうになったときにはXで「仕事ください」とつぶやくと、そうした方々から直接依頼をいただいたり紹介してもらったりして、なんとか途切れることなく続いています。
自分のためにつくったServerspecが、世界を広げてくれた
Serverspecを通じて、新しいコミュニティとの接点も生まれました。もともとは、仕事でPuppetマニフェストを書いているうちに、自分にとってベストなコード構成がわかってきて、初期に書いたコードをリファクタリングしたくなったのがきっかけです。そのためのテストツールが必要になり開発しました。Ruby製のサーバーテストツールということもあり、Perlコミュニティだけでなく、Rubyコミュニティやインフラエンジニアの方々、アジャイル開発やテスト駆動開発に関心のある方々にも認知していただけるようになりました。これをきっかけに、それまで接点のなかった人たちとの交流が生まれ、Serverspecを通じて私のことを知ってくださった、まったく面識のなかった方から仕事の依頼をいただくこともあります。
Serverspecは思いがけない形で評価される機会にも恵まれました。DockerとともにBlack Duck Open Source Rookies of the Yearを受賞したり、ChefConf 2014に登壇する機会をいただいたり、ThoughtWorks Technology Radarに掲載されたり、日本OSS奨励賞をいただいたり、O'Reilly Japanから書籍を出版したりしました。さらに、Serverspecについて論文を書いたことがきっかけで、46歳で大学院に入学することにもなりました。
こうして振り返ると、自分のためにつくったものが、思いがけない形でキャリアを広げてくれました。
まずはアウトプットを、気軽に始めてみることから
最後に、これからOSSに挑戦してみたいと思っている方へ。
まず、自分で何かをつくって公開することは、今すぐにでも始められます。GitHubでリポジトリをつくるのもいいですし、ZennやQiita等に記事を投稿するのでもいい。個人ブログでも構いません。
「こんなものを公開しても誰も使わないだろう」と思うかもしれません。実際、誰にも使われないかもしれません。でも、それで構わないと思います。私自身、誰にも使われていないものがブログやGitHubにたくさんあります。例えば最近の例だと、久々にブログを更新しよう、と思ってnebelというGo製の静的サイトジェネレータをつくってGitHubで公開していますが、Starはひとつもついていません。それでも、特に隠す必要もないので公開しています。それぐらいの感覚でいいのです。
公開することに躊躇いがあるかもしれません。批判されるのが怖い、間違いを指摘されるのが恥ずかしい、という気持ちはよくわかります。でも、煽るようなタイトルや文章を書いたり、何かを貶めたりしなければ、ネガティブな反応が来ることは稀です。むしろ、何も反応がないことの方がずっと多いです。
それでも公開しておく価値はあります。知りたい情報をググったら、忘れていた過去の自分が書いた記事やコードが出てきた、ということは珍しくありません。また、公開したことがきっかけで、思わぬ人とのつながりや機会が生まれることもあります。私自身、ブログやOSSがきっかけで転職したり、仕事をいただいたり、大学院に入学したりしました。何がどうつながるかは、公開してみないとわかりません。未来の自分のためのメモぐらいの気持ちで、気軽に公開してみてはいかがでしょうか。
一方、他の人のOSSに貢献することは、相手があることなので、少しハードルが高いかもしれません。ただ、無理に貢献する必要はありません。貢献するぞ、と構えずに、自分が使っていて困ったことがあり、自分でコードが書けるならパッチを送ってみる、ぐらいの感覚で十分です。
私がパッチを送る際に気をつけているのは、まず過去のIssueやPull Requestを見て、同じようなIssueがあったりパッチがPRで出されていないか確認すること。もしIssueがなかったりPRでパッチが出ていなければ、READMEに書かれているコントリビューションガイドを読み、それにしたがってIssueやPRを作成することです。
もしIssueやPRが受け入れられなくても、気にする必要はありません。方針が合わなかっただけかもしれませんし、単にタイミングの問題かもしれません。縁がなかったと思えばいいだけです。
私が好きな言葉に "Openness is our driver for excellence" というものがあります。「オープンさこそが、私たちを高めてくれる」といった意味でしょうか。
OSSに限らず、自分の知識や経験をオープンにすることには価値があると思っています。ブログを書くこと、カンファレンスで発表すること、コードを公開すること。形は違っても、オープンにするという点では同じです。
OSS活動を特別視する必要はありません。誰かのためではなく自分のために。自分のペースで、小さなところから始めてみてはいかがでしょうか。
