Denoでnpm用フレームワークを含めたモノレポを作るのは渋い

7.4K Views

January 30, 25

スライド概要

個人開発集会
2025-01-30
https://vrc-ta-hub.com/community/19/

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

Denoでnpm用フレームワーク を含めたモノレポを作るのは 渋い 個人開発集会 2025-01-30 Lina Tsukusu

2.

About Me 創好リナ (Lina Tsukusu) Github: neverclear86 VTuber系フリーランスエンジニア Web系がメイン

3.

いつもはなんか作ったとか 試して良かったものの紹介とかが多い

4.

今回はしくじり先生

5.

まずは今回作っている サービスを紹介

6.

日本版Reddit みたいな掲示板を作りたい

7.

という話は今回どうでもよくて

8.

Denoの話なので 今回の構成を紹介

9.

アプリ構成 フロント: Sveltekit (Svelte5) バック: Hono ORM: Drizzle

10.

インフラ構成 Host: Cloudflare Pages DB: Turos Auth: Logto

11.

せっかくなので簡単に紹介

12.

Sveltekit Svelte5

13.

めっちゃシンプルに書ける フロントエンド

14.

仮想DOM無しに 圧倒的リアクティブ

15.

色々悩んだけど Svelteのベストプラクティスを 固めたかったため採用

16.

Hono

17.

シンプル軽量な 日本製Webフレームワーク

18.

もはやTSバックエンド開発では メインストリームになってる

19.

Drizzle

20.

シンプルで軽量で依存なしのORM

21.

SQLライクにもリレーショナルにも クエリーを書ける

22.

今回はSveltekitをSSRにして サーバーサイドはHonoで書く

23.

Cloudflare Pages (Workers)

24.

ウェブアプリのホスティング

25.

SSRでもWorkerで ホスティングされる

26.

GitHubのコミットで 自動ビルド&デプロイ

27.

1日10万アクセスまで無料枠 (なぜ?)

28.

Turso

29.

SQLite互換のサーバレスDB

30.

無料枠が9GBある(なぜ?)

31.

Logto

32.

Auth0互換のオープンソース認証

33.

無料枠で50,000MAU(なぜ?)

34.

なぜかドキュメントが日本語対応

35.

もうすぐ日本リージョン公開らし い

36.

ここまでは良いですよね

37.

Deno信者の私はDenoで構築

38.

Deno

39.

Nodeの作り直し的なプロダクト

40.

Deno2.0でpackage.json対応 npmプロジェクトを管理できる

41.

Sveltekitもとりあえず動く!

42.

DenoのFormatやLintも Svelteに対応

43.

ええやん ️

44.

Denoはそもそも バックエンドとか得意

45.

HonoとかDrizzleも相性は良い!

46.

Deno2.0では Workspace機能もある!

47.

これはもうDenoで 構成するしかないだろ

48.

とりあえずこんな感じに

49.

動かない!!!

50.

ひたすら色々動かない

51.

Sveltekitの型が.svelte-kitに生成されるので typescriptの設定が必要 Playwrightが動かない! vitestでtesting-libraryが動かない Denoでcloudflare workersが設定できない! frontendからbackendのコードを呼び出せない!

52.

問題1: Sveltekitで型が壊れる

53.

Sveltekitは .svelte-kit に 型を生成したり、 import用のエイリアスを使う

54.

tsconfigの設定をdeno.jsonに 移せば大体OK

55.

現状DenoではCompileOptions をルートの設定でのみ書ける

56.

モノレポの中の一つの パッケージで設定とかできない

57.

問題2: テストが動かない!

58.

ドキュメントには記載がないが 設定でなんとかなった

59.

問題3: DenoでCloudflare Workersの設定ができない

60.

当初はバックエンドを分けて デプロイする予定だった

61.

DenoでCloudflareを使うなら denoflareを使えと書かれてる

62.

denoflareが Deno2.0に未対応

63.

じゃあ wrangler で直設定しよう

64.

wranglerもDeno未対応

65.

今回はSveltekitのバックエンド に書こう

66.

問題4: frontのコードから backのコードを importできない

67.

Denoのworkspace経由のimportは package.json管理なのでできない

68.

直接パス指定しても依存が解決できない

69.

esbuildで依存もまとめて しまえばいいじゃない!

70.

esbuildだと型生成はできない

71.

tscで型を追加で生成

72.

tscの型生成は依存をまとめてくれ ない

73.

HonoRPCしたいのに型が死ぬ

74.

じゃあdenoで書いたコードを npmモジュールとして コンパイルしよう

75.

dnt というツールがあった

76.

これで依存関係も解決!

77.

denoはローカルの npmモジュールを installできない

78.

じゃあ直接import書いちゃえ

79.

依存の型情報が解決できなくなる

80.

frontにも同じ依存をインストールすれば できるが、毎回そんな事やってられない

81.

ビルドの手順が増えて Actionsもつらい

82.

流石にキレそうなので Bunに変更

83.

なんと全ての問題が無くなる

84.

置き換えてから1時間程度で CI, 自動ビルド, 自動デプロイ の設定が完了

85.

Denoは大人しく専用FWか バックエンドのみの場合 に使いましょう

86.

Denoでnpm混じりのモノレポは 激渋です!

87.

世界が早くDenoに 追いつくことを願う

88.

ちなみに

89.

BunにしたあとのFormat,Lintは biomeにしたけど爆速で 設定が楽なのでおすすめ

90.

以上