見出し画像

JBangならJavaをScriptにできる(かもしれない)話

あいさつ

初めまして、WingArc1stに所属しています「はやみ」です。普段は新潟で働いています。よろしくお願いします。

JBangとは

JBangとは、Javaのソースコードをスクリプトの様に明示的にコンパイルせずに、手軽に実行できるものです。

Javaとの比較

「それJavaでも出来るのでは?」と思った方は、最近のバージョンを使ってますね。Java11からは、javaコマンドで.javaファイルを指定して実行する事が出来ます。
JBangでは、素のJavaと比較して次の様な事ができます。

依存関係を指定できる

Javaの場合、依存関係(使用しているjarファイル)は事前に自分で解決する必要がありますが、JBangの場合はソースコードに記載する事で指定できます。
例として、picocliを利用する場合は次の様に記載します。

//DEPS info.picocli:picocli:4.6.3

実行するJavaのバージョンを指定できる

Javaの場合、実行するJavaのバージョンはjavaコマンドのバージョン固定となりますが、JBangの場合はソースコードでJavaのバージョンを指定する事ができます。実行時に指定されたバージョンの実行環境が見つからなかった場合、自動的にダウンロードしてインストールします(Windows環境では制限が有りますが、後で記載します)。
例として、Javaのバージョン17以降を指定する場合は次の様に記載します。

//JAVA 17+

Javaのバージョンは8以上を指定できますので、javaコマンドに実装されていないバージョンでもソースコードを実行できます。

//JAVA 8

Javaがインストールされていなくとも実行できる

実行時に実行環境をダウンロードできますので、JBangがインストールされている環境では、Javaが動作環境にインストールされていなくてもjavaのソースコードを実行できます。

実行パーミッションのあるjavaファイルを直接実行できる

JBangでは、ファイルに実行パーミッションを付加した.javaファイルの先頭に次の様に記載する事で、bashやzshのシェルでshebangの様に.javaファイルを直接実行できます。

///usr/bin/env jbang "$0" "$@" ; exit $?

JShellの.jshファイルも実行できる

JBangでは、Java9以降で利用できるJShellの.jshファイルも実行できます。

インストール方法

インストール方法はこちらにあります。

Windows(Powershell)

Powershellの場合、次を実行します。

iex "& { $(iwr -useb https://ps.jbang.dev) } app setup"

Bash

bashの場合、次を実行します。

curl -Ls https://sh.jbang.dev | bash -s - app setup

その他

SDKMan・Chocolatey・Scoop・Homebrew等からインストールできます。

使い方

使い方については、オフィシャルのドキュメントが良く出来ていますので、そちらを参照して下さい。

Windows環境での制限

JBangでは、機能の一部にシンボリックリンクを利用しています。その為、Windows環境でシンボリックリンク(Create symbolic links)が利用できない場合は、次の様な制限がありますので注意して下さい。

  • 実行時に自動的にJava実行環境がダウンロードされた直後は、java.nio.file.FileSystemExceptionが表示されてソースコードの実行が出来ない場合があります。もう一度実行する事で、ソースコードは実行されます。

  • JBangには、エディタを起動してファイルを編集する機能があります(jbang edit)が、java.nio.file.FileSystemExceptionが表示される場合がありますが、エディタは起動します。

サンプルプログラム

フォルダ内にある全てのファイルについてバイト数を表示するものを、JBangのサンプルプログラムとして作成しました。参考にして下さい。


この記事が気に入ったらサポートをしてみませんか?