📢

Scala-CLI だけで作る超軽量エコーコマンド ── その場でネイティブ実行ファイルを生成しよう

に公開

0. 前提:scala-cli のインストール

brew install scala-cli        # Homebrew で一発

Homebrew 未使用の方は 公式インストール手順 参照。

scala-cli は Scala 本体+GraalVM を自動で取って来てくれるので事前セットアップ不要です。

1. ソースコードを 1 ファイルだけ書く

mkdir hello-bin && cd hello-bin
cat <<'EOF' > EchoApp.scala
//> using scala "2.13.14"

// 単純なエコー。最初の引数をそのまま出力
object EchoApp {
  def main(args: Array[String]): Unit = {
    println(args.headOption.getOrElse(""))
  }
}
EOF

ポイント

解説
//> using scala "2.13.14" Scala バージョンを宣言(ここでは 2 系を選択)
object EchoApp { … } Scala 2 では object+main がエントリポイント
args.headOption.getOrElse("") 引数が無ければ空文字列を返す安全実装

2. ネイティブバイナリを一発生成

scala-cli package EchoApp.scala \
           --native-image \
           --output bin/echo
  • 実行すると初回のみ GraalVM を自動ダウンロード
    (キャッシュされるので 2 回目以降は即ビルド)
  • bin/echo が スタンドアロン実行ファイル として作成されます。

3. 動作チェック:追加 → 一覧 → 削除 …ではなくエコー

chmod +x bin/echo            # 生成時に実行属性が付かない場合のみ

./bin/echo go                # => go
./bin/echo "Hello, Scala!"   # => Hello, Scala!
./bin/echo                   # => (空行)
  • 第一引数 をそのまま出力
  • 引数無しなら空行を返し、シェルスクリプトのパイプ用にも便利

4. おわりに

ソースにバージョンや依存を宣言できるので ビルドスクリプト不要

* GraalVM Native Image のおかげで 実行時 0.0 sec & 配布も楽々

小さなツールを “配れるバイナリ” にしたいとき、
Go だけでなく Scala もこんなに手軽――ぜひお試しください!

Discussion