mcpField
S
serverpod-upgrading

serverpod-upgrading

github.com/serverpod開発3.3k44 回インストール1 日前に更新
リポジトリ

serverpod-upgrading について

Serverpod のマイナー、パッチ、メジャーアップグレードを案内するスキルです。パッケージ更新、コード生成、マイグレーション、分析とバージョン固有の変更点を扱い、CLI の更新はユーザーに求めます。

主な機能

  1. 01Serverpod パッケージを一括更新
  2. 02更新・生成・マイグレーションのコマンド実行
  3. 03プロジェクト分析と Dockerfile のバージョン確認
  4. 04Serverpod 2.x・3.x の破壊的変更への対応

活用シーン

  1. 01Serverpod のマイナーまたはパッチ版への更新
  2. 02プロジェクトを Serverpod 2.x から 3.0 へ移行
  3. 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 ツールは絶対に更新せず、停止してユーザーに対応を依頼してください。

  1. Serverpod の最新バージョンを確認します(ユーザーが特定のバージョンを指定している場合を除く):https://pub.dev/packages/serverpod
  2. serverpod version を実行して、ツールのバージョンが正しいことを確認します。正しくない場合は、停止して正しいバージョンをインストールするようユーザーに依頼します(最新バージョンの場合は dart install serverpod_cli、特定のバージョンの場合は dart install serverpod_cli 3.x.x)。
  3. 関連するすべてのパッケージの pubspec.yaml(server、client、flutter、shared)で、Serverpod パッケージを更新します。
  4. すべてのパッケージで dart pub upgrade を実行します。
  5. serverpod generate を実行します。
  6. serverpod create-migration を実行します。
  7. プロジェクトのルートで dart analyze を実行し、問題に対処します。
  8. Dockerfile で FROM dart:3.12.2 AS build 以上を使用していることを確認します。
  9. アップグレードが完了したことをユーザーに伝え、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 トークンが渡されます。

非推奨: 従来のストリーミングエンドポイント。ストリーミングメソッドを使用してください。

コメント