Webのフロントエンド開発言語として真価を発見されたJavaScriptは、数年後に今度はサーバーサイド開発言語として再発見されます。しかし、その立役者となったNode.jsの作者ライアン・ダール(Ryan Dahl)はNode.jsの開発を離れ、新しいJavaScript実行環境としてDenoを生み出しました。
▶ Deno - A modern runtime for JavaScript and TypeScript
今回お話しを伺った日野澤歓也(@kt3k)さんは、2018年からオープンソース活動としてDenoにコントリビュートを重ねた結果、作者のライアン・ダール自身にリクルーティングされ、2021年1月にその開発会社であるDeno Land Inc.にジョインしました。現在はフルタイムのOSS開発者として勤務しています。
海外のテック企業や、日本国内でフルタイムのオープンソースコミッターとして働く人のキャリアが紹介されることはありますが、OSSの開発元でもあるUSのテックベンチャーで働く経験はめったにできないことでしょう。どういったキャリアを歩んでDeno Landにたどり着いたのかを聞きました。
- なぜどのようにOSSスタートアップで働いているのか
- ライアン・ダールという奇妙な人物とDenoのチャレンジ
- コミュニティで感じた「発信者になれないもどかしさ」
- なるべく難しく手応えがある場所で挑戦したい
- 2022年のサーバーサイドJavaScriptはどうなる
なぜどのようにOSSスタートアップで働いているのか
── OSS企業でフルタイムで働く事例やモデルは日本にあまりないように思いますが、世界的にはけっこうあるのでしょうか?
日野澤 Denoで働いてみて分かってきたのですが、最近はOSSのスタートアップがけっこうあるんです。RemixやAstroのようにJavaScript関連のOSSを作る会社が資金調達して社員を募集する流れがあります。
OSSの抱える難題を出向いて直していくIgaliaのようなOSSコンサルティングには実力のある人たちが集結していて、行くべき人が行き着く最終地点になっていますね。開発者がギブするだけでなく、テイクもできるエコシステムができ始めているんじゃないかと思います。
── 日野澤さん自身はどういった経緯でDeno Landにジョインすることになったのでしょう?
日野澤 2020年10月ごろ、ライアン・ダール本人からメールが来ました。「ちょっと個人的に話しませんか?」くらいの内容だったんですが、なんとなくリクルーティングかもしれないとは思いました。そしてリモートのミーティングで「会社をやっているんだけど、よかったら一緒に働きませんか?」と聞かれ、その場で「やってみます」と返答しました。普段あまりメールを見てなくて、1週間くらい放置してしまってたのでけっこう危なかったですね。
── リクルーティングかもしれないと直感が働いたのはなぜでしょう?
日野澤 ライアン・ダールがカンファレンスでDenoについて発表するとき、スライドの最後の方でコントリビュータを紹介しています。その中で自分はいつも3人目くらいに出てたので、主なコントリビュータとして認識されているのは分かっていました。百数十件はコントリビュートして95%くらい取り込まれていたので、かなりポジティブなコミュニケーションが成り立っていたと思います。
── 外部のコントリビュータとして関わるのと、内部スタッフとして働くので違いはありますか?
日野澤 最初に「There is no set task.」つまり「定められたタスクはありません」と言われたことは、けっこう衝撃でした。それぞれに割り振られるタスクが基本的にないんですね。Denoにとっていいと思うことを自分で見つけて、実行しなければいけない。これが最初は考え過ぎたりしてけっこう大変でした。実行したらしたで、なぜそうしたかを説明しなければいけませんし。
── 他のメンバーとのコミュニケーションは英語ですよね?
日野澤 そうです。今は13人いて、全員エンジニアです。私は半年ほど留学経験があって、ある程度の英会話は身に付いていました。また、オープンソースの世界でコミュニケーションする中で、技術上で必要な英語の表現や語彙を、書き言葉としてですが習得してきました。ライアン・ダールは英語圏以外で就労した経験もあるためか、そういう私の英語でも会話しやすいですね。
── 率直に伺いますが、給与面ではどうでしょう?
日野澤 ジョインするまでフリーランスのITエンジニアとして国内の大きな企業とも仕事をしてきましたが、それと比べて遜色ない待遇だと思います。
ライアン・ダールという奇妙な人物とDenoのチャレンジ
── Denoにコントリビュートするようになったきっかけを教えてください。
日野澤 もともとライアン・ダール自身にすごく興味を持っていました。JSConf EU 2009でNode.jsを発表して作り始めたものの、2012年に姿を消してしまう。コミュニティからいなくなってしまったんですよね。自分はそこに、すごく奇妙なものを感じたんです。
── ライアン・ダールという人物への興味が先だったんですね。
日野澤 はい。大きなオープンソースソフトウェアを1つ成功させたなら、その実績でいくらでも活躍できるはずなのに、消えて全く違うことをする。そんな選択は「どんな考え方があればできるんだろう?」と興味が湧いて、個人的に「ライアン・ダール・ウォッチ」を始めました。その頃は情報がほとんどなかったんですが、たまに出てくるんです。
例えば2017年には、Node.jsとExpressフレームワークでサーバーサイドを構築することも定式化しているのに、ポッドキャストで「Nodeは大規模なサーバーサイドの構築には向いてない。自分ならGoを使う」みたいな発言をして、Go言語の良さを蕩々(とうとう)と説明していたり。「なぜ作者自らが否定しているんだろう?」「どういうものの見方をしている人なんだろう?」と、さらに興味が強くなりました。
▶ Episode 8: Interview with Ryan Dahl, Creator of Node.js - Mapping The Journey
東京Node学園祭†でも、参加者の考えを付箋に書いて貼り付けるコーナーで「ライアン・ダールがNode.jsはダメだって言っていますが、皆さんはどう思いますか?」といった質問をしたりしました。
† 日本のNode.jsコミュニティによる大規模カンファレンス。当サイトに掲載した古川陽介さんのインタビューなどを参照。
── そこにDenoが出てきたわけですね。
日野澤 はい。JSConf EU 2018でライアン・ダールは、「Node.jsに関する10の反省点(10 Things I Regret About Node.js)」と題して「Node.jsはここが失敗であり、その解決策としてDenoを作っている」というアグレッシブな発表をしました。多くの人がこれをきっかけにDenoを知ったと思います。
もともと注目していた人が急にドカンと大きなプロジェクトを打ち出してきたので、これまでの蓄積もあって興味ががぜん大きくなり、それからもうずっとDenoのイシューをGitHubでウォッチしていました。最初の頃は全部のイシューを見てたくらいです。
当時は、Node.js日本ユーザーグループの古川(陽介)会長がいるリクルートで仕事をしていたこともあって、会長も同席する定例ミーティングで、勝手に「今週のDenoで起きたこと」を報告していました。
── Denoを追いかけていて面白かったのはどのあたりでしょう?
日野澤 今でこそベースは固まって細かい部分を詰める作業をしていますが、最初は方針もかなりコロコロと変わって、ベースのアーキテクチャをひっくり返すことも何度かありました。大きな更新を毎週のようにしながら作っていくのを見ていて、本当に面白いと感じていました。使ったことのない技術の組み合わせで、新しいものを作ろうとしている。それが単純に面白いなと。
── 具体的に特に強くひかれたことはありますか?
日野澤 Node.jsはビルドシステムにGYP(Generate Your Project)を採用しています。ライアン・ダール自身これを「10の反省点」に挙げていて、DenoではGNという別のビルドシステムを使おうとしていました。
以前はGYPだったChromiumやV8(JavaScriptエンジン)もGNに乗り換えていましたが、Chromeの関係者以外でGNを使いこなそうとしている人をそれまで一度も見たことがなかったので、そのチャレンジがまず面白いと感じました。初めてDenoにコントリビュートしたのも、GNのビルドを成り立たせるようディレクトリを整理するイシューからで、最初の頃はGN関係の作業が多かったですね。
── そこにどういった面白さがあったんでしょうか?
日野澤 そういう「Chromeチームくらいしか使ってないGNという謎のビルドシステム」を使いこなしてみる作業には、新奇なものと戦う魅力をすごく感じました。例えば、DenoはV8エンジンを除いてRustで実装する方針でしたが、RustとGNをいかにちゃんと組み合わせるかは難易度が非常に高く、みんなでああだこうだとアイデアを出し合うような、チャレンジングな課題でした。
コミュニティで感じた「発信者になれないもどかしさ」
── 古川さんのお名前が出ましたが、以前から面識はあったのでしょうか?
日野澤 直接お話ししたことはなく、Twitterでアイコンを見たことがあるくらいの認識です。リクルートのあるプロジェクトにフロントエンド技術者として誘われて、他のプロジェクトもいろいろ見てほしいとなって範囲が広がるうち、偶然「これから古川さんが来ます」となりました。初対面のときは他の方から「会長」と呼ばれていて、「何で会長なんだろう?」と思った記憶があります。
── それまでフロントエンド技術者ではあったけれど、JavaScriptやNode.jsのコミュニティとは親しくなかったのですね。
日野澤 そうですね。古川さんがNode学園祭をオーガナイズしていることを聞いてから、参加するようになりました。コミュニティに参加してみると、中の人がどんなことを考えながら作っているのか、最先端でどんな議論があるのか、そういった情報が分かってきて興味を覚えました。
ただ、すでにNode.jsのコミュニティは大きくて、積極的に情報を発信している方が何人もいました。既存の領域で追いかけるのはなかなか難しく、発信者になれていないことにもどかしさを感じていました。
── そうなると、Denoは積極的にレポートできる新しい領域ということも言えますね。公開直後には懐疑的な見解もけっこうあったようですし。
日野澤 そうですね。JSConfで大きな構想を発表しながら何もできなかったプロジェクトは過去にいくつもあるので、Denoもその1つという見方がされていました。
Node.jsはコミュニティも大きく、ライブラリも豊富になってましたから「やり直すのは現実的ではない」と認識する人は多かったですし、おかしくない考察だと思います。あまりにドン・キホーテ的で、「何というものと戦うつもりなのか、この人は」という印象を受けました。
── Node.jsそのものは、その前から仕事で使ってきたわけですよね。
日野澤 はい。2012年ごろ、あるWeb事業者で巨大な独自フレームワークを社員としてメンテナンスしていました。JavaScript技術を積極的に活用して、フロントエンドは全てCoffeeScriptでした。Node.jsは、このプロジェクトのサーバーサイドで初めて触りました。
── 2010年代前半だと、Web事業各社で独自フレームワークがブームになったものの、メンテナンスの負荷も浮上して、技術的負債化し始めていた頃ですよね。
日野澤 まさにそうでした。最終的にチームが「PHPに書き換える」と判断して撤退作業に従事したのですが、自分はギリギリまで「Node.jsで行けるんじゃないか」派でした。
Node.jsは非常に面白く、CoffeeScriptも今でこそあまり好意的に語られませんが、当時は新しくて言語的に美しいと感じる部分もありました。そういう技術を消すのは「もったいない」と思いましたし、推進派だったためNode.jsにも自然と詳しくなりました。
なるべく難しく手応えがある場所で挑戦したい
── JavaScriptはいつごろから使っていたのでしょう?
日野澤 2000年代後半から業界全体が「HTML5がはやる」と言っていた頃、ローカルストレージやアプリケーションキャッシュといったフロントエンド技術も拡充されて、それまでFlashでやっていたこともHTML5でできるようになる。HTML5ではAPIも増えて、JavaScriptの需要が高まる。それで仕事も増えるだろうと考えて、JavaScriptを自分のメイン言語にしようと決めました。
── その当時に手掛けた仕事などあれば教えてください。
日野澤 ある業界誌のWebサイトで、1週間分の記事をオフラインで読めるようにするため、アプリケーションキャッシュを使う開発プロジェクトに参加しました。フロントエンドを担当したのですが、バックエンドよりプログラミングの難易度が高いと感じました。
── それはどういった点でしょう?
日野澤 フロントエンドは本質的に非同期的で、「ユーザーがこのボタンを叩くとこのリクエストが飛ぶけれど、その最中に別の行動を取ると別の何かが発生する」といった具合に、同時並行的にいろいろなことが起きます。それを意識しながらプログラムを書くので、難易度が高くて、手応えがあります。
── 難易度が高いと「やりたくない」と考えそうなものですが、逆になんですね。
日野澤 自分ができる最大限の仕事をしたいという気持ちが強くあります。大学は数学科で数理論理学を専攻しましたが、それもなるべく難しいものに取り組んでいきたいという思いからかもしれません。
とくに「新しい何かを作る」「まだないものを作る」という働き方が、自分のバリューを最も発揮できると思っていて、小さい頃からレゴブロックを1日中いじっていたり、ゼロから何かを作ることに喜びを感じるたちでした。その道具がプログラミングになっただけかもしれません。
Deno Landを選択したのも、英語も含めて「そっちの方がチャレンジがある」「戦いがある」と感じたためです。なるべく難しいもの、手応えのあるものに取り組んでいきたいですね。
── そういう形でプログラミングにハマったのは学生の頃からでしょうか?
日野澤 実は高校でPascal、大学でもCなどを学びましたが、一通り理解しても「これで何ができるんだろう?」というだけでハマりませんでした。プログラミングをする意味が見いだせなかったんですね。
むしろ、大学生の頃のCGIゲームは大きかったかもしれません。「ロードオブモンスターズ3」上の友人と連絡を取る掲示板を、Webの記事を見てPerlで書いてみたんです。すると実際に動いてコミュニケーションできたし、要望に応えて修正するのも人の役に立って経験になり、とても納得感がありました。
2022年のサーバーサイドJavaScriptはどうなる
── ここまで、日野澤さんのキャリアを現在から学生時代までさかのぼってお聞きしました。最後にまた現在のお仕事に戻りたいと思います。Denoはもう普通に利用できるソフトウェアでしょうか?
日野澤 自分は、そもそもの設計やモチベーションの部分で作者の言うことにほぼ同意しており、普段の作業の道具としてもNode.jsよりDenoを使いたいと思っていました。混沌が面白かった最初期とは違いますが、単純に自分の利益にもなるので、どんどん発展させていきたいという気持ちは強くあります。
── 今後、Denoはどう使われていくと考えていますか?
日野澤 2022年は採用が進んでいくと思います。2021年11月にはSlackが次世代SDKのベースとしてDenoを採用しました。これをきっかけに、各種スタートアップ企業がサービスへのDenoの導入について問い合わせてくるようになりました。
また、SvelteやRemixがDeno用のアダプタを開発していて、フレームワーク側も「Denoに対応すれば、自分たちの採用が広がる」と認識しているようです。こうしたシナジーが生まれて、外堀からDenoの使いやすさが増していく動きが始まっています。
Googleの開発者によるポッドキャスト「HTTP 203」で取り上げられたり、mizchiさんも「本格的に本番環境に投入できる時代が来る」と書いていたり、メインストリームで普通にメンションされる存在になっている印象があります。
── ご自身のこの先のキャリアについてはどう考えていますか?
日野澤 いれる限りはDenoにいます。何らかの理由でいられなくなった場合も、Denoの働き方が面白いので似た仕事を、JavaScriptのOSS関連の企業で探せればと思います。
取材・構成:高橋睦美
編集:はてな編集部