Q: ZIOで使用する方法は?

A: ZIOで使用する場合、zio-interop-catsを使用します。

libraryDependencies += "dev.zio" %% "zio-interop-cats" % "<latest-version>"

以下は、ZIOを使用してldbcを利用するためのサンプルコードです。

import java.util.UUID

import cats.effect.std.UUIDGen

import fs2.hashing.Hashing
import fs2.io.net.Network

import zio.*
import zio.interop.catz.*

object Main extends ZIOAppDefault:

  given cats.effect.std.Console[Task] = cats.effect.std.Console.make[Task]
  given UUIDGen[Task] with
    override def randomUUID: Task[UUID] = ZIO.attempt(UUID.randomUUID())
  given Hashing[Task] = Hashing.forSync[Task]
  given Network[Task] = Network.forAsync[Task]

  private def datasource = MySQLDataSource
    .build[Task]("127.0.0.1", 13306, "ldbc")
    .setPassword("password")
    .setDatabase("world")
    .setSSL(SSL.Trusted)
  
  private val connector = Connector.fromDataSource(datasource)

  override def run =
    sql"SELECT Name FROM city"
      .query[String]
      .to[List]
      .readOnly(connector)
      .flatMap { cities =>
        Console.printLine(cities)
      }

パフォーマンス

Cats EffectからZIO変換によるパフォーマンス結果は以下のようになります。

Select Benchmark for Effect System