Zenn
🚀

OSS活動してたらRuffの会社で働くことになった話

2025/03/23に公開1
24

TL;DR

Pythonの型チェッカーを一人で作っていたらそれが仕事になりました。


私は(大学院生として物理学を専攻する傍ら)以前よりプログラミング言語やその周辺ツールのデザイン・実装に興味があり、趣味で開発したプロジェクトをOSSで公開するなどしていました。

https://github.com/erg-lang/erg

https://github.com/mtshiba/pylyzer

ErgはPython APIと互換性を持つトランスパイル型の静的型付け言語で、pylyzerはこれの型検査器を流用したPython向け型チェッカーです。
ありがたいことに両方とも結構反響を受けて、公開から数年経っても未だにissueなど報告をいただいております。これはもう少し大きな話にできるのではないかと考え、Ergの開発の方で2023年度の未踏IT人材発掘・育成事業に応募し、運よく採択され、スーパークリエータにまで認定していただきました。

これだけでもかなりの僥倖ですが、それだけではなく、今年の3月からcontract software engineerとしてAstral社にjoinする運びとなりました。

AstralはRuffuvなどPython開発者向けのソフトウェアを開発している企業です。

https://astral.sh/

実はAstralは今red-knotというPython向けの型チェッカーを新規開発してまして、経験を買われてプロジェクトの一員に迎え入れていただいたという感じです。その型チェッカーについてはこちらの記事に詳しく書きましたので、気になる方はこちらも読んでみてください。

https://zenn.dev/mtshiba/articles/about-red-knot

未踏に続いて今度はアメリカの会社で仕事としてOSS開発ができるということで、思わぬ喜びに打ち震えています。かなり特殊なケースだとは思いますが、OSSやってるとこういう話[1]もあるんだということで読んでくれるとありがたいです。

発端

Astralで働くことに興味はないか、というメールが創業者のCharlieから届いたのは2023年の4月頃の話でした。学部4年生になり、大学院進学を決意したばかりという頃です。
私が学生だということも知っており、卒業後か、前例はないけどパートタイムでも良いよ、という話でした。

もちろんその時からAstralが何の会社なのかということは知っていたので、とても驚きました。自分がRuffやuvの開発に仕事として一枚噛めるというのは、実現するなら望外の体験です。

しかしその時は未踏に応募して一次審査通過という段階だったので、自分のプロジェクトの開発に力を入れたかったということもあり(このチャンスを逃したら......という自覚はありつつも)、とても興味はあるがちょっと待ってくれ、という返事をしました。その時点で英語力に不安があったというのも躊躇した理由にあります。まあそれは結局今日まで改善はしていないのですが......

未踏に採択されてからは、衝撃的だったはずのAstralからのオファーをも上回るほど色々刺激的な体験が続きました。この辺については別の記事でも書いたので気になればそちらもご覧ください。

2024年3月に未踏事業が完了して、しばらくは卒論と未踏の二重生活が過酷すぎたこともあり、休養期間として普通の大学院生並みの生活を営んでいました。
それでメールのことも忘れかけていたのですが、2025年2月くらいにこんなツイートが流れてきました。

https://x.com/charliermarsh/status/1884651482009477368

これは驚きました。もしかしたらとは思っていましたが、Pythonの型チェッカーを作ろうとしていたとは。2023年の時点でこのプロジェクトの立ち上げメンバーとして私を誘っていた......? などと考えながら、Ruffリポジトリの型チェッカー実装部分(red_knot)の中身を見てみることにしました。既にcontrol flow based type analysisまでしっかり実装されており、コミット履歴を見るとかなりの勢いで開発が進んでいるようでした。
pylyzerと比較すると、まだいくつかの重要な機能については先んじていますが、追い抜かれるのは時間の問題、カバレッジとパフォーマンスで言えばred-knotの方がずっと良いだろう、という結論に達しました。

また、pylyzerリポジトリに寄せられるissueの対応も結構な負荷でした。公開しているErgとか他のRust用crateのリポジトリに寄せられるissue, PRとは違って、こんなことを言うのはアレですが、ユーザー層の違いからか受動的な態度のissue・インターネット掲示板みたいなコメントが来る割合が多いというか......なんで無償でこんなissueにも対応しなくてはいけないんだと思い、issueの自動close botを導入したほどでした。

元々pylyzerはErgの型チェッカーのオマケとして作ったもので、Ergの方は結構思い入れはあるのですが、pylyzerの方はどうしてもこれの開発を続けたい、という拘りはありませんでした。

ならば、red-knotの開発に参加するのが合理的というものです。数日のうちに決意を固めました。

Charlieに随分遅くなったことを詫び、もし前の話がまだ終わっていないならパートタイムで私の採用を検討してくれないか、と再びメールしました。一週間ぐらい返事がなく、流石に虫が良すぎたか、でかいチャンスを逃したなと後悔していたのですが、なんとred-knot開発チームのleadとchatしないかという返事が来ました。

これは大変だということで、急遽英語面接の準備をすることになりました。

採用過程

メールではchatと書いてあったので文面でやり取りするのかと勘違いしましたが、バリバリのオンラインミーティングでした。まあそれはそうですよね。自分の英語力はリスニング、スピーキングともに海外で働くにはかなりお粗末なレベルなのでとても不安でした。リスニングの補助として仮想オーディオとotterを組み合わせたリアルタイム文字起こしシステムを構築していたのですが、土壇場で上手く作動せず素の英語力で対話することになりました。
何を言っているのかはっきりわからないながらしどろもどろに答えていたら、最後に君に良さそうなissueをいくつか送るから、まずはそれを解決してみせてほしいみたいなことを言われてミーティングは15分ほどで終了しました。

ミーティングが終わった後もしばらく興奮状態から抜け出せないまま、メールで送られてきたissueに目を通すことにしました。
issueのうちいくつかはすぐに解決できそうだな、という感じでした。leadもコメントしていましたが残りの2つは単純ではなくて、これで実力を見られるんだろうなという感じでした。
leadはわからないことがあったらなんでも聞いてね、という感じだったんですが、OSSとしてコードが公開されているならそれをまず読むのが筋だろうということで、しばらく問題になりそうな箇所を読むことにしました。それにしてもやはり重厚なコードベースで、特にテストとドキュメントが充実しています(なので既存コードの実装については結局質問せずに済みました)。この辺りが個人レベルのOSSとプロによるOSSの違いなんだな、と思いながらPRを作りました。

ちなみに、この期間に私が出したPRはこちらです。詳細についてはこの記事の主題ではないので書くならまた別の記事で書きたいと思います。

https://github.com/astral-sh/ruff/pull/16468

https://github.com/astral-sh/ruff/pull/16501

https://github.com/astral-sh/ruff/pull/16530

https://github.com/astral-sh/ruff/pull/16540

ちなみにこれらとは別のissueで、書いている途中でこれ数週間じゃ無理では? と思うところがあったのですが、表面上問題を抑えるような修正コードを書いて、これで一応バグは修正できるけど根本的な解決には未実装機能の追加も含めてもっと時間かかるで、ということをleadに言ったら確認不足だったらしく、時期尚早としてissueがcloseされました。焦った。

ちなみにこの期間も報酬は出ており、初回報酬は月次のものとは異なるのでとりあえずGitHub Sponsorsで送るで、ということになったのですが、one-shot sponsor額としては見たことない金額が送られてきて、やっぱりアメリカのIT企業はすごい、としみじみ感じました。

4つ目のPRがmergeされたあたりで、leadからCharlieと話し合ったが正式に契約がしたい、というメールを貰って無事雇用契約を締結することができました。

感想

まず、非常に稀有な体験ができてとても興奮しています。
OSSが仕事になると言うのは、話には聞いていましたが本当に自分がその立場になるとは思っていなかったので今でも半ば信じられません。

ただ、少し不安もあります。

まず大学院で研究をしながらソフトウェアエンジニアもやることになるので、そこが単純に心配です。契約上アルバイトとも少し違うので、社会人大学院生みたいな感じになるのでしょうか。労働時間を自分で決められるのでそこはかなりありがたいですが。

また日本国内にほぼ産業が存在しない分野に就くことになるので、潰しが効かない感じになるのは少し不安です。まあ正直自分のことを特定の言語で特定のソフトウェアしか作れない程度の能力だとは思っていないのですが、かなり変な経歴にはなってしまいます。

会社がこの先存続できるかも気になるところです。融資情報とかを見てしばらくは大丈夫そうだなとは思ったのですが、現状収益事業のないアメリカの会社なので、苦しくなったら真っ先にレイオフされる立場です。収益事業のアイデアはあるそうですが、大丈夫かな......

振り込み通知が最大の慰めです。品のない話ですがかなり貰えます。別に金持ちになりたいわけでもないのですが、大学院生にとってお金の心配がないのは何よりもの精神安定剤です。
心配がなくなったので、このまま博士号までチャレンジしようと考えています。物理の研究でやり残したことがあるので、残りの修士課程と博士課程でなんとかけりをつけたいと思っています。さっき書いたように社の存続とかも心配なので学生の身分をしばらく維持しておいた方が良いだろうというやや消極的な判断もありますし、一族郎党で初の大学院進学者なので、せっかくなら博士号まで両親、祖(父)母に見せたいというのもあります。まあ元々そのつもりではあったのですが、このままだと貧乏院生生活最低3年延長という暗い未来が待っていたので、その心配が無くなったのは嬉しいです。

こんなことしてて大学院は修了できるの? というのも心配と言えば心配ですが、論文何本分かのアイデア自体はあって、実際論文が出せそうというところなので、博士の卒業要件自体はなんとかなりそうかなという感じです。

大学院生のくせに研究に全ツッパしないのは研究を舐めていると言われると反論に窮しますが、何某かの稼ぐ手段は必要でしたし、短期的な(すぐに役にたつ)社会へのコミットと長期的な(すぐには役に立たないが未来の基盤となる)社会へのコミットの両方をやっていきたい、というのが強欲な自分のポリシーでして、前者をAstralでの仕事、後者を研究で実現したいと考えています。そんな研究ができているの? というとあんまり自信はないですが......


それはさておき、私が今開発に関わっているPython型チェッカーのプロジェクトは2025年中には最初のリリースができそう、という感じなので、その暁にはぜひみなさんに使っていただいて、皆さんのPython開発体験の向上に貢献したいと考えています。
pyrightやmypyよりだいぶ速く、細かいところまで解析してくれます。個人的にはlanguage serverとの連携にも興味があって、ゆくゆくはred-knotの型情報を使ってリッチなlanguage serviceを提供できるところも関わっていきたいなと思っています。

私個人のOSS活動もまだまだ続けていくつもりではあります。pylyzerはメンテナンスフェーズにするつもりですが、Ergの開発は今後も細々と続けていきたいと思います。

最後に、Astralはまだまだ社員募集中のようなので、興味があって似たような経験がある方はapplyしてみると良いかもしれません(日本人の同僚が欲しい)。


脚注
  1. 同じくOSS活動から海外のIT企業へjoinされた方の事例: https://zenn.dev/magurotuna/articles/how-i-joined-deno ↩︎

24

Discussion

lucidfrontier45lucidfrontier45

興味深い投稿をありがとうございます。pylyzerとred-knotの動向を追ってきましたが、最近shibaさんがred-knotにコミットしていることに気づき、pylyzerはどうなるのかと思っていたところにタイムリーな内容でした。

会社がこの先存続できるかも気になるところです。融資情報とかを見てしばらくは大丈夫そうだなとは思ったのですが、現状収益事業のないアメリカの会社なので、苦しくなったら真っ先にレイオフされる立場です。収益事業のアイデアはあるそうですが、大丈夫かな......

私もAstral社はいったいどこで利益を上げようとしているのかずっと疑問でした。もしよろしければ話せる範囲で教えていただければ幸いです。

博士課程も頑張ってください!

ログインするとコメントできます