7.4K Views
January 30, 25
スライド概要
個人開発集会
2025-01-30
https://vrc-ta-hub.com/community/19/
Denoでnpm用フレームワーク を含めたモノレポを作るのは 渋い 個人開発集会 2025-01-30 Lina Tsukusu
About Me 創好リナ (Lina Tsukusu) Github: neverclear86 VTuber系フリーランスエンジニア Web系がメイン
いつもはなんか作ったとか 試して良かったものの紹介とかが多い
今回はしくじり先生
まずは今回作っている サービスを紹介
日本版Reddit みたいな掲示板を作りたい
という話は今回どうでもよくて
Denoの話なので 今回の構成を紹介
アプリ構成 フロント: Sveltekit (Svelte5) バック: Hono ORM: Drizzle
インフラ構成 Host: Cloudflare Pages DB: Turos Auth: Logto
せっかくなので簡単に紹介
Sveltekit Svelte5
めっちゃシンプルに書ける フロントエンド
仮想DOM無しに 圧倒的リアクティブ
色々悩んだけど Svelteのベストプラクティスを 固めたかったため採用
Hono
シンプル軽量な 日本製Webフレームワーク
もはやTSバックエンド開発では メインストリームになってる
Drizzle
シンプルで軽量で依存なしのORM
SQLライクにもリレーショナルにも クエリーを書ける
今回はSveltekitをSSRにして サーバーサイドはHonoで書く
Cloudflare Pages (Workers)
ウェブアプリのホスティング
SSRでもWorkerで ホスティングされる
GitHubのコミットで 自動ビルド&デプロイ
1日10万アクセスまで無料枠 (なぜ?)
Turso
SQLite互換のサーバレスDB
無料枠が9GBある(なぜ?)
Logto
Auth0互換のオープンソース認証
無料枠で50,000MAU(なぜ?)
なぜかドキュメントが日本語対応
もうすぐ日本リージョン公開らし い
ここまでは良いですよね
Deno信者の私はDenoで構築
Deno
Nodeの作り直し的なプロダクト
Deno2.0でpackage.json対応 npmプロジェクトを管理できる
Sveltekitもとりあえず動く!
DenoのFormatやLintも Svelteに対応
ええやん ️
Denoはそもそも バックエンドとか得意
HonoとかDrizzleも相性は良い!
Deno2.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 というツールがあった
これで依存関係も解決!
denoはローカルの npmモジュールを installできない
じゃあ直接import書いちゃえ
依存の型情報が解決できなくなる
frontにも同じ依存をインストールすれば できるが、毎回そんな事やってられない
ビルドの手順が増えて Actionsもつらい
流石にキレそうなので Bunに変更
なんと全ての問題が無くなる
置き換えてから1時間程度で CI, 自動ビルド, 自動デプロイ の設定が完了
Denoは大人しく専用FWか バックエンドのみの場合 に使いましょう
Denoでnpm混じりのモノレポは 激渋です!
世界が早くDenoに 追いつくことを願う
ちなみに
BunにしたあとのFormat,Lintは biomeにしたけど爆速で 設定が楽なのでおすすめ
以上