Serverless Frameworkをv3からv4へ移行する方法とその理由
自己紹介
こんにちは!
TypeScriptが大好きなフリーランスの塩野です。
企業や官公庁/自治体のエネルギー調達・脱炭素化を支援するサービスを展開するエナーバンクという会社で業務委託に携わらせていただいています。
GitHubではsaltyshiomixというIDで生息しています。
Serverless Frameworkとは
Serverless Frameworkとは、サーバーレスアプリケーションをより簡単に開発、デプロイするためのNode.js製のツールです。
サーバーやクラスターについて検討することなくコードを実行できるため、アプリケーション開発に集中することができます。
Serverless Frameworkは、オープンソースCLI(serverless
コマンド)とWebダッシュボードで構成されており、これらを組み合わせることで完全なサーバーレスアプリケーションのライフサイクル管理が可能になります。
AWS Lambdaを使用すれば、実質的にどのようなタイプのアプリケーションやバックエンドサービスでも管理を必要とせずにコードを実行できます。
Serverless Framework v3とv4の違い
公式: Serverless Framework V4 Generally Available
ライセンス変更
Serverless Framework v3までは無償で利用できましたが、Serverless Framework v4からは年間売上が200万ドルを超える組織は有償サブスクリプションの購入が必要になります。
(逆に、年間売上が200万ドルを超えないのであれば、これまで通りServerless Frameworkを無償で使用できることを意味します。Dockerと同様の仕組みです。)
serverless
コマンドに毎回認証がかかる
有償サブスクリプションを購入していなくても、serverless
コマンド実行時に毎回認証がかかり、未認証の場合はserverless login
する旨が出てきます。
このユーザー情報はWeb版のダッシュボードのアカウントであり、作成していない場合は会員登録する必要があります。
または、すでに管理者がダッシュボードを閲覧できるのであれば、ダッシュボードから発行したライセンスキーを使用することでserverless login
できるようになります。
今後はAWS Lambdaのみをサポート
これまではAWSだけでなくGoogle CloudやAzure等をサポートしていましたが、Serverless Framework v4からは基本的にAWSに1本化する方向で開発が進んでいくようです。
TypeScriptのネイティブサポート
Serverless Framework v3で使用していたserverless-esbuild
が使用不可となる代わりに、ビルトインでTypeScriptがサポートされます。
現在はesbuildのみですが、今後は他のバンドラー(WebpackやRollup等)もサポートされる可能性があります。
今後は徐々にServerless Framework v4の時代になる(なってしまう)理由
Serverless Framework v3ではNode.js v22 (LTS)が動作しない
Serverless Framework v4からは有料になるため、なるべくv3のまま運用したいケースが多々あると思います。
しかしながら、声を大にして言いたい驚愕の事実がありました。
2025年3月時点では、Serverless Framework v3ではNode.js v22が動きません。
AWS Lambda自体は2024年11月にNode.js v22 LTSのサポートを表明しています。
Node.js v20 LTSのEOL(サポート終了)が2026年4月30日なので、Serverless v4 + Node.js v22の構成にしなければならない状況になるのも時間の問題です。
そのため、株式会社エナーバンクでもServerless Framework v4の導入を徐々に進めています。
プラグインまわりのエコシステムが徐々にServerless Framework v4に吸収されている
コア機能の開発がv4主体になるだけでなく、これまでのv3で培われてきたエコシステムがv4の登場によって徐々に淘汰されていくと想定されます。
例として、TypeScriptのバンドラーとしてesbuildを選択するパターンを考えてみます。
serverless-esbuild
はv3では外部プラグインでしたが、v4からはコア機能にesbuildが内蔵されており、serverless-esbuild
| serverless-webpack
| serverless-plugin-typescript
が含まれているとエラーになります。(破壊的変更)
Serverless Framework v3でesbuildを使用する例
plugins:
- serverless-esbuild
custom:
esbuild:
minify: true
sourcemap: true
Serverless Framework v4でesbuildを使用する例
build.esbuild
オプションでesbuildの設定を記述できるようになります。
build:
esbuild:
bundle: true
minify: true
esbuild.config.ts
のような設定ファイルの指定もできます。
build:
esbuild:
configFile: esbuild.config.ts
export default () => {
return {
minify: true,
sourcemap: true,
}
}
Serverless Framework v4をGitHub Actionsで動かす方法
serverless login
せずにGitHub Actionsで動かす
SERVERLESS_ACCESS_KEY
という名前のアクセスキーが必要になります。
Serverless Frameworkのダッシュボードでアクセスキーを生成して、それを使用します。
機密情報なのでGitHub Actions secretsに登録して参照する形が良いでしょう。
serverless.yml
でGitHub Actions secretsを環境変数に渡すことで正常に実行できるようになります。
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Deploy App
run: serverless deploy
env:
SERVERLESS_ACCESS_KEY: ${{ secrets.SERVERLESS_ACCESS_KEY }}
ローカルでは動くのにGitHub Actionsで動かない場合
NODE_OPTIONS='--openssl-legacy-provider'
が必要な場合があります。
Node.js v16からv18に上がる際に、OpenSSLのメジャーバージョンがv1からv3にアップグレードされたため、ライブラリによっては--openssl-legacy-provider
オプションを有効化して古いOpenSSLに対応しなければならない場合があります。
まとめ
- Serverless Framework v4からはライセンスが変わり、年間売上が200万ドルを超える組織は有償サブスクリプションの購入が必要になります
- Serverless Framework v3ではNode.js v22 (LTS)に対応していないため、Serverless Framework v4にアップグレードする必要があります
- コア機能開発だけでなく、プラグインまわりのエコシステムが徐々にServerless Framework v4に吸収されてきており、破壊的変更が余儀なくされる場合があります
最後に
株式会社エナーバンクでは、Full-Stack TypeScriptやサーバーレスアーキテクチャーを活用することで最小限の開発リソースで複数のプロダクトを同時開発しています。
もし事業や技術スタックに興味があるエンジニアの方がいましたら、下記よりぜひ採用ページおよび、エンジニアの求人ページをご覧ください!
良き開発ライフを!
Discussion