Hono を Deno で使う場合の注意点

先日のEcho-Echo開発の中で、@hono/openapi を使うのがどうにもうまくいかないと書いた。

これが解決したので、注意点としてのメモ。

参考

経緯

今回、Echo-Echoの開発での @hono/openapi の動作でうまくいかなくて・・・と書いたら、yusuke Wadaさんからリプライが付いていた。

ありがたいお話で、結局自分ではどうにもならなくて、Issueを出させてもらった。

Issue でのやり取りで、わかったことをまとめたい。

Hono を Deno で使うとき気をつけること

気を付けるのは、deno.land/x/hono と、npm:@hono/zod-openapi を混ぜない。

自分の実装で動かなかったポイントの1つは混ぜてしまったことだった。

deno.json抜粋(ダメだったパターン)
1
2
3
4
5
6
{
"imports": {
"$hono/": "https://deno.land/x/hono@v4.0.10/",
"@hono/zod-openapi": "npm:@hono/zod-openapi"
}
}
deno.json抜粋(OKパターン)
1
2
3
4
5
6
{
"imports": {
"hono/client": "npm:hono/client",
"@hono/zod-openapi": "npm:@hono/zod-openapi"
}
}

この使い方をすると問題ありだった。
Deno で、npm: が使えるので、こちらで寄せてしまうのが良いだろう。
deno.land/x には @hono/zod-openapi も公開されてもいないし。(サードパーティ系は数多く公開されているけれども)

もう1つの問題

deno.json に nodeModulesDir という設定項目がある。
これを入れると、型の参照が崩れた。

deno.json
1
2
3
{
"nodeModulesDir": true
}

これが入ると、.openapi メソッドが無い型と認識されてしまいエラーになる。

1
2
3
4
import { z } from 'npm:@hono/zod-openapi'

const mySchema = z.string().openapi('hello')
^^^^^^^^

nodeModulesDirを消すか、falseに設定すると問題が解決した。

この事象は既に hono には関係ないもので、DenoCLI(もしくは Deno language server)の問題だろうという判断がついていて、Issueを立てた。

Is there a problem with nodeModulesDir in deno.json

既に、問題の原因の目算が付いたようで近々に修正されるでしょう。


hono、平日昼間にIssueが処理されて、とてもIssueを出した側としてありがたいものでした。
活動が活発なのがよくわかるものでした。

では。