Findy Engineer Lab

エンジニアの"ちょい先"を考えるメディア

趣味だったOSS活動で収入を得られるようになるまで。「継続」と「発信」がキャリアを切り開いた

はじめまして。鈴木 颯介(@__sosukesuzuki)です。私は筑波大学情報学群情報科学類の学生をしながら、Ubie株式会社でプロダクト開発エンジニアとして働いています。また、余暇時間を使って、いくつかのOSSの開発に関わっています。

この記事では、私がプログラミングやOSS活動を始めたきっかけから入り、OSS活動で収入を得るということについて私なりの考えを示し、最後にOSSと私のキャリアについて振り返ります。

私は2022年の3月に初めて正社員として働くようになり、まだキャリアと呼べるほど長いキャリアを持ってはいません。ですのでこの記事が、私と立場の近いコンピューターについて勉強している学生やまだ経験の浅いエンジニアの方々が、ご自身のキャリアを考える上での参考になれば幸いです。

最初に断っておきますが、私がこれまで関わってきたOSSのほとんどは、JavaScriptのコミュニティのものであり、かつフルタイムのメンテナがおらず人手や資金が足りていない状態でした。この記事内で「OSS」と述べた場合にはそういったものを指していることが多いです。

コンピューター、そしてプログラミングとの出会い

Life is Tech! でのプログラミングとの出会い

私がプログラミングを始めたのは中学1年生のときです。それまでも家にパソコンがあったので興味を持って遊んではいましたが、プログラムを書いたことは一度もありませんでした。

あるとき、私がコンピューターに興味があるということを知っていた学校の友人が、Life is Tech!という中高生向けのプログラミングキャンプに誘ってくれました。Life is Tech!では夏休みや冬休みなどに数日間、研修を受けた大学生がメンターとしてプログラミングを教えてくれます。

そこからプログラミングに興味を持ち始め、キャンプの期間が終わったあとすぐに近所の本屋でUnityに関する書籍を購入し、C#でプログラミングに入門しました。

高校時代、プログラミングを通じてできた仲間

中学生のときは1人でプログラムを書いていました。自宅に遊びにきた友人に自分の作ったゲームをプレイしてもらったことを覚えています。

その後、技術系の高校には行かず、自宅の近くにある県立高校に進学しました。そのころから一緒にプログラミングができる仲間が欲しいと思い始め、Twitterを通じてプログラミングをやっている高校生の集まりと出会いました。

彼らは当時の自分と比べると高い技術力を持っていました。彼らについていく形でカンファレンスや勉強会にも参加するようになり、そこからエンジニアコミュニティと関わり始めるようになります。

最初のアルバイトはOSSの開発

プログラミングでお金を稼いでいないことに対する焦り

Twitterで出会ったプログラミング仲間は私と年齢が1つしか違わないにもかかわらず、ほぼ全員がアルバイトやフリーランスなどの形でプログラムを書いてお金を稼いでいました(当時私は高校1年生で、彼らは高校2年生でした)。私はガソリンスタンドでアルバイトをしていたのですが、自分だけがプログラミングでお金を稼いでいないことに焦りを感じていました。当時の私にとってプログラミングは100%趣味であり、その趣味の世界でお金を稼ぐということは憧れだったのです。

プログラミングをさせてくれるバイト先を探しましたが、経験のない高校1年生を雇ってくれる会社はなかなか見つかりませんでした。そんな中、自分が参加したハッカソンがきっかけで出会った福岡発のスタートアップであるIssueHunt横溝一将さんが「プログラミングが好きなのにガソリンスタンドで働いているのは違うと思う。うちでいいならぜひ来てほしい」と言ってくれて、働かせてもらうことになりました。

プログラマーとしての最初の仕事がBoostNoteの開発だったことは幸運だったと今でも思っていますし、感謝してもしきれません。

IssueHunt代表の横溝さんと初めて会ったときの写真

BoostNoteの開発で身につけたJavaScriptとチーム開発、そしてOSSの仕草

私のIssueHuntでの最初の仕事は、BoostNoteというMarkdownで書けるノートアプリの開発でした。BoostNoteはOSSとして開発されています。今では全く別のコードベースに書き直されているようですが、当時のリポジトリは https://github.com/BoostIO/BoostNote-Legacy に残っています。このリポジトリは現在では17,000スターを超えていますが、私がアルバイトとして働き始めたときは1,000程度でした。

BoostNoteはElectronとReactを使ったデスクトップアプリケーションとして開発されていました。これがJavaScriptというプログラミング言語との出会いでもありました。それまでもjQueryを使ってウェブサイトに簡単なアニメーションを実装するようなことは経験がありましたが、JavaScriptを使ってアプリケーションを開発するのは初めてでした。

また、BoostNoteの開発では、GitHubでの英語を使ったコミュニケーションが求められます。私は今でも英語は全然できませんが、当時は今と比べても英語ができなかったので苦労したことを覚えています。

当時のIssueHuntには代表の横溝さん以外フルタイムで働いている人はいなくて、副業として働いているエンジニアが2人いました。その2人の方からJavaScriptの書き方やGitの使い方、チーム開発のやり方などを教わりながら、一つひとつ仕事を覚えていきました。

IssueHuntでの経験の中で最も重要だったのは、OSSとの関わり方や文化、そしてOSSと関わることを当然と思える価値観を身につけられたことです。それからは、趣味として他のOSSのコードを読んだりPull Requestを投げたりするようになりました。

興味からメンテナへ

魔法のようなPrettierとの出会い

IssueHuntで数年勤務する中で、BoostNoteの開発のほかに一般的なWebサービスの開発にも関わりました。余談ですが、私は高校3年生の5月にそれまで通っていた全日制高校から通信制のN高等学校に転校し、それから約1年の間ほぼフルタイムでプログラマーとして働いていたので、かなり長い時間をWebサービスの開発に使ったことになります。

その中でフロントエンドの開発とバックエンドの開発の両方を経験し、一般的なWebサービスがどのような仕組みで動いているのかを少しずつ理解していきました。

2019年に高校を卒業し、今も通っている筑波大学に進学したころ、一般的なWebサービスではないリンタやフォーマッタの仕組みが気になり始めました。日頃Webサービスの開発を行う中でたくさん使っていたソフトウェアですが、当時の私はその仕組みについてまったく知らなかったのです。そのため、魔法のようだとすら感じました。

気になったので実際にPrettierというフォーマッタのコードを読んでみると、仕組みはそんなに難しいものではないということに気が付きました。そこで、Prettierを使っているときに遭遇したバグを修正するPull Requestを作ったところすぐマージされました。

私がPrettierに最初に投稿したこのPull Requestは https://github.com/prettier/prettier/pull/6115 ですが、残念ながらこの修正は大きなバグを引き起こしてしまいました。当時の状況を書き残した記事が「Prettier 1.18.0 に大きなバグを入れてしまった」です。今となっては懐かしく良い思い出ですが、当時は大変焦ったことを覚えています。

このようなハプニングもありましたが、大学生で時間に余裕があった私は継続的にPrettierにPull Requestを送りました。Prettierはほとんどのパターンでうまく機能しますが、エッジケースのバグを見つけるのはとても簡単です。そのようなバグをひたすら見つけては直していました。

約4カ月の間Pull Requestを送り続けていたところ、2019年の9月にコミット権限が付与されました。仕事とは関係ないOSSに貢献し続けコミット権限を付与してもらうのは初めてだったのでとてもうれしかったです。

Prettierのコミット権限をもらったときのスクリーンショット

自分がやらなきゃ、誰もやってくれない

コミット権限をもらってからしばらくして、そのとき最もアクティブだったメンテナ2人がPrettierの開発から退きました。そうすると必然的に自分がやったほうが良いことが増えて、メンテナとしての活動の幅が広がっていきました。

Prettierプロジェクトへの貢献で報酬が得られるようになるのはそれよりだいぶ後のことなので、そのころのPrettierメンテナは全員報酬なしのボランティアでした。OSSのメンテナにも仕事や生活があり、さまざまな理由で活動を退くことがあります。そのときの私は一人暮らしの大学生で、養う家族はいませんでしたし、フルタイムの仕事もありませんでした。ですので、余暇時間のほとんどをPrettierに費やすことができました。

まったく気にしていないので笑い話なんですが、実際には余暇時間どころか学業に使うべき時間もOSSに使ってしまったので、残念ながら大学は留年してしまいました。

このような状況だと、Prettierにとって必要な仕事をやってくれる人はほとんどいなくて、自分がやらなければ事が進まなくなってきます。

コミット権限をもらった当初はユーザーが報告してくれたバグをトリアージして修正するだけでしたが、次第にどの機能を実装するべきか考えたり、他のプロジェクトとコミュニケーションをとったり、最終的なリリースを行ったりと責任のある仕事をやるようになっていきました。

OSSで収入を得るということ

OSSでの収入

話は変わりますが、現在の私はOSS活動で収入を得ています。私のOSSに関する収入は大きく分けて2種類あります。1つ目はGitHub Sponsorsです。これはプロジェクトではなく、私個人に対しての支援です。2つ目はOpen Collectiveです。これはPrettierプロジェクトに寄付されたお金の一部を毎月いただいているものです。それらを全部合わせて、2022年は500万円程度の報酬をいただきました。

2022年にはこれだけ大きな収入を得ることができましたが、これを今年も維持するのは困難だと思っています。

詳細な金額については私のブログ「2022年に OSS 活動によって得た報酬を公開」で公開しているので、興味のある人はそちらをご覧ください。

趣味のOSSで収入を得られるようになって

私はOSS活動とは別にUbie株式会社でフルタイムのプロダクト開発エンジニアとして働いています。ですので、主に余暇時間をOSS活動に充てています。

余暇時間の作業で収入を得ているので、OSS活動は趣味でありつつも副業のようなものだと考えています。収入があることで、金銭的な理由で他の副業をする必要がなくなってOSSに向き合える時間が増えたと感じています。

また、もっと単純な話としては、収入が得られるようになってモチベーションが高まっていると感じます。特定のプロジェクトのメンテナンスをしていると、やりたくない作業でもやらなければならないということがよくあります。そういうときに作業に対する報酬があると乗り切れる、という感覚があります。

趣味のOSSで収入を得られる人は増えるべきなのか

余暇時間のOSS活動で収入を得ることを望んでいる人が、それを実現できるようになるのは良いことだと思っていますし、そういう人が増えてほしいと思っています。

しかし、ソフトウェアエンジニア業界全体のことを考えたときには、それだけではあまり健全ではなく持続可能でもないと考えています。企業の立場になって考えた場合、誰かの余暇時間の趣味によって開発されたソフトウェアに強く依存するという状況は変わっていません。

最近は多くの企業がOSSに対して寄付をするようになりました。それには大きな意味があります。私自身もそれによって収入を得ています。一方で、それが本質的な解決になるかどうかは考えたほうが良いでしょう。

私はPrettierの作者ではない上に余暇時間でメンテナンスをしており、その割には大きな金額をいただいています。とはいえOSS活動による収入を本業の収入と同じ程度に安定したものと見なすことはできません。前述のとおり私は、収入の観点ではOSS活動を副業程度に考えており、やる気がなくなったらやめるつもりでいます(もちろん、その場合は報酬を受け取るのもやめますが)。

そのため、たとえばクックパッドやShopifyなどがRubyのコミッタを社員として雇っているように、自社が依存しているOSSのコミッタを社員として雇うような会社が増えることが望ましいと個人的には考えています。

しかし、それではキャリア的に難しいという場合もあります。たとえば私だったら、仮にPrettierのメンテナンスをフルタイムでやるポジションがあってオファーをもらったとしても、そこで働くことはないと思います。なぜなら将来のキャリアのことを考えたとき、コードフォーマッタの開発を仕事にしたいとは思わないからです。

ですので、寄付だけではなくたとえば業務の一部で、その会社に関係ない作業を含めて社員がOSSのメンテナンスに取り組めるといった柔軟な体制が必要なのかもしれません。

私のキャリアとOSS

コミッタへの強い憧れ

私は自分のOSSでの活動をできるだけ積極的に外部に発信するようにしています。

もともと私がPrettierに貢献し始めたのは、前述のような好奇心もありましたがその他にも、たとえばESLintのコミッタとして知られているToru Nagashimaさんや、webpackやNode.jsのコミッタとして知られているhiroppyさんといったJavaScriptの世界で活躍している日本のOSSコミッタの方々への強い憧れがあったから、という理由もありました。

そのような人たちが外部に情報を発信してくれていたおかげで、私もOSSの世界に入ることができたと思っています。ですので、自分も同じように情報を発信するようにしています。

また、彼らが発信した情報を読んで楽しいと感じたので、私の発信する情報でも誰かに楽しいと感じてほしいというのも理由の一つです。

自分のことを知ってもらう方法としてのOSS

そして、このような発信は思わぬ副作用を生んでくれて、私のキャリアにとっては明確に良い影響がありました。

私は大学2年生のときからサイボウズのフロントエンドエキスパートチームで業務委託として働いています。Ubieでフルタイムの仕事をしている今でも副業として関わらせてもらっています。大学2年生だった私がそこで働くことができたのは、PrettierなどのOSSでの活動をサイボウズの方々に知ってもらえていたからだと思います。サイボウズでは貴重な経験を積ませてもらっていますし、それをきっかけにした良い出会いもたくさんありました。

また、最近では新型コロナウイルス感染症についての状況の変化からオフラインで開催される勉強会も増えてきました。オフラインの勉強会に参加したときに、私のことを知ってくれている方がいることも、大変うれしく思っています。

年齢も経験も関係なかった

人や環境によるとは思いますが、エンジニアとしての経験が浅い場合や、インターンなどの正社員でない形で働いている場合は、自分で考えて大きなチャレンジをする経験を積むのが難しいということもあると思います。

そのような経験は自分を成長させてくれるし、なにより自信につながります。

私にとっては、そのような経験を積める場所がOSSでした。自分以外誰もやってくれない世界で自分で考え、時には人の手を借りて物事を進めていくという貴重な経験を積むことができました。知り合いが少なく経験の浅い学生が、このような経験を積むことができる場所は珍しいのではないかと思います。

現在正社員として働いているUbieでは、直接OSSを開発する仕事はしていませんが、OSSの開発で培った知識や経験は確実に活きていると感じています。

最後に

OSS活動で収入を得られるようになったのは大変ありがたいことですが、私が最も重視しているのはOSSを通じた人との出会いや、貴重な経験を積めることです。その観点から、特に会社に所属する前の学生にこそOSS活動を勧めたいです。

少し打算的な話にはなりますが、有名なOSSにおいてそれなりに価値を出しアウトプットをしていると、そのOSSのネームバリューを借りることができます。そうすることで、企業に所属するエンジニアからより適切な評価をしてもらいやすくなると思います。

実は私はインターンシップに参加したことがほとんどありません。大学の同級生や後輩の話を聞くと多くの大学生がエンジニアとしてインターンシップに参加しているようです。個人的にはインターンシップも良いと思いますが、その時間をガッツリOSS開発に費やすのも一つの方法ではないかと思っています。

また、これは人によって感じ方が変わる部分だとは思いますが、OSSを始めるときは申し込みが必要ないというのも私にとっては都合が良かったです。大半のインターンシップはフォームに自分の情報を入力して、期日までに申し込む必要があります。一方で、OSS活動を始めるときは多くの場合、そのような面倒くさい手続きを行う必要がありません。もちろんほとんどのOSSでは貢献のためのガイドラインに従う必要はありますが、少なくとも今まで自分が関わったOSSにおけるガイドラインは、インターンシップの申し込みよりは面倒くさくありませんでした。

もちろん、興味に従って勉強して成長するのが一番だと思いますが、エンジニアとしてキャリアを歩んでいく中でこの記事が誰かにとって参考になれば幸いです。

編集:中薗 昴