Open9

Cloudflare Workers + React 19 , Vue 3 など

knaka Tech-Blogknaka Tech-Blog

概要

  • 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

関連


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 , デプロイ完了できる。
knaka Tech-Blogknaka Tech-Blog

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 画面


knaka Tech-Blogknaka Tech-Blog

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');


  • 見た目


knaka Tech-Blogknaka Tech-Blog

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データ: 未入力は、エラー

knaka Tech-Blogknaka Tech-Blog

CF-Workers + React + Typescript + D1

  • 前の、 workers + React + typescript の続編になります。
  • フルスタック構成

構成

  • worker API
  • React
  • vite: 6.0
  • tailwind CSS

関連


書いたコード


  • 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>
  );
knaka Tech-Blogknaka Tech-Blog

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>
knaka Tech-Blogknaka Tech-Blog

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>
knaka Tech-Blogknaka Tech-Blog

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
knaka Tech-Blogknaka Tech-Blog

Cloudflare Workers + Svelte + tailwindcss Chat(チャット)試作

  • Workers + D1 + Svelte + チャット試作的なメモです
  • フルスタック構成
  • 前の vercel設置していたChatを、Workers + Svelte構成に移植する。
  • レイアウトは、生成AIに、検索した類似画面コピーを、プロンプト画面にアップして。自動生成等で実装する
  • ユーザー追加画面は、bcryptjsで 暗号化する。
  • 生成AI: Gemini-2.0-flash-exp

書いたコード


  • 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 = ""

見た目

  • 投稿一覧

  • スレッド(返信) ダイアログ