Deno v1がリリースされました
2020/05/14(米国東海岸時間2020/5/13)にDenoのv1.0.0がリリースされましたkeroxp.icon
5/13はDenoの開発開始からちょうど二周年ということで今年のはじめころから予定されていたリリース日でしたが、もともと四度のv1リリース延期を経てのリリースでしたので、今回のリリースは鬼気迫るものがありました
特にここ数ヶ月はRyanを始めとしてコアの開発メンバーは脇目もふらずにv1のリリースに邁進していてすごかった
自分もstdの細かいバグをちょこちょこ修正しながらもコロナ関連で仕事がとても忙しくてなかなかコントリビュートできずにいましたが動向はkt3kさんはじめとしたdeno-jaの方々とともに見守っていました
v1直前のリリースは駆け込みの破壊的変更が沢山入ってライブラリの対応もてんやわんやでしたがなんとか対応
そしてやっとこの日を迎えたわけです
いやぁ…‥
長かったなぁ
自分がDenoにコントリビュートし始めたのは18年の年末なので、1年半ほどコントリビュートを続けてきたことになります
その甲斐あってv1時点でのDenoへのコントリビューションランキングでは12位で、6位のkt3kさんについで日本で二番目にコントリビュートすることになってしまいました
とはいえコントリビューションランク上位5人のRyan, Bartek, Bert, Kevin, Kitsonに比べたら全然少ないので、やっぱりこういう大きなプロジェクトでも本当のコア数名によって作られていくんだなぁとしみじみ
彼らはコーディング以外にもDiscordやイベント登壇などDenoコミュニティのために日々活動していて、本当に尊敬します
自分ももっとコントリビュートしたかったけど、時間的制約や英語でのコミュニケーションに難を感じたりしてなかなか本当のコアには行けなかった
でも自分なりにできることはできたと思います
主なコントリビューション
std/ws(標準WebSocketモジュール)
これは初期からずっとメンテナンスしていました
もともと徹夜で作ったものをDenoのイシューに貼ったらRyanから「stdに入れられない?」と言われて入ったものなので、その流れからずっと僕がメンテナンスすることになりました
バグもたくさん見つかってそのたびにイシューで指摘してくれる人たちがたくさんいて、直すたびに安定して行きました
おかげでWebSocketの仕様もイチから理解することができたので得難い経験でした
JSXサポート
Denoでは標準でjsx/tsxが実行可能なのですが、これを実装しました
もともとtsxはサーバーサイドでも便利なテンプレートエンジンだと思っていてDenoでも使えたらと思っていたのですがなぜか誰もそれについて触れていなかったので、イシューを立てて自分で実装することになりました
最初こそ懐疑的な意見もありましたが、今ではこれもDenoの大きなNode.jsへのアドバンテージになりました
ちなみに、Denoはバンドラーも内蔵されているので、クライアントのコードも設定ファイル無しでjsxを使えます!
std/http
かつて寝てる間にrevertされていた話があってから一度はDenoへのコントリビュートを止めかけた僕ですが、やはりTypeScriptへの情熱は捨てきれずに自分なりのHTTPへのコントリビュートを模索し始めてはや一年 npmへのyarnのような関係性を目指して独自のhttpサーバーのservestを開発し始めたわけですが、その成果はありました 当時std/httpは初期の実装の乱雑さがまだ残っており設計的に綺麗でない部分も多かったのですが、そこからServevstでHTTP/1.1のプロトコルレイヤーから再設計しなおし、結果的にServestのコードはとても整理されたものにできました
そこで実験を繰り返し、得た成果はstd/httpにもポーティングされています
自分なりに自由に設計した成果がコアに反映できるのはやはり嬉しいです
HTTPサーバーをイチから作る過程でHTTPの仕様も理解できたし、HTTP/1.1がとてもシンプルで簡単なプロトコルだということが分かってプログラマーとして成長できました
WebサイトやWeb APIといえば「どのフレームワークを使う?」から会話が始まってしまいますが、要点を理解すればHTTP/1.1はとてもシンプルで、サーバーもイチから簡単に作れることをもっと知ってほしいです
※HTTP/2は神による神のためのプロトコルなので同じに考えてはいけない
テスト周りの掃除
結構地味な話になるのですが、今年の一時期はDenoのテスト周りの掃除や安定化をやっていました
例えばみんながテスト中に消し忘れたconsole.logの出力を消していったりとか
TSの!オペレータをassert()に全部書き換えたとか
テスト中に使用中ポートが競合して落ちる問題を解決するために色々やったけどむしろ悪化してRevertされたとか(こいついっつもRevertされてんな)
こういう非知的な作業もイシューに上がってくるので、まずはこういったところから始めるのも立派なコントリビュートだと思います
なぜDenoにコントリビュートし続けたか
TypeScriptが好きだったからと言うのは表向きの理由なんですが(90%は本音)、残りの10%は変な意地みたいなものがありました
事の経緯はある時NodeJS ForundationのTSC(最高技術委員会)のメンバーを眺めていたときにそこに日本人が一人もいなかったことを知ったことでした
Nodeのコントリビュータには何人も日本人の方はいますが、意思決定ができるレベルの場所に同じ国の人間がいないというのはとても残念に思いました
なのでDenoでは自分も積極的に意見を出して日本人として技術コミュニティでのプレゼンスを高めたいという謎のナショナリズムがありました
その結果色々なことがわかり、なかなか難しいなぁと頭を抱えています
やはりそれなりに大きな技術コミュニティでプレゼンスを発揮するには、技術力は当然として人を英語で説得したり説明したり世間話をしたりする能力が不可欠で、それはなかなか上達しない
TypeScriptでプログラムを書くのは得意でも、英語話者のジョークや会話の雰囲気をチャットから読み取ったりするのはまだまだ難しいです
「こういうの英語でなんて言えばいいんだろう?」という躊躇いから面倒になって会話を打ち出せないこともしばしあって、こういうのを繰り返していると「日本人はシャイだなぁHAHAHA」とか思われてそうだったり
実際、開発中に日本人の方からのイシューやPRは本当に少なくて、deno-jaのミートアップでは積極的に新しいコントリビュータになってもらおうと画策していました。その甲斐あって何人もの方がDenoやDeno周辺ライブラリのコントリビュータになってくれました
そういう活動の中で思ったのは、日本の技術コミュニティの知識や技術力は世界的に見ても決して低くなく、むしろ水準で言えばとても高いレベルにある国だと再認識しました
しかしいざOSSの中身を見てみるとコアのコントリビュータはほとんどいないし、日本国内での記事などもOSSの紹介記事ばかりで、自分たちが中心になるということが極端に少ないと思いました
自分たちが日々やっていることといえば海外のOSSを当たり前のように無料で使いまわして「使えねーなー」とボヤいては小銭を稼いでるだけなんじゃないか?そういうネガティブなことばかり考えている時期もありました
だからDenoになんとかコントリビュートを続けた10%の理由は、将来的にDenoがNode.jsのようなツールになったときにまた自分がただボヤくだけで何も改善できない人間になりそうで嫌だったからです
人が作ったツールをいやいや使うよりも自分でより良いツールを作ればいい
今Node.jsがこれだけ大きな存在になったのも10年前にそう思った人(Ryan)がいたからで
僕はなんだかんだ日本が好きなので、日本のプログラマのプレゼンスを上げていきたいと思っています
確かに海外のOSSに参加することは色々と大変で骨の折れる事ばかりなのですが、だからこそ僕の背を足蹴にしてコントリビュータになっていってほしいと思います!
Ryan Dahlについて
RyanはDenoの開発者であり、Node.jsの開発者でもあります
JSランタイム開発は二度目です的な…
もちろん僕からしても以前から名前は知っていたのですが、まさか自分が彼と一緒にJSラインタイムを作ることになるとは夢にも思ってなかった
開発の中で分かったのは、Ryanはとても普通の人だということ
もちろんいい意味でです
「Node.jsを作った」という字面だけ見れば超スーパーハカー的なイメージを持ちますが、彼はとても優しく傲慢な態度を微塵も見せないいい人です。もちろん技術的にもとても高いレベルの知識を持っています。
ただ当たり前ですが完璧超人というわけではなく、彼もコアコントリビュータも皆ミスをするし、バグも生みます
なのでとても信頼感を持てるし、自分でもなにか力になれるんじゃないかと思わせてくれるスキがありました
以前deno-jaコミュニティでDenoの同人誌を出した時は別に連絡してないのに僕のところに直接メールが来て「一部売ってくれない?」と言われてNYのライアンの自宅に送ったということもありました
なんというか、有名人?とは思えないようなフットーワークの軽さだったし、まったく偉ぶる雰囲気がないのが本当にすごいと思いました。(少しぐらいは「いやー俺あれなんだけどさ、あれ作ったんだけどさ、ほら知ってる? Node.js」みたいな意識があるのかと思ったけど本当に全くそういう態度がなかった)
彼の中ではNode.jsはもう全く別の世界の話なんだなぁと感じる部分が多くありました。だからDenoを作ったんでしょうけども
deno-jaについて
/deno--jaは日本の有志が集まって18年末に結成されたコミュニティですが、ここでの活動で多くの実りある経験をすることができました kt3kさんやsyumaiさん、hashrockさんとはじめTSに熱狂するコアな人達と知り合えたのはとてもいいことでした
今振り返るとDenoにコントリビュートを続けられたのもRyanやdeno-jaの方々に励まされたことが大きな要因だったように思えます
少し前までは技術力さえ高ければどこにでもいけると思っていたけど、そういうわけでもないと思えるようになった
技術力だけ高めても楽しくはない。楽しくない人生は価値がない。なのでプログラミングもまた人と人との繋がりのツールなんだなと実感しました
折しもコロナ渦の中でプログラマはその繋がりを支える重要な仕事になったので、よりそう思いました
deno-jaの方々には本当に感謝することばかりです
これから
v1がリリースされたからと言って何も終わってはいないわけですね
実際、stdはv1のリリースを機にバージョン番号が分かれることになりました
現在stdのバージョンはv0.51.0です
これはv1のリリースに膨大なstdの安定性を間に合わせられなかったという時間的都合が大きいです
コアのAPIは一旦これでしばらくは凍結されますが、stdはまだしばらく破壊的変更が続くことになりそうです
つまり開発する上では実際は今までとそんなに変わらないことになると思います。実際使うコードはstdが多いので
stdはコアよりもコントリビュータが多く、PRやイシューの対応にRyanやBartekなどマージ権限を持ってる人たちのレビューが追いついていないという問題もあります
ここからよりコントリビュータが増えた後はどうなっていくのかは気になるところです