cats-effect-resource について
破棄が必要な値を管理する Cats Effect Resource の Scala 向けスキルです。取得と解放を安全に組み合わせ、ハンドルの有効範囲を保ち、Resource ファクトリーでサービスを構築できます。
主な機能
- 01Resource によるライフサイクル管理
- 02リソースを組み合わせたサービス構築
- 03取得したハンドルを use の範囲内に保持
- 04Java AutoCloseable 値のラップ
- 05ブロッキング処理と中断可能処理の使い分け
活用シーン
- 01データベースやソケットのライフサイクル管理
- 02依存リソースからのサービス構築
- 03キャンセル時の安全なリソース解放
- 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を参照してください。
ワークフロー
- 破棄またはライフサイクルの終了処理が必要な値をすべて特定します。
- 取得と解放を
Resource[F, A]に移し、副作用はF(Sync[F].delay/blocking、IO.blockingなど)で遅延実行します。 - すでに取得済みのコンストラクターパラメーターからクラスを構築し、
Resourceを返すresource/createファクトリーに構築処理を置きます。 .useの前に、低レベルのリソースを高レベルのリソースに合成します。- ライフサイクルの境界(IOApp、サーバーの起動、テストフィクスチャ)で
.useを実行し、生のハンドルは use スコープ内にとどめます。 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でインストールします。
コメント
Markdown 対応