Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Viteはサーバーとクライアントを判定していない
Search
赤神青空
PRO
August 31, 2026
Video
Programming
39
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Viteはサーバーとクライアントを判定していない
赤神青空
PRO
August 31, 2026
Video
More Decks by 赤神青空
See All by 赤神青空
【AWS AIF対策】AIシステムを守る
akagami
PRO
0
13
【AIニュース】ChatGPT Space とは何か
akagami
PRO
0
20
【AWS AIF対策】透明性と説明可能性
akagami
PRO
0
16
【AIニュース】OpenAI の「dots」とは何か
akagami
PRO
0
22
【AWS AIF対策】責任あるAI
akagami
PRO
0
24
【AWS AIF対策】基盤モデルの評価
akagami
PRO
0
27
【AWS AIF対策】モデルの学習とファインチューニング
akagami
PRO
0
17
【AWS AIF対策】プロンプトエンジニアリング
akagami
PRO
0
17
【AWS AIF対策】RAGとベクトルデータベース
akagami
PRO
0
17
Other Decks in Programming
See All in Programming
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
470
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Rails World 2026, Austin, Texas
marcoroth
0
190
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
440
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
620
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
250
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.1k
ジョジョの世界をXRで再現する
mofurune
0
100
AWS CDKのカスタムリソースでContinuum(旧Security Agent)を実装した話 | Implementing Continuum (formerly Security Agent) via AWS CDK Custom Resource
akihisaikeda
2
130
Verilogで学ぶCPU自作入門.pdf
uyuki234
8
4k
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
0
390
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
230
Agents on Rails - Rails at Scale 2026
irinanazarova
0
330
Featured
See All Featured
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
600
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
How Software Deployment tools have changed in the past 20 years
geshan
2
35k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Chasing Engaging Ingredients in Design
codingconduct
0
340
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Design in an AI World
tapps
1
350
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
Site-Speed That Sticks
csswizardry
13
1.5k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
390
Transcript
2026年8月 Viteはサーバーとクライアントを 判定していない ビルドがやっているのは、入口からimportを辿ることだけ 赤神 青空
▪作っていたものと、ビルドで出てくるもの まず前提をそろえる TanStack Start で作ったアプリを Cloudflare Workers に載せる、という学習をしていました。 ビルドすると、成果物が2つ出てくる dist/client/
— ブラウザに送られる dist/server/ — Cloudflareで動く DBに触るコードも、画面のコードも、同じ src/ の中にある この2つが、どこで分かれているのかを知りたかった 今ココ 誤解 2/14
▪サーバー専用のはずのものを、クライアントから触る わざと壊してみた 何が境界を守っているのかを知りたくて、コンポーネントから直接DBを呼びました。 typescript // src/routes/index.tsx — ブラウザで動くコンポーネント useEffect(() =>
{ db.select().from(items).all().then(setData) }, []) 今ココ 誤解 3/14
▪3つのうち、どれか どこで止まると思いますか 型で怒られるのか。ビルドで止まるのか。 それとも、ブラウザで落ちるのか。 1. 型 エディタに赤線が出る。 2. ビルド ビルドが通らない。
3. 実行時 ブラウザで落ちる。 私は1番だと思っていました。 今ココ 誤解 4/14
01 仕組み 実際に出たログ 今ココ 仕組み 5/14
▪最終行を見てください 出たのはこれ bash [plugin:vite:import-analysis] Failed to resolve import "cloudflare:workers" from
"src/db/index.ts" 23:04:39 [vite] (client) Pre-transform error どちらのグラフで壊れたか、ログに書いてある 今ココ 仕組み 6/14
▪拍子抜けするほど素朴です 答え Viteは、判定していない。 入口からimportを辿っているだけ。 止めたもの モジュール解決。client側に cloudflare:workers は 無い。 止めなかったもの
型。TypeScriptは「サーバー専用」を知らない。 入口の数だけグラフができる。この構成では client と ssr の2つ。 今ココ 仕組み 7/14
▪同じソースに、違う入口から入る ビルドは2回走る 走るバンドラは同じです。Vite 6以降は環境を増やせますが、既定はこの2つになります。 bash building client environment → dist/client/
→ ブラウザへ building ssr environment → dist/server/ → Cloudflareへ 今ココ 仕組み 8/14
▪どちらに属するかは、繋がっているかどうかで決まる 辿った結果、グラフが2本できる クライアントのグラフ index.tsx → db/index.ts → cloudflare:workers 解決できずに停止 サーバーのグラフ
server-entry → db/index.ts → cloudflare:workers Workers上にあるので解決できる 同じ db/index.ts でも、どちらのグラフに入るかで結末が変わります。 今ココ 仕組み 9/14
02 規約 繋がりを見えるようにする仕掛け 今ココ 規約 10/14
▪ファイルを分けずに、関数の単位で切る createServerFn は分割線のマーカー 関数を包むと、そのハンドラの中身は ssr のグラフに置かれます。 typescript const listItems =
createServerFn().handler(async () => { return db.select().from(items).all() }) 今ココ 規約 11/14
▪切り方が違うだけ 規約はどれも同じ問題を解いている TanStack createServerFn Start SvelteKit +page.server.ts React .server モジュール
Router v7 今ココ 規約 関数の単位で分割線を引く 置き場所でサーバー専用を宣言する ファイル名でサーバー専用を宣言する 12/14
▪私はこの2つを混同していました 守るのはビルド、繋ぐのは型 「境界を型で切る」と思っていたのですが、型は境界を切っていませんでした。 境界を守っているもの = ビルドの分離 client と ssr で別々に辿られる
型は関与しない。だから赤線は出なかった 境界を越えて繋がっているもの = 型 listItems() の戻り値は Item[] のまま届く レスポンスの型を手書きしなくていい 今ココ 規約 13/14
▪今日話したこと まとめ 01 仕組み 判定ではなく、入口からimportを辿った結果が境界になっている。 02 確かめ方 どちらのグラフで壊れたかは、ログや成果物にそのまま出る。 03 規約
createServerFn も .server も、その繋がりを見せるための発明。 この原則が分かれば "use client" も「入口を増やす指示」と読める 今ココ まとめ 14/14