mcpField
S
serverpod-sessions

serverpod-sessions

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

serverpod-sessions について

Serverpodのセッションの有効期間、種類、安全な手動管理方法を説明するスキルです。クリーンアップやエラーログ、リクエスト終了後のセッション利用を避ける方法も扱います。

主な機能

  1. 01セッションの種類と有効期間
  2. 02セッションの自動ライフサイクル管理
  3. 03withSessionによる手動セッション管理
  4. 04クリーンアップコールバック
  5. 05クローズ済みセッションの利用防止

活用シーン

  1. 01タスクに適したセッション種別の選択
  2. 02内部処理用セッションの管理
  3. 03リクエスト終了後のセッション利用回避

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/serverpod/serverpod --skill serverpod-sessions

インストール後、Claude Code で/serverpod-sessionsを入力して読み込まれたか確認します。

詳細

Serverpod セッション

セッションは、データベース、キャッシュ、ストレージ、メッセージ、パスワード、ログへのアクセスを提供します。フレームワークがセッションを自動的に作成して閉じるため、手動で管理する必要があるのは InternalSession だけです。リクエスト、ストリーム、または Future の呼び出しを超えて処理を続ける場合、そのリクエストのセッションを保存しないでください。

セッションの種類

種類作成対象ライフタイム
MethodCallSessionエンドポイントメソッド単一のリクエスト
WebCallSessionWeb サーバールート単一のリクエスト
MethodStreamSessionストリームメソッドストリームの継続中
FutureCallSessionFuture 呼び出しタスクの実行中
InternalSession手動作成閉じられるまで

手動セッション(InternalSession)

セッションを自動的に閉じ、コールバックで例外が発生した場合にエラーとスタックトレースをログに記録する withSession を優先してください。

await Serverpod.instance.withSession((session) async {
  await doWork(session);
});

コールバックとしてライフタイムを表現できない場合は、セッションを手動で作成し、必ず finally ブロックで閉じてください。

var session = await Serverpod.instance.createSession();
try {
  await doWork(session);
} finally {
  await session.close();
}

セッションを閉じないとメモリリークが発生し、ログが永続化されません。閉じたセッションを使用すると StateError がスローされます。

クリーンアップコールバック

session.addWillCloseListener((session) async {
  // Runs just before session closes (all session types)
});

よくある落とし穴:メソッドの戻り値を受け取った後にセッションを使用する

エンドポイントが戻ると、セッションは閉じられます。後で使用するためにセッションを保持しないでください。

// BAD — session already closed when callback runs
Timer(Duration(seconds: 5), () => user.updateLastSeen(session));

修正方法: Future 呼び出し(session.serverpod.futureCalls.callWithDelay(...))を使用するか、Serverpod.instance.withSession(...) を使ってコールバック内で新しいセッションを開いてください。

コメント