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にしたところ爆速で設定が楽でおすすめとのことです。

スライド資料(PDF)

個人開発集会の他の発表もチェック!

初心者でもできる!AITuber開発の道 - VRChat個人開発集会

Bun×AI SDK×Cloudflareで構築するカスタム音声アシスタント - らてさんが明かす最新技術スタック

VRChatワールド制作:ユーザー課題解決で生まれる新たな価値

【実践解説】ChatGPTとCursorで作るTwitterブロック拡張機能の開発手順 - 4〜5時間でリリースした話

VRChatのポスター管理をブラウザから!「SyncFrame」でイベント運営がもっと楽になる!

AIソフトウェアエンジニア「Devin」をのりちゃんが実際に使ってみた体験談

個人開発集会の開催情報・参加方法

個人開発集会のポスター

個人開発集会

開催日: 2025年01月30日

開催時間: 21:00 - 22:00

開催曜日: 木曜日

開催周期: 隔週(グループA)

個人開発にまつわる話でワイワイする集会です。 個人開発をやっている方も初めてみたい方も大歓迎! 企画・技術・マーケティング・保守・運用など 技術的なことに限らない幅広い分野を想定しています。 個人開発に興味がある方はぜひ遊びに来てください!

個人開発にまつわる話でワイワイする集会です。 個人開発をやっている方も初めてみたい方も大歓迎! 企画・技術・マーケティング・保守・運用など 技術的なことに限らない幅広い分野を想定しています。 個人開発に興味がある方はぜひ遊びに来てください!