Closed6
Koa調査メモ
Koa
-
https://github.com/koajs/koa
- ExpressライクなNode.js Webフレームワーク
-
https://github.com/okunokentaro/koa-poc
- ここで掘り進めていく
調査モチベーション
- Expressは使い慣れているけど、そろそろ2021年においてコールバックベースのインタフェースがつらい
- 思考停止でExpressを使い続けても時代に取り残されているのではないか?
- KoaはExpress作者TJ Holowaychukが関わっているためExpressの後継と例えられることがある
- Moment.jsに対するLuxonみたいな構図
- 下記理由によりExpress利用者としては検討の価値がありそう
- Expressからの移行先としてはもっとも親和性が高そう
- Expressの
next()
が同期関数なのが一番Expressの中でつらいところ - 副作用に依存した処理を書かざるを得ない
- Expressの
- Promise, async/awaitベースなインタフェースを採用している
- Expressからの移行先としてはもっとも親和性が高そう
koa 2.13.1
- 今回調査するのは2.13.1
npm i -SE koa
npm i -DE @types/koa
-
main.ts
- とりあえずExpressとまったく一緒の書き方ができる。
Routing
npm i -SE @koa/router
npm i -DE @types/koa-router
- Expressのように標準でできるわけではない
-
@koa/router
middlewareが必要 - middlewareベースな思想のkoaとしてはこのデザインは納得
-
型定義がおかしい
-
@koa/router
でimportせねばならないのに、なぜか型定義の名前空間はkoa-router
- コンパイルを通すために
from 'koa-router'
にするとランタイムで死ぬ -
from '@koa/router'
にするとコンパイルで死ぬ
- コンパイルを通すために
-
https://github.com/DefinitelyTyped/DefinitelyTyped/blob/75594db8775411eeb2b16f98d1e2f6247d3cdae6/types/koa-router/index.d.ts#L1
- 最新の
.d.ts
がkoa-router 7系、今の最新は10系
- 最新の
どうしたもんか。型定義ファイルのメンテを考えるとちょっと警戒するなこれは。
- import pathの不安定さや型定義の更新のなさを調査してみると、koaのrouterには2系統あることがわかった
- 業務用途なのでTypeScript型定義の更新2年遅れかつCHANGELOGゼロという状況はExpressの安定感からは程遠い
- Expressで問題と感じている部分をkoaにして改善するのではなく、Expressの範囲内で工夫したほうが安定すると判断しkoaは不採用に決定
Expressの調査をする。
このスクラップは2021/08/21にクローズされました