0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Hello, World!

Last updated at Posted at 2023-09-28

まず最初に基本であるHello, World!をコンソールに出力するプログラムを作成し、ZIOについて大まかに理解します。

セットアップ

※ビルドツールはsbtを使います。
まず設定ファイルbuild.sbtに以下の設定を記述し、ZIOのライブラリを読み込むようにします。

    libraryDependencies ++= Seq (
      "dev.zio" %% "zio" % "2.0.13"
    )

また、IntelliJ IDEAで普段Scala開発をされている方は以下のプラグインをインストールされると良いかもしれません。

プログラム本体

object MainApp extends ZIOAppDefault {
  def run: ZIO[Any, Throwable, Unit] = Console.printLine("Hello, World!")
}

実行

セットアッププログラム本体の記述が終わったら、sbt runで実行してください。
以下の様にコンソールに出力されたら成功です。

Hello, World!

プログラム本体の解説

Console.printLine("Hello, World!")について

Console.printLineの定義を確認するとIO[IOException, Unit]を返す関数であることがわかります。
IO[+E, +A]ZIO[Any, E, A] の型エイリアスであるため、IO[IOException, Unit]ZIO[Any, IOException, Unit] を表していることがわかります。

ZIO型について

上記のZIO型の意味としては以下の様になっています。

type ZIO[R, E, A] = R => Either[E, A]

今回の場合は以下のようになります。

type ZIO[Any, IOException, Unit] = Any => Either[IOException, Unit]

後の章でも説明しますが、これはAny型に依存し(Any型に依存するということは何にも依存していないことを意味しています)、IOException型で失敗する可能性や処理が成功した場合、Unit型を返す可能性があることを意味しています。

ZIO型を返す関数の実行について

ZIO型自体は処理の宣言の様なものであり、それ自体を直接呼び出したとしても実際の処理は行われません。
今回の場合、Console.printLine("Hello, World!")を以下のような形で呼び出したとしてもコンソールにHello, World!は出力されません。

object HelloWorld {

  def main(args: Array[String]): Unit = {
    Console.printLine("Hello, World!")
  }

}

ZIO型を返す関数の処理自体を実行させるためには必ず今回のプログラム本体のようにZIOAppDefaultrun関数にZIO型を渡す必要があります。

終わりに

以上がZIOのHello, World!プログラムとその解説でした。
次章では今回のZIO型の場合、Any型で表されるZIOのDI(Dependency Injection)について詳しく見ていきます。

前章:ZIOについて
次章:ZIOのDIについて

演習

  1. 今回のHello, World!プログラムを実際に動かしてください。
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?