Open9
Cloudflare Workers + React 19 , Vue 3 など

概要
- Cloudflare Workers + React + tailwindcss
- フルスタック構成
- フロントは、JS版 React
- 全体的に、生成AIでコード出力
[ 公開 2024/12/19 ]
構成
- Cloudflare Workers
- React 18
- tailwindcss
- hono 4.6.x
- Gemini-2.0-flash-exp
- D1 database
関連
-
hono , serve static files
AI生成済、一部修正コード
workers ベース部分の作成
- hono install
npm create hono@latest my-app
- publicフォルダから、js , css読込設定
- 上記関連の、 serve static files 設定 ( wrangler.toml )
assets = { directory = "public" }
- package.json (hono 4.6.x)
- 最小構成は、tailwindcss以外 ほぼ追加しない
{
"name": "hono_68",
"scripts": {
"dev": "wrangler dev",
"deploy": "wrangler deploy --minify"
},
"dependencies": {
"hono": "^4.6.14"
},
"devDependencies": {
"@cloudflare/workers-types": "^4.20241218.0",
"autoprefixer": "^10.4.20",
"postcss": "^8.4.49",
"tailwindcss": "^3.4.17",
"wrangler": "^3.96.0"
}
}
- CDN読込 React
- src/pages/renderLayout.ts
<script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
<link href="/main.css" rel="stylesheet"/>
....
- home画面 SSR
- src/pages/App.tsx
const htm = `
<div>
<div id="root"></div>
<script type="text/babel" src="/js/home.js" ></script>
</div>
....
- front 実装 , home
- public/js/home.js
<div className="App container mx-auto p-4">
<h1 className="text-4xl">Hello React 123</h1>
<hr className="my-2" />
<p>update:{updatetime}</p>
<p>message: {message}</p>
<hr />
</div>
....
- tailwindcss, watch mode
- 別コンソールで、起動しておく。
- public/main.css 出力し。上記の publicフォルダ設定で、ブラウザ読込可能になる。
npx tailwindcss -i ./src/main.css -o ./public/main.css --watch
dev start
yarn dev
プロンプト、参考
- 参考todo
コード生成して欲しいです。
CRUD アプリ、
バックエンド: Hono.js , D1 database
フロントエンド: React, tailwindCSS 使用したいです。
・バックエンドのみ、生成してほしい。
・TODOの追加機能を、ダイアログで編集したいです。
・TODOの編集機能を、ダイアログで編集したいです。
・TODOの削除機能を、追加したいです。
・TODOの検索機能を、追加したいです。
上記、
フロントエンドのみ生成して欲しい。
Javascriptで、
React , tailwindCSS 使用したいです。
・TODOの追加機能を、ダイアログで編集したいです。
・TODOの編集機能を、ダイアログで編集したいです。
・TODOの削除機能を、追加したいです。
・TODOの検索機能を、追加したいです。
・バリデーション追加したい。react-hook-form未使用にしたい
npmは zod 使用したい。
検証内容は、下記です。
TODOデータ: 未入力は、エラー
見た目
- 編集, workers deploy 後
- gemini 画面ログ、バックエンド
その他
- 生成AIから、CREATE TABLE 出力されるので。実行してtable追加
- 生成AI出力の 動作NG部分、レイアウト修正等 は適切に修正する。
- yarn deploy , デプロイ完了できる。

Cloudflare Workers + React 19
- 前回は、React 18でしたが、19構成を作成する内容になります。
関連
参考のコード
- CDN読込 React 19
- src/pages/reactLayout.ts
- babel読込
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
- react画面 SSR
- src/pages/React19.tsx
- type = text/babel
- data-type = module
<div>
<div id="root"></div>
<script type="text/babel" data-type="module" src="/js/React19.js" ></script>
</div>
....
- front 実装, CDN読込( esm.sh )
- public/js/React19.js
- ESM ( ES Modules )
- useState 等などは、19でも使えそうです。
import React from "https://esm.sh/react@19/?dev"
import ReactDOMClient from "https://esm.sh/react-dom@19/client?dev"
....
<div className="App container mx-auto p-4">
<h1 className="text-4xl">Hello , React19</h1>
<hr className="my-2" />
<p>message: {message}</p>
<hr />
</div
....
ReactDOMClient.createRoot(document.getElementById('root')).render(
<App />
);
- 見た目, workers 画面

Workers + Vue 3
- front : Vue構成のベース部分作成の内容になります。
関連
参考のコード
- react画面 SSR
- src/pages/VueCdn.tsx
<div id="app">{{ message }}</div>
<script type="module" src="/js/VueCdn.js"></script>
....
- CDN読込 Vue
- public/js/VueCdn.js
import { createApp, ref } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
createApp({
setup() {
const message = ref('Hello Vue!')
return {
message
}
}
}).mount('#app');
- 見た目

Workers + Vue 3 + 生成AI、なにか作る。
- 前の、 workers + Vue の続編になります。
- model: Gemini-2.0-flash-exp generate
関連
参考のコード
- react画面 SSR
- src/pages/Todo20.tsx
<div id="app">{{ message }}</div>
<script type="module" src="/js/Todo20.js"></script>
....
- CDN読込 Vue
- public/js/Todo20.js
import { createApp, ref } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
import App from '/js/Todo20/App.js';
createApp(App).mount('#app');
- 生成AI、画面ログ、バックエンド
- AI生成した、フォルダ構成、参考
backend/
├── src/
│ ├── index.js # メインのエントリーポイント
│ ├── db.js # D1データベースとの接続処理
│ ├── routes/
│ │ └── items.js # CRUD APIのエンドポイント
│ ├── utils/
│ │ └── response.js # レスポンスヘルパー
│ └── models/
│ └── item.js # Itemモデル
├── package.json
├── wrangler.toml # Cloudflare Workersの設定ファイル
frontend/
├── public/
│ └── index.html
├── src/
│ ├── components/
│ │ ├── TodoDialog.vue # ダイアログコンポーネント
│ │ ├── TodoItem.vue # TODOアイテムコンポーネント
│ │ └── SearchBar.vue # 検索バーコンポーネント
│ ├── App.vue # メインアプリケーションコンポーネント
│ ├── main.js # エントリーポイント
│ └── api.js # APIクライアント
├── package.json
├── tailwind.config.js
├── postcss.config.js
└── vite.config.js
- 見た目。編集 , workers 画面
Prompt
コード生成して欲しいです。
CRUD アプリ、
バックエンド: Vue.js , D1 database
フロントエンド: React, tailwindCSS 使用したいです。
・バックエンドのみ、生成してほしい。
・CREATE TABLE、作成して欲しい。
- フロント
上記、
フロントエンドのみ生成して欲しい。
Javascriptで、
Vue.js , tailwindCSS 使用したいです。
TypeScriptは、未使用にしたいです。
・TODOの追加機能を、ダイアログで編集したいです。
・TODOの編集機能を、ダイアログで編集したいです。
・TODOの削除機能を、追加したいです。
・TODOの検索機能を、追加したいです。
検証内容は、下記です。
TODOデータ: 未入力は、エラー

CF-Workers + React + Typescript + D1
- 前の、 workers + React + typescript の続編になります。
- フルスタック構成
構成
- worker API
- React
- vite: 6.0
- tailwind CSS
関連
- public フォルダ参照など
- https://developers.cloudflare.com/workers/
- https://developers.cloudflare.com/workers/static-assets/routing/
書いたコード
- dev start
yarn start
react build , 別 windowで 起動。
yarn watch
- wrangler.toml
- public フォルダ読込設定 , Js , CSS
- d1 bindingを、設定すると。db接続できる予定。
assets = { directory = "./public/" }
[[d1_databases]]
binding = "DB"
database_name = ""
database_id = ""
- vite build使います。ファイル監視は、nodemon
- TS トランパイル
- tailwind CSS ビルド
- 出力 JSの起点は、/public/static/entry-client.js
- layout, js 読込
- react/src/pages/renderLayout.ts
<script type="module" src="/static/entry-client.js" ></script>
- SPA , home
- react/src/client/home.tsx
return (
<div className="text-3xl">home.tsx
</div>
);

Workers + Vue + Typescript + Tailwindcss
- 前の、 Workers + Vue + typescript の続編になります。
- フルスタック構成
構成
- worker API
- vue 3
- vite: 6.0
- tailwind CSS
書いたコード
- dev start
yarn start
front build , 別 windowで、起動。
yarn watch
- wrangler.toml
- public フォルダ読込設定 , Js , CSS
- d1 bindingを、設定すると。db接続できる予定。
assets = { directory = "./public/" }
[[d1_databases]]
binding = "DB"
database_name = ""
database_id = ""
- vite build使います。ファイル監視は、nodemon
- TS トランパイル
- tailwind CSS ビルド
- 出力 JSの起点は、/public/static/main.js
- layout, js 読込
- vue/src/pages/renderLayout.ts
<script type="module" src="/static/main.js"></script>
- SPA , home
- vue/src/App.vue
<template>
<div class="text-4xl">hello , Vue
</div>
</template>

Workers + Svelte + Typescript + Tailwindcss + D1
- 前の、 Workers + Svelte + typescript の続編になります。
- フルスタック構成
書いたコード
- dev start
yarn start
front build , 別 windowで、起動。
yarn watch
- wrangler.toml
- public フォルダ読込設定 , Js , CSS
- d1 bindingを、設定すると。db接続できる予定。
assets = { directory = "./public/" }
[[d1_databases]]
binding = "DB"
database_name = ""
database_id = ""
- vite build使います。ファイル監視は、nodemon
- TS トランパイル
- tailwind CSS ビルド
- 出力 JSの起点は、/public/static/main.js
- layout, js 読込
- vue/src/pages/renderLayout.ts
<script type="module" src="/static/main.js"></script>
- SPA , Home.svelte
- svelte/src/client/Home.svelte
<div class="container mx-auto p-4">
<h1 class="text-3xl font-bold mb-4">Home</h1>
</div>

Workers + React 19 + Typescript
- Workers + React 19 + typescript の構成
- フルスタック構成
関連
構成
worker API
React 19
react-dom 19
vite: 6.0
tailwind CSS
- install
npm install --save-exact react@^19.0.0 react-dom@^19.0.0
npm install --save-exact @types/react@^19.0.0 @types/react-dom@^19.0.0
書いたコード
- dev start
yarn start
react build , 別 windowで、起動。
yarn watch
- wrangler.toml
- public フォルダ読込設定 , Js , CSS
- d1 bindingを、設定すると。db接続できる予定。
assets = { directory = "./public/" }
[[d1_databases]]
binding = "DB"
database_name = ""
database_id = ""
- vite build使います。ファイル監視は、nodemon
- TS トランパイル
- tailwind CSS ビルド
- 出力 JSの起点は、/public/static/entry-client.js

Cloudflare Workers + Svelte + tailwindcss Chat(チャット)試作
- Workers + D1 + Svelte + チャット試作的なメモです
- フルスタック構成
- 前の vercel設置していたChatを、Workers + Svelte構成に移植する。
- レイアウトは、生成AIに、検索した類似画面コピーを、プロンプト画面にアップして。自動生成等で実装する
- ユーザー追加画面は、bcryptjsで 暗号化する。
- 生成AI: Gemini-2.0-flash-exp
書いたコード
-
https://github.com/kuc-arc-f/workers21/tree/main/svelte_chat
-
table:
-
svelte_chat/schema.sql
- dev start
yarn start
front build , 別 windowで、起動。
yarn watch
- wrangler.toml
- public フォルダ読込設定 , Js , CSS
- d1 bindingを、設定すると。db接続できる予定。
assets = { directory = "./public/" }
[[d1_databases]]
binding = "DB"
database_name = ""
database_id = ""
見た目
- 投稿一覧
- スレッド(返信) ダイアログ