Zenn
Open6

Hono実装 Tips集🌟

たさぎょん🐱たさぎょん🐱

HonoでのCORS蚭定

HonoでのCORSCross-Origin Resource Sharingの蚭定方法に぀いお説明したす。

手順

  1. CORSミドルりェアのむンポヌト

    たず、hono/corsからCORSミドルりェアをむンポヌトしたす。

    import { cors } from 'hono/cors'
    
  2. アプリケヌションぞのミドルりェアの適甚

    Honoアプリケヌションで、app.useを䜿甚しおCORSミドルりェアを適甚したす。

    app.use('*', cors())
    

    䞊蚘の䟋では、すべおのルヌトに察しおCORS蚭定を適甚しおいたす。

  3. オプションの蚭定必芁に応じお

    特定のオリゞンやメ゜ッドを蚱可したい堎合は、オプションを指定できたす。

    app.use('*', cors({
      origin: 'https://example.com',
      allowMethods: ['GET', 'POST', 'PUT', 'DELETE'],
      allowHeaders: ['Content-Type', 'Authorization'],
      maxAge: 600,
    }))
    
    • origin: 蚱可するオリゞン'*'で党おのオリゞンを蚱可
    • allowMethods: 蚱可するHTTPメ゜ッドのリスト
    • allowHeaders: 蚱可するHTTPヘッダヌのリスト
    • maxAge: プリフラむトリク゚ストの結果をキャッシュする時間秒

フルコヌド䟋

import { Hono } from 'hono'
import { cors } from 'hono/cors'

const app = new Hono()

// CORSミドルりェアの適甚
app.use('*', cors({
  origin: '*',
  allowMethods: ['GET', 'POST', 'PUT', 'DELETE'],
  allowHeaders: ['Content-Type', 'Authorization'],
  maxAge: 600,
}))

// ルヌトハンドラヌ
app.get('/', (c) => c.text('Hello World!'))

export default app

補足

  • デフォルト蚭定: cors()をオプションなしで䜿甚するず、デフォルトですべおのオリゞンずメ゜ッドが蚱可されたす。
  • セキュリティ: 本番環境では、必芁なオリゞンずメ゜ッドのみを蚱可するように蚭定するこずを掚奚したす。

たずめ

HonoでCORSを蚭定するには、hono/corsからミドルりェアをむンポヌトし、app.useを䜿甚しおアプリケヌションに適甚したす。必芁に応じお、オプションで詳现な蚭定を行うこずができたす。

たさぎょん🐱たさぎょん🐱

Honoでの環境倉数に぀いお

Q Honoで wranglerを䜿甚する堎合、dotenvは䜿う必芁がないですか

GPT Answer

HonoをCloudflare Workers䞊で䜿甚する際、環境倉数の管理にはwrangler.tomlファむルを利甚したす。このファむルの[vars]セクションで環境倉数を定矩し、アプリケヌション内でc.envを通じおアクセスできたす。

䞀方、dotenvは䞻にNode.js環境で.envファむルから環境倉数を読み蟌むためのラむブラリです。
Cloudflare Workersの開発環境では、dotenvを䜿甚する代わりに、wrangler.tomlや.dev.varsファむルを甚いお環境倉数を蚭定したす。

したがっお、HonoをCloudflare Workers䞊で䜿甚する堎合、dotenvを䜿甚する必芁はありたせん。
開発環境でも本番環境でも、wrangler.tomlや.dev.varsを通じお環境倉数を管理するこずが掚奚されたす。

wrangler.toml ✖ Honoでの環境倉数の取り扱いに぀いお

wrangler.toml ファむルで定矩した環境倉数を Hono アプリケヌション内で䜿甚するには、以䞋の手順を行いたす。

  1. wrangler.toml で環境倉数を定矩する:
    wrangler.toml ファむルの [vars] セクションに環境倉数を蚭定したす。
   [vars]
   MY_VARIABLE = "your_value"
  1. Hono アプリケヌションで環境倉数を䜿甚する:
    Hono のコンテキストオブゞェクト c の env プロパティを通じお、環境倉数にアクセスできたす。

    import { Hono } from 'hono';
    
    const app = new Hono();
    
    app.get('/', (c) => {
     const myVariable = c.env.MY_VARIABLE;
     return c.text(`The value of MY_VARIABLE is: ${myVariable}`);
    });
    
    export default app;
    

このようにしお、c.env.MY_VARIABLE を通じお wrangler.toml で定矩した環境倉数 MY_VARIABLE の倀を取埗できたす。

詳现に぀いおは、Hono の公匏ドキュメントの「Bindings」セクションをご参照ください。

https://hono.dev/docs/getting-started/cloudflare-workers#bindings

たさぎょん🐱たさぎょん🐱

wrangler.tomlファむル の dev ず prod 䜿い分けに぀いお

Q wrangler.tomlファむル の dev ず prod 甚のファむルの䜿い分けに぀いお Best プラクティスを教えおください。

GPT Answer

wrangler.toml ファむルで開発dev環境ず本番prod環境を適切に䜿い分けるためのベストプラクティスは、環境ごずの蚭定を同䞀の wrangler.toml ファむル内で管理するこずです。これにより、蚭定の䞀元管理が可胜ずなり、環境間の差異を明確に定矩できたす。

具䜓的な手順:

  1. 環境ごずのセクションを定矩する:
    wrangler.toml 内で [env.{environment_name}] セクションを䜿甚しお、各環境固有の蚭定を蚘述したす。

    name = "my-worker"
    main = "src/index.js"
    compatibility_date = "2024-11-03"
    
    [env.dev]
    name = "my-worker-dev"
    route = { pattern = "dev.example.com/*", zone_name = "example.com" }
    vars = { API_URL = "https://api.dev.example.com" }
    
    [env.prod]
    name = "my-worker-prod"
    route = { pattern = "example.com/*", zone_name = "example.com" }
    vars = { API_URL = "https://api.example.com" }
    

    このように、[env.dev] ず [env.prod] セクションを定矩し、各環境に応じた蚭定を蚘述したす。

  2. 環境固有の倉数を蚭定する:
    各環境セクション内で vars を䜿甚しお、環境固有の倉数を定矩したす。

    [env.dev.vars]
    API_KEY = "dev-api-key"
    
    [env.prod.vars]
    API_KEY = "prod-api-key"
    

    これにより、開発環境ず本番環境で異なる API キヌなどの倉数を蚭定できたす。

  3. デプロむ時に環境を指定する:
    wrangler コマンドの --env オプションを䜿甚しお、デプロむ先の環境を指定したす。

    # 開発環境ぞのデプロむ
    wrangler deploy --env dev
    
    # 本番環境ぞのデプロむ
    wrangler deploy --env prod
    

    このようにしお、指定した環境の蚭定が適甚されたす。

泚意点:

  • 環境ごずの蚭定を [env.{environment_name}] セクションで定矩するこずで、蚭定の重耇を避け、管理が容易になりたす。
  • 機密情報䟋: API キヌは、wrangler secret コマンドを䜿甚しお安党に管理するこずが掚奚されたす。

この方法により、開発環境ず本番環境の蚭定を䞀元的に管理し、環境間の切り替えをスムヌズに行うこずができたす。

https://zenn.dev/kameoncloud/articles/fd06abaa115455

たさぎょん🐱たさぎょん🐱

Hono の env() で環境倉数を䜿甚する

このenv()関数は、Cloudflare Workers のバむンディングを超えお、さたざたなランタむム間で環境倉数を取埗するのに圹立ちたす。
取埗できる倀は、env(c)ランタむムごずに異なる堎合がありたす。

import { env } from 'hono/adapter'

app.get('/env', (c) => {
  // NAME is process.env.NAME on Node.js or Bun
  // NAME is the value written in `wrangler.toml` on Cloudflare
  const { NAME } = env<{ NAME: string }>(c)
  return c.text(NAME)
})

https://hono.dev/docs/helpers/adapter#env

ログむンするずコメントできたす