mcpField
C
cats-effect-resource

cats-effect-resource

github.com/alexandru開発5169 回インストール今日更新
リポジトリ

cats-effect-resource について

破棄が必要な値を管理する Cats Effect Resource の Scala 向けスキルです。取得と解放を安全に組み合わせ、ハンドルの有効範囲を保ち、Resource ファクトリーでサービスを構築できます。

主な機能

  1. 01Resource によるライフサイクル管理
  2. 02リソースを組み合わせたサービス構築
  3. 03取得したハンドルを use の範囲内に保持
  4. 04Java AutoCloseable 値のラップ
  5. 05ブロッキング処理と中断可能処理の使い分け

活用シーン

  1. 01データベースやソケットのライフサイクル管理
  2. 02依存リソースからのサービス構築
  3. 03キャンセル時の安全なリソース解放
  4. 04ライフサイクルを限定したテスト用フィクスチャ

インストール

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

$npx skills add https://github.com/alexandru/skills --skill cats-effect-resource

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

同梱ファイルreferences/resource.mdscripts/verify-examples.scala

詳細

Cats Effect Resource(Scala)

クイックスタート

  • 所有する破棄可能な値はすべて、Resource.make、Resource.makeCase、または Resource.fromAutoCloseable でモデル化します。
  • .use から取得済みのハンドルを返さないでください。.use の完了時に解放されます。スコープ内で計算した値のみを返します。
  • クラスのコンストラクター、フィールド、トップレベルの val で、所有するリソースを割り当てないでください。Resource[F, Service] を返すコンパニオン/ファクトリーメソッドを使い、取得済みのプライベート依存関係をコンストラクターに渡します。
  • Java の AutoCloseable 値は、Resource.fromAutoCloseable(Sync[F].blocking(...)) または IO.blocking(...) でラップします。
  • リソースは flatMap、mapN、parMapN、またはヘルパーコンストラクターで合成します。ライフサイクルを管理する API では Resource[F, A] を公開します。
  • パターン、ベストプラクティス、型チェック済みのサンプルについては、references/resource.md を参照してください。

ワークフロー

  1. 破棄またはライフサイクルの終了処理が必要な値をすべて特定します。
  2. 取得と解放を Resource[F, A] に移し、副作用は F(Sync[F].delay/blocking、IO.blocking など)で遅延実行します。
  3. すでに取得済みのコンストラクターパラメーターからクラスを構築し、Resource を返す resource/create ファクトリーに構築処理を置きます。
  4. .use の前に、低レベルのリソースを高レベルのリソースに合成します。
  5. ライフサイクルの境界(IOApp、サーバーの起動、テストフィクスチャ)で .use を実行し、生のハンドルは use スコープ内にとどめます。
  6. allocated は、取得と解放を分ける必要が本当にある相互運用に限って使用し、ファイナライザーが必ず一度だけ呼び出されるようにします。

使用ガイダンス

  • 合成とキャンセル安全性が重要な場合は、try/finally や bracket より Resource を優先します。
  • ブロッキングを伴う JVM API を呼び出す場合、取得と解放には IO.blocking(または Sync[F].blocking)を使います。
  • .use 内のブロッキングを伴う使用フェーズの処理には、IO.interruptible/Sync[F].interruptible を優先します。
  • ファイナライザーを所有しないエフェクトに限り Resource.eval を使用します。リソース取得の代わりにはなりません。
  • use を実行するたびに新しいリソースが取得されます。同じハンドルを複数の操作で共有する必要がある場合、それらの操作は一度の .use の中で行います。
  • バックグラウンドファイバーには Resource、.background、または Supervisor を使い、キャンセル時に確実にクリーンアップします。
  • Scala のサンプルを追加または変更した場合は、同梱の scripts/verify-examples.scala スクリプトを更新してコンパイルします。

参考資料

  • API の詳細、パターン、サンプルについては references/resource.md を読み込みます。代表的なチェックには scripts/verify-examples.scala を使用します。
  • Kotlin/Arrow の対応例については、arrow-resource スキルを参照してください。
  • このスキルは npx skills add https://github.com/alexandru/skills --skill cats-effect-resource でインストールします。

コメント