Denoモノレポは茨の道?Sveltekit、Hono、Drizzle構成でハマった話
詳細情報
日時 | 2025年01月30日 22:00 - 22:30 |
---|---|
テーマ | Denoでnpm用フレームワークを含めたモノレポを作るのは渋い |
発表者 | neverClear |
集会名 | 個人開発集会 |
発表資料 | リンク |
Denoを使ってモノレポを構築しようとしたら、予想以上に苦戦した話です。
Sveltekit、Hono、Drizzleという構成で、理想の環境を追い求めた結果、数々の問題に直面しました。
最終的にBunに乗り換えることになった経緯を、赤裸々に語ります。
Denoでモノレポ?
理想と現実のギャップ
個人開発集会で、創好リナさんが「Denoでnpm用フレームワークを含めたモノレポを作るのは渋い」というテーマで発表されました。
Deno信者だった創好さんが、なぜDenoでのモノレポ構築を諦め、Bunに移行することになったのか?
その過程を詳しく見ていきましょう。
構成
創好さんが今回構築しようとしたのは、日本版Redditのような掲示板サービスです。
その構成は以下の通り。
-
フロントエンド: Sveltekit (Svelte5)
-
バックエンド: Hono
-
ORM: Drizzle
-
Host: Cloudflare Pages
-
DB: Turso
-
Auth: Logto
フロントエンドには、シンプルに書けて圧倒的なリアクティブさが魅力のSveltekit(Svelte5)を採用。
バックエンドは、シンプル軽量な日本製WebフレームワークHono。
ORMには、シンプルで軽量、依存なしのDrizzleを選んでいます。
ホスティングはCloudflare Pages、DBはTurso、認証はLogtoと、無料枠が充実しているサービスを選んでいるのもポイントです。
Denoへの期待
DenoはNode.jsの作り直し的なプロダクトで、Deno 2.0からはpackage.jsonにも対応し、npmプロジェクトも管理できるようになりました。
Sveltekitもとりあえず動くし、FormatやLintもSvelteに対応しています。
バックエンドが得意なDenoと、HonoやDrizzleの相性も良い。
Deno 2.0にはWorkspace機能もある。
「これはもうDenoで構成するしかない!」そう思ったのも無理はありません。
沼にハマる
しかし、現実はそう甘くありませんでした。
ひたすら色々動かないという状況に陥ります。
-
Sveltekitの型が
.svelte-kit
に生成されるのでtypescriptの設定が必要 -
Playwrightが動かない!
-
vitestでtesting-libraryが動かない
-
Denoでcloudflare workersが設定できない!
-
frontendからbackendのコードを呼び出せない!
問題1: Sveltekitで型が壊れる
Sveltekitは.svelte-kit
に型を生成したり、import用のエイリアスを使います。
tsconfigの設定をdeno.jsonに移せば大体OKなのですが、現状DenoではCompileOptionsをルートの設定でのみ書けるため、モノレポの中の一つのパッケージで設定ができません。
問題2: テストが動かない!
ドキュメントには記載がないものの、設定でなんとかなったようです。
問題3: DenoでCloudflare Workersの設定ができない
当初はバックエンドを分けてデプロイする予定でしたが、DenoでCloudflareを使うならdenoflareを使えと書かれているものの、denoflareがDeno2.0に未対応。
wranglerで直設定しようとしても、wranglerもDeno未対応という状況でした。
最終的にSveltekitのバックエンドに書くことに落ち着きました。
問題4: frontのコードからbackのコードをimportできない
Denoのworkspace経由のimportはpackage.json管理なのでできません。
直接パス指定しても依存が解決できません。
-
esbuildで依存もまとめてしまえばいいじゃない!→esbuildだと型生成はできない
-
tscで型を追加で生成→tscの型生成は依存をまとめてくれない
-
HonoRPCしたいのに型が死ぬ
そこで、denoで書いたコードをnpmモジュールとしてコンパイルすることを考えます。
dntの導入と新たな問題
dntというツールを使うことで依存関係は解決しましたが、denoはローカルのnpmモジュールをinstallできません。
直接importを書くと依存の型情報が解決できなくなります。
frontにも同じ依存をインストールすればできますが、毎回そんな事やってられません。
ビルドの手順が増えてActionsもつらい。
流石にキレそうになったそうです。
Bunへの移行
そこでBunに変更したところ、なんと全ての問題が無くなりました。
置き換えてから1時間程度でCI、自動ビルド、自動デプロイの設定が完了したそうです。
まとめ
創好さんの発表から、Denoは大人しく専用FWかバックエンドのみの場合に使うのが良いという教訓が得られました。
Denoでnpm混じりのモノレポはまだ時期尚早のようです。
世界が早くDenoに追いつくことを願うばかりです。
ちなみに、BunにしたあとのFormat,Lintはbiomeにしたところ爆速で設定が楽でおすすめとのことです。
個人開発集会の他の発表もチェック!
個人開発集会の開催情報・参加方法

個人開発集会
開催日: 2025年01月30日
開催時間: 21:00 - 22:00
開催曜日: 木曜日開催周期: 隔週(グループA)
個人開発にまつわる話でワイワイする集会です。 個人開発をやっている方も初めてみたい方も大歓迎! 企画・技術・マーケティング・保守・運用など 技術的なことに限らない幅広い分野を想定しています。 個人開発に興味がある方はぜひ遊びに来てください!