🔁 2026年リライト版 この記事は2019年1月に公開した「無償で利用可能なNetlify Functions(AWS Lambda)で学ぶサーバレスプログラミングの基本」を、2026年時点の Netlify Functions 仕様(Node.js 20/22 LTS、Netlify CLI、Edge Functions の追加)に合わせて全面書き換えしたものです。
Netlify Functions は、サイトのデプロイに付随してサーバレス関数を一緒に動かせるサービスです。バックエンドは AWS Lambda(通常の Functions)と Deno / Vercel Edge Runtime 相当のエッジワーカー(Edge Functions)の2種類があります。
2026年時点の主な変化点
- Node.js ランタイム: 2019年当時は Node.js 8.x のみだったが、現在は Node.js 20 / 22 LTS が標準。Go ランタイムは 2022年に廃止され、Rust や Python も基本は Docker カスタムランタイムで対応する形
- ローカル開発の中心:
netlify-lambdaではなくnetlify dev(Netlify CLI) に統一 - Edge Functions の登場: Lambda とは別に、CDN エッジで動作する超低レイテンシ実行基盤が追加(2022年 GA)
- 無償プラン枠: 2026年時点で 125,000 リクエスト/月 + 100時間/月 の枠は維持(変動する可能性あり、最新は 公式料金 参照)
- Background Functions: 最大10分間実行可能な非同期関数(Pro プラン以上)
セットアップ(2026年版)
前提: Node.js 20+ と npm、Netlify アカウント、GitHub(または GitLab / Bitbucket)アカウント。
1. Netlify CLI をインストール
❯ npm install -g netlify-cli
❯ netlify --version
netlify-cli/18.x.x
2. プロジェクトを初期化
既存の Hugo / Next.js / Astro / 任意の静的サイトプロジェクトでも、新規でも OK。
❯ netlify init
対話形式で「新規サイトを作成」または「既存サイトにリンク」を選びます。完了すると netlify.toml と .netlify/ が生成されます。
3. 関数用ディレクトリの作成
.
├── netlify.toml
└── netlify/
└── functions/
└── hello.js
netlify.toml:
[functions]
directory = "netlify/functions"
node_bundler = "esbuild"
node_bundler = "esbuild" を指定しておくと、TypeScript やモダン ESM がそのまま動きます(2022年以降の推奨)。
4. 最初の関数を書く
netlify/functions/hello.js:
export const handler = async (event, context) => {
return {
statusCode: 200,
body: JSON.stringify({
message: "Hello from Netlify Functions!",
path: event.path,
method: event.httpMethod,
}),
};
};
ローカルで動作確認
❯ netlify dev
http://localhost:8888/.netlify/functions/hello にアクセスすると JSON レスポンスが返ります。Netlify CLI は 静的サイト + 関数 + リダイレクト を全部まとめてローカルで再現してくれるので、2019年当時のように netlify-lambda と別の静的サイトサーバの両方を立てる必要はもうありません。
デプロイ
Git ブランチを push すると、Netlify が自動的にビルド・デプロイします(GitHub 等と連携していれば)。手動でも可能:
❯ netlify deploy --prod
Edge Functions — 2022年以降の新定番
低レイテンシが必要な用途(A/Bテスト、リクエスト書き換え、認証チェックなど)は Edge Functions を使います。Functions と違い、CDN エッジで Deno ベースのランタイムが動作します。
netlify/edge-functions/geolocation.js:
export default async (request, context) => {
const country = context.geo?.country?.name ?? "Unknown";
return new Response(`Hello from ${country}!`, {
headers: { "content-type": "text/plain" },
});
};
export const config = {
path: "/hello",
};
デプロイすると https://<site>/hello が Edge Function 経由で応答します。
課金
2026年4月時点の Free プラン:
- Netlify Functions: 125,000 リクエスト/月 + 100時間の実行時間/月 無料
- Edge Functions: 1,000,000 リクエスト/月 無料
- Background Functions: Pro プラン以上で利用可能
個人ブログの認証付きお問い合わせフォームや、軽量な API エンドポイントであれば、無料枠で十分運用できます。