misskey icon indicating copy to clipboard operation
misskey copied to clipboard

koaやめる

Open syuilo opened this issue 4 years ago • 39 comments

Summary

TypeScriptネイティブではないので、型定義上の問題が起きやすく不便

syuilo avatar May 27 '21 08:05 syuilo

良い代替のフレームワークなさそう

syuilo avatar May 27 '21 08:05 syuilo

@mei23 がまえにkoaやめる話をしてた気がする

tamaina avatar May 27 '21 08:05 tamaina

前Fastify使おうとしていた https://github.com/mei23/misskey/pull/2285

mei23 avatar May 27 '21 09:05 mei23

これとかどうだろう https://github.com/talentlessguy/tinyhttp

rinsuki avatar Jun 02 '21 17:06 rinsuki

tinyhttpにしてみるか

syuilo avatar Jun 08 '21 05:06 syuilo

やたら「express互換だよ!express replacementだよ!」ってアピールされているのがちょっと気になる 別にexpressにこだわり無いから…

syuilo avatar Aug 15 '21 07:08 syuilo

tinyhttpこの間使ったけどなんかバグ踏んで散々な目にあった https://github.com/tinyhttp/tinyhttp/issues/279 @rinsuki

Fastifyバグっぽいのはあったことないけど、TypeScriptネイティブじゃないからTypeScriptでどう書くの~って悩む所はちょこちょこあったのだわ。 @[email protected]

syuilo avatar Aug 17 '21 12:08 syuilo

tinyhttp/tinyhttp#279

そういえばkoa-routerも同ルートで変なとこあった気がした https://github.com/misskey-dev/misskey/issues/6533

mei23 avatar Aug 17 '21 12:08 mei23

tinyhttpはv2で完全なESMに移行したらしい https://github.com/tinyhttp/tinyhttp/releases/tag/%40tinyhttp%2Fapp%402.0.0

sousuke0422 avatar Sep 16 '21 11:09 sousuke0422

なんでHTTPフレームワークでデータベースの話が出てくるんだろう https://github.com/fastify/fastify/issues/3005

syuilo avatar Sep 18 '21 05:09 syuilo

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

syuilo avatar Sep 18 '21 05:09 syuilo

でもfastifyの方がメジャーではあるんだよな

syuilo avatar Sep 18 '21 05:09 syuilo

tinyhttpのサイトって重かったり落ちてたりするからなんだか

mei23 avatar Sep 18 '21 06:09 mei23

express/koa/tinyhttpあたりのexpress系にあるnext()を呼ぶというのがわかりづらくて嫌いなので、その概念がないFastifyの方が好き。

mei23 avatar Sep 18 '21 07:09 mei23

Fastifyでやってみるか

syuilo avatar Sep 18 '21 07:09 syuilo

型で困らないことを祈る

syuilo avatar Sep 18 '21 07:09 syuilo

fastify なんかバリデーションとかまで入ってて壮大で、そうじゃないんだよな…感あった (いまさら)

rinsuki avatar Sep 18 '21 08:09 rinsuki

それは思った ちょっと機能が多すぎな感じはある

syuilo avatar Sep 18 '21 08:09 syuilo

バックエンド全体の話になるけどNest.jsとか導入するのはどうだろうと思ってた んだけど、試した感じ

  • 事実上express使うことを余儀なくされる
  • Nest.jsがそこら辺(express)を抽象化してくれる訳でもないため、express由来の型エラーに悩まされることも多かった
  • REST APIを想定していて、Misskeyには合わなそう
  • エラーが握りつぶされることがあり、デバッグに手間取った
  • ドキュメントの情報量が多くて学習コストがかなり高い
  • これはNest.jsというよりデザインパターンの話だけど、「ノートをお気に入り登録するのはNoteServiceに書くのか?FavoriteServiceに書くのか?」みたいな悩みが発生しがち

だから微妙な感じした 使いこなせれば今の状態より見通し良くなるかもしれないけど…

syuilo avatar Oct 16 '21 18:10 syuilo

fastifyに移行するのも結構大変かも

syuilo avatar Oct 29 '21 06:10 syuilo

そう?

mei23 avatar Oct 29 '21 10:10 mei23

コード量というよりは対応する機能を探すのが大変そうと思った

syuilo avatar Oct 29 '21 10:10 syuilo

参考 https://github.com/mei23/misskey/pull/2285/files

fastifyStatic => koa_send みたいなの pointOfView: view(pug) あたり 基本headerは先にsetする next()で流れ落ちみたいな概念はないので、/users/:id みたいな APとWebでAccpetで出し分ける場所は1つのroute内で分岐になる?

mei23 avatar Oct 29 '21 11:10 mei23

app.proxy が https://www.fastify.io/docs/latest/Server/#trustproxy か

syuilo avatar Nov 05 '21 09:11 syuilo

参考 https://github.com/mei23/misskey/pull/2285/files

any にキャストしている箇所が所々あるけど、やっぱり型エラーとか出るのかしら

syuilo avatar Nov 05 '21 09:11 syuilo

app.proxy が https://www.fastify.io/docs/latest/Server/#trustproxy か

たぶんそうだわ。たしかkoaだとtrue相当しかなかったけど、本当はどのIPアドレスを信頼するか指定できるべきだわね。

mei23 avatar Nov 05 '21 12:11 mei23

any にキャストしている箇所が所々あるけど、やっぱり型エラーとか出るのかしら

あからさまに型がおかしいところはほとんどなかった気がするのだわ。

(req as any).file

わすれた

(server as any).getDefaultJsonParser

たぶんdtsの漏れ、マイナーなところだからかも。

request.body as any

bodyのdefaultはunknownで、ちゃんとそれを確定させる手段はあるはず。

mei23 avatar Nov 05 '21 12:11 mei23

再チャレンジするか

syuilo avatar Feb 03 '22 16:02 syuilo

graphql対応も一緒にやろうぜ(などと

tamaina avatar Feb 04 '22 10:02 tamaina

Fastify v4がそろそろ出そうだからそれまで待つか https://github.com/fastify/fastify/issues/3482

syuilo avatar Feb 26 '22 02:02 syuilo