本文へ移動

Fastly Compute ​

Fastly Compute は、お好みの言語で記述したコードを Fastly のグローバルエッジネットワークで実行する、高度なエッジコンピューティングシステムです。Hono は Fastly Compute 上でも動作します。

Fastly CLI を使えば、アプリケーションをローカルで開発し、数個のコマンドで公開できます。CLI はテンプレートの一部としてローカルに自動インストールされます。

1. セットアップ ​

Fastly Compute 向けのスターターテンプレートがあります。 「create-hono」コマンドでプロジェクトを開始します。 この例では fastly テンプレートを選択します。

sh
npm create hono@latest my-app
sh
yarn create hono my-app
sh
pnpm create hono my-app
sh
bun create hono@latest my-app
sh
deno init --npm hono my-app

my-app に移動して依存関係をインストールします。

sh
cd my-app
npm i
sh
cd my-app
yarn
sh
cd my-app
pnpm i
sh
cd my-app
bun i

2. Hello World ​

src/index.ts を編集します。

ts
// src/index.ts
import { Hono } from 'hono'
import { fire } from '@fastly/hono-fastly-compute'

const app = new Hono()

app.get('/', (c) => c.text('Hello Fastly!'))

fire(app)

NOTE

アプリケーションのトップレベルで @fastly/hono-fastly-compute' の fire(または buildFire())を使う場合は、'hono/quick' よりも 'hono' の Hono が適しています。fire によって、アプリケーションの初期化段階でルーターの内部データが構築されるためです。

3. 実行 ​

開発サーバーをローカルで起動し、Web ブラウザーで http://localhost:7676 にアクセスします。

sh
npm run start
sh
yarn start
sh
pnpm run start
sh
bun run start

4. デプロイ ​

アプリケーションをビルドして Fastly アカウントにデプロイするには、次のコマンドを入力します。初回のデプロイでは、アカウントに新しいサービスを作成するよう求められます。

アカウントがない場合は、Fastly アカウントを作成する必要があります。

sh
npm run deploy
sh
yarn deploy
sh
pnpm run deploy
sh
bun run deploy

バインディング ​

Fastly Compute では、KV ストア、設定ストア、シークレットストア、バックエンド、アクセス制御リスト、名前付きログストリーム、環境変数などの Fastly プラットフォームリソースをバインドできます。c.env を通じてアクセスでき、それぞれの SDK の型が付与されます。

これらのバインディングを使うには、@fastly/hono-fastly-compute から fire の代わりに buildFire をインポートします。バインディングを定義して buildFire() に渡し、fire を取得します。続いて、Hono を構築する際に fire.Bindings を使って Env 型を定義します。

ts
// src/index.ts
import { buildFire } from '@fastly/hono-fastly-compute'

const fire = buildFire({
  siteData: 'KVStore:site-data', // I have a KV Store named "site-data"
})

const app = new Hono<{ Bindings: typeof fire.Bindings }>()

app.put('/upload/:key', async (c, next) => {
  // e.g., Access the KV Store
  const key = c.req.param('key')
  await c.env.siteData.put(key, c.req.body)
  return c.text(`Put ${key} successfully!`)
})

fire(app)

MIT ライセンスで公開されています。