koaやめる
良い代替のフレームワークなさそう
@mei23 がまえにkoaやめる話をしてた気がする
前Fastify使おうとしていた https://github.com/mei23/misskey/pull/2285
これとかどうだろう https://github.com/talentlessguy/tinyhttp
tinyhttpにしてみるか
やたら「express互換だよ!express replacementだよ!」ってアピールされているのがちょっと気になる 別にexpressにこだわり無いから…
tinyhttpこの間使ったけどなんかバグ踏んで散々な目にあった https://github.com/tinyhttp/tinyhttp/issues/279 @rinsuki
Fastifyバグっぽいのはあったことないけど、TypeScriptネイティブじゃないからTypeScriptでどう書くの~って悩む所はちょこちょこあったのだわ。 @[email protected]
tinyhttp/tinyhttp#279
そういえばkoa-routerも同ルートで変なとこあった気がした https://github.com/misskey-dev/misskey/issues/6533
tinyhttpはv2で完全なESMに移行したらしい https://github.com/tinyhttp/tinyhttp/releases/tag/%40tinyhttp%2Fapp%402.0.0
なんでHTTPフレームワークでデータベースの話が出てくるんだろう https://github.com/fastify/fastify/issues/3005
fastifyの型が完全じゃないことがあるというのは明記されてた
As the team works on improving framework and type definition synergy, sometimes parts of the API will not be typed or may be typed incorrectly
でもfastifyの方がメジャーではあるんだよな
tinyhttpのサイトって重かったり落ちてたりするからなんだか
express/koa/tinyhttpあたりのexpress系にあるnext()を呼ぶというのがわかりづらくて嫌いなので、その概念がないFastifyの方が好き。
Fastifyでやってみるか
型で困らないことを祈る
fastify なんかバリデーションとかまで入ってて壮大で、そうじゃないんだよな…感あった (いまさら)
それは思った ちょっと機能が多すぎな感じはある
バックエンド全体の話になるけどNest.jsとか導入するのはどうだろうと思ってた んだけど、試した感じ
- 事実上express使うことを余儀なくされる
- Nest.jsがそこら辺(express)を抽象化してくれる訳でもないため、express由来の型エラーに悩まされることも多かった
- REST APIを想定していて、Misskeyには合わなそう
- エラーが握りつぶされることがあり、デバッグに手間取った
- ドキュメントの情報量が多くて学習コストがかなり高い
- これはNest.jsというよりデザインパターンの話だけど、「ノートをお気に入り登録するのはNoteServiceに書くのか?FavoriteServiceに書くのか?」みたいな悩みが発生しがち
だから微妙な感じした 使いこなせれば今の状態より見通し良くなるかもしれないけど…
fastifyに移行するのも結構大変かも
そう?
コード量というよりは対応する機能を探すのが大変そうと思った
参考 https://github.com/mei23/misskey/pull/2285/files
fastifyStatic => koa_send みたいなの pointOfView: view(pug) あたり 基本headerは先にsetする next()で流れ落ちみたいな概念はないので、/users/:id みたいな APとWebでAccpetで出し分ける場所は1つのroute内で分岐になる?
app.proxy が https://www.fastify.io/docs/latest/Server/#trustproxy か
参考 https://github.com/mei23/misskey/pull/2285/files
any にキャストしている箇所が所々あるけど、やっぱり型エラーとか出るのかしら
app.proxy が https://www.fastify.io/docs/latest/Server/#trustproxy か
たぶんそうだわ。たしかkoaだとtrue相当しかなかったけど、本当はどのIPアドレスを信頼するか指定できるべきだわね。
any にキャストしている箇所が所々あるけど、やっぱり型エラーとか出るのかしら
あからさまに型がおかしいところはほとんどなかった気がするのだわ。
(req as any).file
わすれた
(server as any).getDefaultJsonParser
たぶんdtsの漏れ、マイナーなところだからかも。
request.body as any
bodyのdefaultはunknownで、ちゃんとそれを確定させる手段はあるはず。
再チャレンジするか
graphql対応も一緒にやろうぜ(などと
Fastify v4がそろそろ出そうだからそれまで待つか https://github.com/fastify/fastify/issues/3482