1. 入力タスク後の処理

入力タスク後の処理 

これまで、主にタスクを見てきました。シェルからユーザー入力を受け付ける入力タスクと呼ばれる別の種類のタスクがあります。これの典型的な例は、Compile / runタスクです。scalastyleタスクも実際には入力タスクです。入力タスクの詳細については、入力タスクを参照してください。

さて、Compile / runタスクを呼び出してから、テスト目的でブラウザを開きたいとしましょう。

src/main/scala/Greeting.scala 

object Greeting {
  def main(args: Array[String]): Unit = {
    println("hello " + args.toList)
  }
}

build.sbt v1 

lazy val runopen = inputKey[Unit]("run and then open the browser")

lazy val root = (project in file("."))
  .settings(
    runopen := {
      (Compile / run).evaluated
      println("open browser!")
    }
  )

ここでは、副作用としてprintlnを使用してブラウザの開く動作を模倣しています。このタスクはシェルから呼び出すことができます。

> runopen foo
[info] Compiling 1 Scala source to /x/proj/...
[info] Running Greeting foo
hello List(foo)
open browser!

build.sbt v2 

新しい入力タスクをCompile / runに書き直すことで、実際にはrunopenキーを削除できます。

lazy val root = (project in file("."))
  .settings(
    Compile / run := {
      (Compile / run).evaluated
      println("open browser!")
    }
  )