ジャバでスクリプトを書くときのハマりどころ

JEP 330を利用すると、 javaコマンドに直接ジャバのソースを渡して、コンパイルなしに直接実行することができます。 さらに、LinuxやmacOSでは、ファイルの内容の先頭が#!から始まるいわゆるshebangにも対応していて、これを使えばジャバでスクリプトを書くことが実際できます(ジャバスクリプトではない)。 ちょっと凝ったことをbash でやろうとするとあっという間に自分の立ち位置を見失いがちですし、これからはガリガリとジャバでスクリプトを書く時代がやってきたと言えるでしょう。

できることのイメージ

こんな感じで書いて

#!/usr/bin/env -S java --source 20
public class Test{
  public static void main(String[] _args){
    System.out.println("How many files(0-15)?");
  }
}

こんな感じで実行できます

% ./Test
How many files(0-15)?

注意したいこと

ちょっとハマりそうだなというところを書いておきます。

  1. 冒頭shebangでは、--sourceオプションが必須。
  2. 保存するとき、ファイル名の末尾が.javaではいけない。 スクリプトなのでTestとか適当なファイル名にする必要がある。

おわりに

これでジャバでもスクリプトをかけるので、ジャバスクリプトを使わなくても良いだけでなく、シェルスクリプトも使う必要がなくなりました。 ジャバの世界はどんどん広がっているのを感じます。 最近では大本営発表で510億のJVMが実行されているらしいです。すごいですね。

2023-03-31初稿. OpenJDK Temurin-20+36で動作確認。