serverpod-upgrading について
Serverpod のマイナー、パッチ、メジャーアップグレードを案内するスキルです。パッケージ更新、コード生成、マイグレーション、分析とバージョン固有の変更点を扱い、CLI の更新はユーザーに求めます。
主な機能
- 01Serverpod パッケージを一括更新
- 02更新・生成・マイグレーションのコマンド実行
- 03プロジェクト分析と Dockerfile のバージョン確認
- 04Serverpod 2.x・3.x の破壊的変更への対応
活用シーン
- 01Serverpod のマイナーまたはパッチ版への更新
- 02プロジェクトを Serverpod 2.x から 3.0 へ移行
- 03プロジェクトを Serverpod 3.x から 4.0 へ移行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ serverpod/ serverpod --skill serverpod-upgradingインストール後、Claude Code で/serverpod-upgradingを入力して読み込まれたか確認します。
詳細
Serverpod のマイナー/パッチアップグレード
このバージョンの Serverpod の要件は Dart 3.12.2 以降、Flutter 3.44.4 以降です。インストールするバージョンのリリースノートを確認してください。
すべてのパッケージで同じ Serverpod バージョンを固定してください。アップグレードには CLI を使用してください。アップグレード後に serverpod start でサーバーを起動するようユーザーに依頼してください。CLI ツールは絶対に更新せず、停止してユーザーに対応を依頼してください。
- Serverpod の最新バージョンを確認します(ユーザーが特定のバージョンを指定している場合を除く):https://pub.dev/packages/serverpod
serverpod versionを実行して、ツールのバージョンが正しいことを確認します。正しくない場合は、停止して正しいバージョンをインストールするようユーザーに依頼します(最新バージョンの場合はdart install serverpod_cli、特定のバージョンの場合はdart install serverpod_cli 3.x.x)。- 関連するすべてのパッケージの pubspec.yaml(server、client、flutter、shared)で、Serverpod パッケージを更新します。
- すべてのパッケージで
dart pub upgradeを実行します。 serverpod generateを実行します。serverpod create-migrationを実行します。- プロジェクトのルートで
dart analyzeを実行し、問題に対処します。 - Dockerfile で
FROM dart:3.12.2 AS build以上を使用していることを確認します。 - アップグレードが完了したことをユーザーに伝え、
serverpod startでサーバーを起動するよう案内します。
メジャーアップグレード:Serverpod 3.x から 4.0 へ
通常のアップグレード手順に従った後、以下の破壊的変更に対処してください。
ストリーミング: レガシーのストリーミングセッションと非推奨のストリーミング API は削除されました。エンドポイントではストリーミングメソッド(Stream<T> のパラメーターと戻り値の型)を使用する必要があります。Serverpod Streams を参照してください。
Future 呼び出し: pod.registerFutureCall(...)、FutureCall.invoke、pod.futureCallWithDelay(...)、pod.futureCallAtTime(...) は削除されました。FutureCall クラスにメソッドを定義し、生成された pod.futureCalls API からスケジュールしてください。Serverpod Scheduling を参照してください。
サーバーイベント: postMessage は、デフォルトでグローバル配信になりました(Redis が無効な場合はローカル配信にフォールバックします)。メッセージをサーバーインスタンスの外部に送信しない場合は、scope: MessageScope.local を指定してください。
ORM: 非推奨の orderDescending パラメーターは削除されました。orderBy: (t) => t.column.desc() または orderByList を使用してください。
エンドポイント: ignoreEndpoint アノテーションは削除されました。@doNotGenerate を使用してください。
Web サーバー: 非推奨のウィジェットクラスとレガシーの静的ディレクトリークラスは削除されました。WebWidget、TemplateWidget、ListWidget、JsonWidget、RedirectWidget、StaticRoute.directory(...) を使用してください。WidgetRoute.build は Future<WebWidget?> を返すようになりました。null を返すと 404 が応答されます。
認証: クライアントの authenticationKeyManager パラメーターは削除されました。代わりに authSessionManager(Flutter)または authKeyProvider を使用してください。ネイティブの Google Sign-In Web 実装は OAuth2 に置き換えられ、無効なメールアドレスに関する例外は削除されました。flutter_secure_storage は 10.0.0 以降である必要があります。Android で 9.x から直接 11.x にアップグレードすると、ユーザーはサインアウトされます。まず 10.x を経由してください。11.x では compileSdk 37 も必要です。
サーバー: SerializationManagerServer は DatabaseSerializationManager に置き換えられました。生成されるプロジェクトでは src/generated/serverpod.dart をインポートし、Serverpod(args) でサーバーを作成するようになりました。Serverpod(args, Protocol(), Endpoints()) 形式も引き続き使用できますが、よりシンプルな新しい形式を推奨します。
メジャーアップグレード:Serverpod 2.x から 3.0 へ
通常のアップグレード手順に従った後、以下の破壊的変更に対処してください。
破壊的変更
Web サーバー(Relic):
handleCall:HttpRequest→Request、Future<bool>→FutureOr<Result。レスポンスに書き込む代わりにResponse.ok(...)を返します。request.remoteIpAddress→request.remoteInfo、request.headers.value('name')→request.headers['name']- Widget の名称変更:
AbstractWidget→WebWidget、Widget→TemplateWidget、WidgetList→ListWidget、WidgetJson→JsonWidget、WidgetRedirect→RedirectWidget RouteStaticDirectory(...)→cacheControlFactoryを指定したStaticRoute.directory(Directory(...))
Session.request: Session の request プロパティは任意です(HTTP セッション以外では null)。
Enum のシリアライズ: デフォルトが byName になりました。以前の動作を維持するには、YAML に serialized: byIndex を追加してください。
Models: SerializableEntity → SerializableModel。YAML:parent=table → relation(parent=table)、database → scope=serverOnly、api → !persist。
認証: session.authenticated は同期処理になりました。AuthenticationInfo.authId は null 非許容になり、userIdentifier は String です。クライアント:authenticationKeyManager → authKeyProvider。カスタムハンドラーには、ラップ解除された Bearer トークンが渡されます。
非推奨: 従来のストリーミングエンドポイント。ストリーミングメソッドを使用してください。