Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Accelerating App Dev with Cloudflare Workers

chimame
November 24, 2023

Accelerating App Dev with Cloudflare Workers

Cloudflare Workers Meetup by NOT A HOTEL

chimame

November 24, 2023
Tweet

More Decks by chimame

Other Decks in Programming

Transcript

  1. アプリケーションの作成速度 Cloudflare Workersで動作させることができる対応プログラム言語 • TypeScript • JavaScript • WebAssembly対応言語(Rust, C,

    Golang etc) JavaScriptに(トランスパイル)出来るなら言語は問わない。 npm packageという膨大なライブラリやフレームワークの恩恵を受ける
  2. アプリケーションの作成速度 Cloudflare Workersに対応しているフレームワーク(他にもあり) • Hono • GraphQL Yoga • Next.js(一部)

    • Remix • Qwick • Astro Cloudflare Workers単体で動作しWebサーバ として使用することができるフレームワーク
  3. アプリケーションの作成速度 Cloudflare Workersに対応しているフレームワーク(他にもあり) • Hono • GraphQL Yoga • Next.js(一部)

    • Remix • Qwick • Astro Cloudflare Workers単体では動作しない (ものがある)が、Cloudflare Workers とCloudflare Pagesを組み合わせSSRな どが可能
  4. アプリケーションの作成速度 Cloudflare Workersに対応しているフレームワーク(他にもあり) • Hono • GraphQL Yoga • Next.js(一部)

    • Remix • Qwick • Astro これらのモダンなフレームワークを使用すること が出来るでCloudflare Workersとそれ以外の環境 とで開発効率の差異は無い (むしろモダンな開発環境になる) 宗教上の理由でTypeScriptやJavaScriptが扱えない方はごめんなさい…(WASMで頑張って)
  5. みなさんはどうやって環境を用意してますか? 環境の構築速度 EKS? ECS? Lambda? EC2? G KS? Cloud Run?

    App Engine? Cloud Function? AKS? Container App? Azure Virtual M achine? その環境って初期構築もそうです が、そもそもデプロイってどれくら いかかりますか? ち な み に …
  6. 環境の構築速度 • コンテナ以前はサーバをセットアッ プ ◦ その後にプログラムを入れ替えて、Web サーバのみを再起動 • コンテナはサーバの抽象化レベルUP ◦

    コンテナにプログラムを内包してコンテナ を切り替える • Cloudflare Workersのランタイムは 固定(既にセットアップ済) ◦ プログラムを入れ替えて実行
  7. 活用例(In my case) • GraphQL Server • Webアプリケーション • (Node.jsサーバ)バッチ処理

    今日はここ GraphQLは12月のCloudflare Workers Talk #2で (and moreな内容だけど)
  8. 活用例(In my case) ※管理画面 Cloudflare Workers Durable Objects Authentication Cloud

    Messaging Crashlytics etc 認証 画像データ (R2) Socket通信 GraphQL PUSH Node.js処理サーバ GraphQL Server その他サービス 現在 この辺の話(他サービスでは管理画面に留まらない)
  9. 活用例(In my case) RemixはCloudflare上の2つのランタイムで動作をサポートしています • Cloudflare Workers • Cloudflare Pages

    + Cloudflare Workers ほぼCloudflare Workers上だけで完結します。なので Cloudflare Workersの機能がフルで使用できるという メリットがあります。 ただし、静的ファイルの配信がCloudflare KVから配 信することになります。
  10. 活用例(In my case) RemixはCloudflare上の2つのランタイムで動作をサポートしています • Cloudflare Workers • Cloudflare Pages

    + Cloudflare Workers Cloudflare Pagesは静的サイトやSPAで使用できる。 Cloudflare Workersとも組み合わすことでサーバサイ ドの処理が行える。つまりSSRが出来る。 ただし、Cloudflare Workersの全機能をサポートして いるわけではない。 初手はこちらを選択でよい
  11. ということで 活用例(In my case) node_compat = true 設定ファイル(wrangler.toml)に書いて import {

    Client } from "pg"; export interface Env { DB: string; } export default { async fetch( request: Request, env: Env, ctx: ExecutionContext ): Promise<Response> { const client = new Client(env.DB); await client.connect(); const result = await client.query({ text: "SELECT * from customers", }); const resp = Response.json(result.rows); ctx.waitUntil(client.end()); return resp; }, }; DBの接続処理を書いて
  12. ということで 活用例(In my case) node_compat = true 設定ファイル(wrangler.toml)に書いて import {

    Client } from "pg"; export interface Env { DB: string; } export default { async fetch( request: Request, env: Env, ctx: ExecutionContext ): Promise<Response> { const client = new Client(env.DB); await client.connect(); const result = await client.query({ text: "SELECT * from customers", }); const resp = Response.json(result.rows); ctx.waitUntil(client.end()); return resp; }, }; DBの接続処理を書いて デプロイすると $ wrangler pages deploy
  13. ということで 活用例(In my case) node_compat = true 設定ファイル(wrangler.toml)に書いて import {

    Client } from "pg"; export interface Env { DB: string; } export default { async fetch( request: Request, env: Env, ctx: ExecutionContext ): Promise<Response> { const client = new Client(env.DB); await client.connect(); const result = await client.query({ text: "SELECT * from customers", }); const resp = Response.json(result.rows); ctx.waitUntil(client.end()); return resp; }, }; DBの接続処理を書いて デプロイすると $ wrangler pages deploy 動かない😇
  14. Thanks! • name: chimame / rito • job: Webエンジニア •

    field: Cloudflare, GCP, AWS, Ruby, Node.js, TypeScript, React, Next.js, Remix, Docker etc • company: Goens株式会社( https://about.goen-s.com ) • twitter: @chimame_rt • GitHub: chimame