jbangという、Java をスクリプト言語のように実行できるツールを知りました。
これ、プログラミング初心者が Java を学び始めるのにとても有用だと思います。
- JDKのインストールが不要
- 準備が大体コピペだけですむ
- コンパイルせずに、.javaファイルを直接実行可能
- Gradle (ANT, Maven) が無くても外部依存関係を解決できる
とても良い感じです。
初心者にいきなりコンパイル→実行をさせたり、もしくはIDEを使わせるというのは、結構ハードルが高いと思います。 たださえ、意味の分からないことをやらされているのに、いきなり意味不明なコンパイルを挟まないと実行できないとか、大量のボタンと画面が殴りかかってくる恐怖のIDEとか、乗り越えるのも嫌になるでしょう。
我々からすれば「その程度のこと」ですが、割と「その程度のこと」で躓く物です。
JShellは初心者にとても良いと思いますが、 外部依存関係は解決できません。 jbangはその点が非常に優れていると思います。
何も準備せずに Hello World を動かしてみた
Javaの入っていない Windows 10 環境を用意しました。java も javac も入っていません。
作業ディレクトリとして、デスクトップに jbang を配置。
次に PowerShellを起動します。
なお、PowerShellを開く/触るという行為は、初心者には拒絶されるレベルで、ハードルが高いです。みなさん、頑張って下さい。
「Shift + 右クリック」をすると 「PowerShell ウィンドウをここで開く」が出るのでこれをクリックします。
PowerShellが開いたら、以下をおもむろにコピーして、PowerShellに貼り付けます。
なお、Scoopがすでに入ってる場合は、3行目からでOK。gitがすでに入っている場合は、3行目はスキップ可能。
Set-ExecutionPolicy RemoteSigned -scope CurrentUser Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh') scoop install git scoop bucket add jbangdev https://github.com/jbangdev/scoop-bucket scoop install jbang
Note: 現在は以下のコマンドでインストールできるみたいです。
iex "& { $(iwr -useb https://ps.jbang.dev) } app setup"
PowerShell はGUIじゃないので、かなりハードルが高いですが、コピペだけでインストールがすむので、まだ何とかなるのではないでしょうか。
次に、メモ帳(もしくはさくらエディタ)を開いてもらいます。初心者でも、何故か、さくらエディタを使ってる確率が高い気がします。
そして、次の内容をエディタで入力してもらい、「Hello.java」として保存します。
なお、jbang init Hello.java
を使えばメモ帳不要ですが、個人的には手を動かしてみる体験は重要だと思うので、ここはメモ帳を起動した方が良いと思います。
public class Hello { public static void main(String[] args) { System.out.println("Hello World"); } }
※ 1行目の「///usr/bin/env jbang "$0" "$@" ; exit $?」は Windowsでは不要
富士山の頂上から、麓まで飛び降りるレベルの崖っぷちとして、「Hello.java.txt」として保存してしまうことがあげられます(上記画像)。何とか上手く突破させてあげてください。
後はおもむろに jbang Hello.java
と PowerShell で実行するだけで、勝手に JDK のダウロードをしてから、実行してくれます。(環境変数 JAVA_HOME がある場合は、そちらを使います)
無事、Java を何も入れていない環境で、あっさりハロワが完了しました!
なお、jbangがコンパイルした結果や、ダウンロードしたJDKは、ユーザーホームディレクトリの .jbang/cache
にあります。
次に、jbang のサンプルにもあるように、jfiglet ライブラリを使ったプログラムを実行してみましょう。
//DEPS com.github.lalyos:jfiglet:0.0.8 import com.github.lalyos.jfiglet.FigletFont; public class Hello { public static void main(String[] args) throws Exception{ System.out.println(FigletFont.convertOneLine("Hello World")); } }
//DEPS com.github.lalyos:jfiglet:0.0.8
を読み取り、勝手に依存を解決して実行してくれます。
外部の依存するライブラリを使う為にビルドスクリプトや、ダウンロードを手動ですること無しに簡単にできました。
今後Gradleなどを教える際の、敷居が少し下がるのでは無いでしょうか。
まとめ
jbangを使えばJDKをインストールしなくて良いというのは、非常に初学者に優しいと思います。
JShellとならんで、初学者の助けになるツールになるポテンシャルを感じました。
jbangからJShellが起動できるともっと良いかな。※追記
追記: jbangからJShellを操作する
Nice blog! Btw. For jsh files you can run it with —interactive and jshell will stay open for you to use.
— Max Rydahl Andersen (@maxandersen) 2020年10月12日
どうやら、 jshファイルを --interactive
を付けて実行すると、JShellを操作できるようです。