🚀

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を使用する例

serverless.yml
plugins:
  - serverless-esbuild

custom:
  esbuild:
    minify: true
    sourcemap: true

Serverless Framework v4でesbuildを使用する例

build.esbuildオプションでesbuildの設定を記述できるようになります。

serverless.yml
build:
  esbuild:
    bundle: true
    minify: true

esbuild.config.tsのような設定ファイルの指定もできます。

serverless.yml
build:
  esbuild:
    configFile: esbuild.config.ts
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を環境変数に渡すことで正常に実行できるようになります。

serverless.yml
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