OSSで世界と戦うために - ゆーすけべー日記

天然パーマです。

OSSで世界と戦うために

「日本人」を理由にしたくないし、「コードは全世界共通語」なのは分かっているけど、自分が日本人で日本語を母国語としていることはOSSにおいて不利になる。 この2年間のHonoの開発をしてきた経験で分かったことだ。 そこに目を瞑ってはいけないし、自覚することで世界と戦えるかもしれない。今回はそのことについて書こうと思う。

8k

現在、HonoのGitHubスター数は8,000を超えた。

これはとんでもない数字なんだけど、もっと伸びるべきで、早く1万を超えなくはいけない。 npmのダウンロード数は週間「46,000」とこれは相対的に低く、こちらも伸びるべきである。

数字が全てではないが、こうした数字は昨今のOSSにとって「一番の」指標であることは確かだ。 だから戦うことはこの数字を伸ばすことである。

なぜ「戦う」のか

なんで「戦う」というおっかない言葉を使い、そして戦わなくてはいけないのか。 まぁ、単純に悔しいからだ。良いソフトウェアを作ってるのにそれが正しく評価されないことは悔しい。 いろんな人を巻き込んで、コントリビュートしてもらっているのになおさらである。

日本人であることや日本語を母国語とすることがその理由になっているのであれば、それはもったいない。

2つの側面

OSSに関わらずソフトウェアを作るには2つの側面がある。

  1. よいソフトウェアを作る
  2. 使ってもらう

幸いなことに「1」は日本人かどうかはほとんど関係ないと思う。

問題は「2」だ。例えば、次に話すのは「政治」の話である。 「1」だけに興味ある開発者にとってはたぶんすごく退屈なことだというのを予め伝えておこう。

OSSとインフルエンサー

この不利な状況は「英語ができない」から来ているのではない。それも多少あるとは思うが第一の理由ではない。 周りが日本語を喋っている状況で英語を喋らない(書かない)からである。

痛感したのはXを観察していてだ。 現在、OSS、特にフロントエンドを取り巻く大御所のやり取りはXでやり取りされている。

例えば、T3 Stackを提唱しているTheoや、 TypeScriptエデュケイターのMattは力がある。 Next.jsを扱うVercelは非常に巧みだが、所属するDevRelのLeerobの影響力は強い。 shadcnも最近参画した。 BunのJarredの発言は新興のランタイムの人気を支えるのに一役かっているだろう。 プロダクトで言うとDrizzle ORMは洒落が効いていて面白い。 htmxはふざけすぎてるがフォロワーが多い。

「これはインフルエンサーの話ではないか」。確かにそう。 しかし、残念ながら、声を上げることは昨今のOSSでは強力な戦闘力になる。 我々は、なかなかこの文脈に我々は入れない。 それは英語ができないからではない。日本語で話している環境の中で英語で発信しても力にならないからだと思う。

Honoのアカウント

興味深いのはXのHonoアカウント。 実はFollowingがメンテナ含め4人しかいないのに、フォロワーが今みたら「3,526」いる。

大したことは言っていない。けれど、

Wow, got 8k! Thanks😊

というポストをすると瞬く間にLikeがつく。

僕の個人アカウントはフォロワー「9,200」とそれでもかなり多い方だが、Honoのものと比べると明らかに世界への影響力が違う。 英語の文脈で英語で発言すれば、価値のあるアカウントに対して「世界的に」評価される。 このアカウントが日本語を話していたら、こうはならなかった。

blog.yusu.ke

この前、世界中の「ゆうすけ」が嫉妬するであろう「yusu.ke」という素晴らしいドメインを取った。 ちなみにkeはケニアドメインである。

あえてyusukebeというアイデンティティを捨ててblog.yusu.keというサブドメインで英語のブログを書くことにした。 会社のメンバーに見せる用途もあるが、実験をしてみたかった。まだ4本しか記事を書いていないがなかなか面白いことが起こった。

記事を書いたらそれをHonoのXアカウントでシェアするというのをやった。すると反響があったのだ。 例えば、「Hono + htmx + Cloudflare is a new stack」という記事はHackers Newsに掲載れて60ポイント集めている。

やればできる。

Express is the new JQuery

インフルエンサーがHonoを取り上げつつある。 自称「President of Whiteboards」のBenが「Express is the new JQuery」と発言し「Honoのことを思っていた」と語っている。 そして「ホワイトボード動画」をアップした。当然「Hono」も出てくる。

Podcast SyntaxWesは以前からHonoをピックアップしてくれている。 近々更新されるエピソードはCloudflare Workers特集らしく、そこでもHonoの話をする。

Bunの「1.0」の発表ではZodの作者でBunのDeveloper AdvocateのColinがHonoを紹介している。 驚くべきことにExpressとKoaより先に名前が出てくる。

Bun効果

Bunといえば、Bunの効果はすごい。Bunに早いうちから対応できたことで大きく成長できた。 詳しくは以下に書いた。

DenoFest

先日、DenoFestというイベントで話す機会をもらって行ってきた。 これはなかなかすごいイベントでDenoの開発チームが25人(!)日本に集まって、その人達が参加するという。 もちろんNode.jsとDenoの作者のライアン・ダールもいる。

嬉しかったのは彼はHonoことを知ってくれていて、発表の中で「Don’t use Express, use Hono」と発言する場面もあった。

DenoのDevRelのケビンが以前からHonoユーザーであることは知っていた。 なんといっても公式の「Deno Doc」ではHonoをDocusaurusのサーバーサイド、リダレクタとして使っている。 そのケビンとはよく話せた。また、彼の発表、クイズミリオネア形式の「The state of web frameworks in Deno」ではトップバッターにHonoが出てきた。

Who is using Hono in production?

他にも、HonoのGitHub DiscussionsにWho is using Hono in production?というポストを投げたら、 みんな書いてくれて、自分が知らないかなりの数の利用者がいることが分かった。

  1. appwrite-funcover
  2. Nodecraft
  3. Ponder.ly
  4. SticAI
  5. Skill Struck
  6. Reejs
  7. toddle
  8. LanderLab
  9. OpenStatus
  10. Loglib
  11. AI.LS
  12. Equator Analytics
  13. ExpenSee

悪くはない

そう、悪くはない。ただ、逆に言うとこのくらいやらないと戦えない。大変だ。

では、どのように戦っているかを書いていく。

神対応

すごくシンプルで強力な戦い方がある。「神対応」だ。 Issueには素早く返信する。相手の環境の再現する努力をする。Feature requestを実現できないか熟考する。 「こっちはサポセンじゃないぞ」と嫌になることもあるし、GitHubの受信箱を見るのが億劫になることもあるが Issueテンプレートを用意したり、毎日の習慣化をしたりすればなんとかなる。

それよりもquickとかfastとかawesomeとか💯とか書かれるのがとても嬉しい。

その人とHonoというソフトウェアが繋がった感じがする。神対応に国籍、言語は関係ない。

GitHub

GitHub上の開発に関しては徹底して英語を使っている。 でも、自然とHonoのコントリビューターは日本人が多い。 これには特に深い意味はなく、僕が日本人だからだと思う。そして、それは悪いことではない。 日本人だからソフトウェアの品質が落ちることは決してない。

「グル化」しなければいいと思っている。 「日本人だけがやってるプロダクト」として見られるのが怖い。 これは杞憂かもしれない。なので、ほとんどの議論をGitHub上でオープンにすることを心がけている。

英語

いくらDeepLやChatGPTを使えるとしても、英語を書く、読むための「瞬発力」は必要になってくる。 Issueの返信を日本語で書くのと英語で書くのとでは作業の重さが違う。 また、Discordや社内のチャットでは文章を毎回添削をしていると時間がかかるし、フォーマルになりすぎる。 だから瞬発的に英語を書くその精度を上げるしかない。

ドキュメントとランディングページ

逆にAIを使えばドキュメントページはわりと書ける。 僕の場合、ブログを書くのは好きだが、英語、日本語に関わらずフォーマルなものを書くのは苦手なので、 その辺は頑張らなくてはいけないがなんとかなりそう。

課題はHonoにはランディングページがない。 OSSで戦うにはブランディングが大事なのだが、英語とか英語ネイティブなセンスが要求されるのも事実だ。 頑張って作ろう。

時差

Cloudflareに入社するまで時差というものを甘く見ていた。 これは結構キツい。

例えばうちのDevRelチームはヨーロッパとUSにメンバーがいるので、自然とアジアの僕が犠牲になる。 ミーティングが23時30分に設定される。下の図がかなり可笑しい。DevRelチームのメンバーのいる場所と時間をプロットした。

面白いのは、よく社内でチャットをする開発者がいるなーと思ったら、オーストラリアのGlenだった。それは当然である。 彼は僕をCloudflareに誘ってくれたひとりで、UKから地元のオーストラリアに帰って仕事をしたいから同じタイムゾーンの開発者を探していたのがキッカケである。 今となってはよく分かる話だ。

これは社内での話だが、OSSの件でも言えることだ。同期的なコミュニケーションがつらいのだ。

Discord

HonoにはDiscordがある。結構な人数がいて今見たら「212 Online」だ。

Discordの同期的なコミュニケーションでは上記の通り不利になることがある。 なので、なるべく非同期でことを終わらせられるようにしている。 そもそもDiscordだと質問攻めになるのが嫌ってのもあるんだけど、「Questions」はGitHubのDiscussionsでやってね、としている。

まぁそれでもDiscordでの会話の半分以上は質問なのだが、もう放置している。 最近だと、僕がいなくても返答をしてくれる人が出てきて、コミュニティっぽくなってきていて喜ばしいことだ。

コントリビューター

コントリビューターを増やすことが大事だと思っている。今のところ90人。これはもっと増えるべきだ。

自分の性格上、全部やってしまいがちなんだけど、なるべく任せるように心がけている。 例えば、Issueに上がったことでその人が解決できそうなものだったら、PRを作ってくださいと言う。 ソフトウェアに関わる人を増やすことが、より多くの人に使ってもらうことに繋がるはずだ。

エコシステム

Honoにはミドルウェアという仕組みがあって、

  1. ビルトイン・ミドルウェア
  2. カスタム・ミドルウェア
  3. サードパーティ・ミドルウェア

の3つがある。この「3」は外部のライブラリに依存したり、文字通り第三者が作るミドルウェアのことである。 github.com/honojs/middlewareというモノリポで管理し、@hono/sentryといった名前空間で配信している …そのつもりだったが、最近では作者が各自のリポジトリで管理し、独自のパッケージ名で公開するミドルウェア、もしくは関連プロダクトが増えてきた。

当初はあまり意図してなかったことだが、これはエコシステムが成長した証で、素晴らしいことだと思っている。

嫉妬

具体的には書かないが嫉妬されることもある。でもかなり少ない方だと思うし、わりと理にかなっている。 その辺をいなしたり、気にしない力も必要になってくるんだと思う。

OSSで戦うために

他にも語るべきことはある気がするが、ここらでまとめよう。

  1. よいソフトウェアを作る
  2. 使ってもらう

今回は主に「2」の話をしてきた。

我々のソフトウェアはもっと評価されるべきかもしれないし、 あなたのソフトウェアももっと評価されるべきかもしれない。 その時に日本人を言い訳にしたくはない。だからこそ、その差を自覚し、世界と戦っていく。

「戦う」という物騒な言葉を使ってきたので、最後にそれを濁すためにHonoのContribution Guideから以下を引用しよう。

Note: This project is started by Yusuke Wada (@yusukebe) for the hobby proposal. It was just for fun. For now, this stance has not been changed basically. I want to write the code as I like.

まぁ戦いたくないよね。

追記

一緒に作っているusualomaさんがこんなこと言ってました(タイポしてるのは気にしないでください)。感動しました。