なんでservestを作ってるんですか?
でも僕は独自にservestというDenoのhttpサーバーライブラリを作っていますkeroxp.icon2019/10/10 んでんで
コントリビューターならさっさとそれを直せやと思う人も多いと思います
たしかにね、そうですねkeroxp.icon
標準ライブラリのhttpモジュールが不安定なままじゃ、ランタイムとしていつまでたっても流行らないと思う
でもあえて個人のプロジェクトで別のhttpサーバーの実装を作っているのには理由があります
まず僕はプログラムを書いたり設計したりするのは得意だけど、人を説得したり説明したりするのは苦手です
Denoは海外のOSSなので、当然イシューや議論は英語で行われていて、英語ができない人は仕様の議論にも入れないし文句もいえません
なので必然的に欧米の人たちが中心となって仕様を決めてどんどん先にいくわけです
僕は幸運なことに日本人の中では英語が出来る方だし、物怖じせずに意見を言えるタイプの人間ですがそれでも海外のOSSにコントリビュートするのはめちゃくちゃ疲れる
自分の意見を英語で表明しないといけないし、文句も英語で言わないといけないし…
Denoは幸か不幸かNode.jsほどコミュニティが成熟していないので開発方針についてはゆるい感じがある
思いつきみたいな仕様がヌルっと入ったりするし、「あのイシュー結局どうなったの?」→放置みたいなことも多い
長短どちらもあるしきっとNode.jsの初期もこうだったんだろうなと思うのですが。
Denoはコアの機能が少なくてその代わり標準ライブラリが大きなランタイムです
コアの機能はもうほとんどできてきていて、あとは標準ライブラリとキラーアプリの登場を待つばかりなのですがいかんせん標準ライブラリが安定しない
これはコードベースが比較的大きく、なのに管理者が曖昧で、結局誰がリードして方針を決めるの?というのがよくわからんのです
Ryanは必ずPRをみてくれますが、Ryan自身がstdにコントリビュートすることはほとんどない
そうなるとstdって誰が管理するべきなのか? 誰の方針に従えばいいのか? 正直わからない
もともとdeno_stdはRyanの構想になかったらしく、V8以外なにもないJSランタイムに熱狂した世界中のEarly Adaptorがこぞって便利機能を持ち寄った結果1年も立たずにGoの標準ライブラリに肉薄するレベルのコードベースになってしまった
これはもちろんいいことだと思います
今年(2019年)のはじめには本当にDenolandには何もなくて、でもTSで直接サーバーが書けるという熱狂に飲まれた僕たち開発者が少しでもDenoを実用的にできるように頑張った結果だしね
僕もstdのmultipart、ws、http、strings、bytesなどを開発しましたし
ただこういうコントリビュートの仕方って結構楽で、「ないものを作りました」は簡単に通ることが多いんですよ
だってないものがあるようになるんだから文句言う人も少ないしね
ただ「あるものを変えよう/変えました」というコントリビュートは相当難しいです
いつまで根に持ってんだという…
Denoに限らずHTTPモジュールは現代のプログラミング言語の最重要なモジュールなので、バグなく速く誰にも使いやすい設計になっていないといけない
それを誰かが決めないといけない
で、誰が決めるの?
という話になってきたときに色々と面倒なことが多くて僕は名乗り出たくないという気持ちなのです
Ryanが「これこれこうする、誰かやってくれるか?」と言ってくれたらむしろ楽なのだけど
僕は「僕が一番ガンダムをうまく使えるんだ!」タイプの人間ですが、多くの人が、それも外国の人がいるコミュニティで多方面に説得するのは面倒すぎて腰が上がらない
ただ何もせずにDenoのhttpモジュールが不安定なままであることも嫌なので、(httpに関しては)stdから離れて一人で好き勝手に設計と実装を楽しもうという気分でいるのです
プログラミングはいつでも楽しいけど、人を説得したり説明するのはいつでもつまらないよね。本当に
servestはnpmに対するyarnのような立ち位置になったらいいなぁと思ってます yarnは「npmがコンサバで激遅でバージョンも固定できないしセキュリティもガバガバなことにブチ切れた連中がカッとなって作った」と思ってる人も多いかもしれませんが(いや実際そうなんだけど)、こういう一文がREADMEに載っています
Yarn wouldn't exist if it wasn't for excellent prior art. Yarn has been inspired by the following projects:
Bundler, Cargo, npm
Yarnは優れた先行事例なしには生まれえませんでした。Yarnはこれらのプロジェクトに影響を受けています。
Yarnの登場以降、npmはpackage-lock.jsonやnpm audit:fix、バージョンのリンク効率の向上などの機能がYarnから逆輸入されてより使いやすくなりました
標準であることは常に安定、コンサバであることが求められそれはそれで損な役回りだなと僕は思うので、僕はその相補的な役割を担えたらいいなと思っています
Servestの標語が A progressive http server for Denoであるのも、標準でないゆえに進歩的でありえるという意味です
ちなみにServestという名前は Server + Harvestから来ていて、このプロジェクトがどのような形であれ実りあるものになればいいなと思ってつけました。アイコンがお米なのもそういう理由からです。
お米食べろ!!