ディレクトリ構成
├── Dockerfile
├── docker-compose.yml
├── index.js
├── node_modules
├── package.json
└── yarn.lock
Dockerfile
nodeのバージョンを20にしているのは以下のガイドから。LTSがv20なのと、v22はプレビュー版のみ、v18は非推奨が結構近いので、v20にしている。
FROM node:20.11.0-bullseye-slim
RUN apt update && apt install
WORKDIR /app
COPY package.json yarn.lock /app/
RUN yarn
COPY . /app/
CMD ["yarn", "start"]
package.json
import
を使いたいので、"type": "module"
を指定。
{
"main": "index.js",
"type": "module",
"license": "ISC",
"scripts": {
"start": "npx functions-framework --target=myHttpFunction"
},
"dependencies": {
"@google-cloud/functions-framework": "^3.0.0"
}
}
index.js
公式はCommonJSを使ってインポートしているが、ESModulesを使ってインポートする。正直好みの問題。Node.jsはCommonJSで書かれていること多いよね。
import ff from '@google-cloud/functions-framework';
ff.http('myHttpFunction', (req, res) => {
res.send('OK');
});
起動
プロジェクトrootで実施する。
docker compose up -d
curl http://localhost:8080/ // -> OK
これで完成。
おわりに
この記事をベースとして、オレオレCloud Functions環境を作っていこうと思います。
TypeScirptを使ったCloud Functionsの環境構築方法を後日紹介しようと思います。
後日談
ほぼここに書いていたけど、node v10 の時なので情報が古い。