🔥

HonoでAWS Lambdaの関数を作成しつつローカル環境でも動作できるようにする

2024/09/18に公開

Honoは、AWS Lambdaの関数を作成するためのスターターテンプレートを提供しています。このテンプレートを使うことで、AWS Lambdaの関数を作成するために必要な設定を簡単に行うことができます。

ですが、ローカル環境で動作するようにするための設定は含まれていません。そこで、HonoのNode.js Adapterを使って、Node.jsを使ったサーバをローカル環境で使えるように設定します。

手順

まず、Honoのスターターテンプレートを使ってプロジェクトを作成します。

$ npm create hono@latest

Which template do you want to use? でAWS Lambdaのテンプレートを選択します。

? Which template do you want to use? aws-lambda

これで、AWS Lambdaの関数を実行するためのプロジェクトが作成されました。次に、Node.jsを使って動作できるようにします。

まず、HonoのNode.js Adapterとtsxをインストールします。

$ npm install --save @hono/node-server
$ npm install --save-dev tsx

次に、Node.jsで実行するためのコードを src/index.local.ts に作成します。AWS Lambdaでは index.ts が実行されるため、共通の処理はできるだけ別のファイルに書くとよいでしょう。

src/index.local.ts の内容は以下のようになります。

import { serve } from "@hono/node-server";
import { Hono } from "hono";

const app = new Hono();

app.get("/", (c) => {
  return c.text("Hello, Hono!");
});

const port = 5555;
console.log(`Server is running on port ${port}`);

serve({
  fetch: app.fetch,
  port,
});

最後に、package.jsonscriptsdev を追加します。

{
  "scripts": {
+    "dev": "tsx watch src/index.local.ts"
  }
}

npm run dev を実行すると、ローカル環境でサーバーが起動します。

$ npm run dev
$ curl http://localhost:5555
Hello, Hono!

これで、ローカル環境でNode.jsのWebサーバを使いつつ、Lambdaにデプロイする環境が整いました。

Discussion