Javaをスクリプト言語っぽくするJBangその5です。CLIツールの作成とテンプレート機能を説明します。CLIとかでJavaを使う選択肢はあんまりないかなと思いますが、結構簡単につくれてしまうのでJavaが動く環境であれば選択肢に入れていいかと思います。
テンプレートからCLIを作成
JBangではテンプレートからCLIがすぐに制作できるようにプリセットされています。下記のコマンド投入で
jbang init --template=cli cli/CliSample.java
下記のJavaコードが出力されます。
///usr/bin/env jbang "$0" "$@" ; exit $? //DEPS info.picocli:picocli:4.6.3 import picocli.CommandLine; import picocli.CommandLine.Command; import picocli.CommandLine.Parameters; import java.util.concurrent.Callable; @Command(name = "CliSample", mixinStandardHelpOptions = true, version = "CliSample 0.1", description = "CliSample made with jbang") class CliSample implements Callable<Integer> { @Parameters(index = "0", description = "The greeting to print", defaultValue = "World!") private String greeting; public static void main(String... args) { int exitCode = new CommandLine(new CliSample()).execute(args); System.exit(exitCode); } @Override public Integer call() throws Exception { // your business logic goes here... System.out.println("Hello " + greeting); return 0; } }
中身を見てみると、//DEPS
にPicoCLIが設定されています。実行してみましょう。
$ jbang cli/CliSample.java CLI Hello CLI
プロジェクト内で必要なコマンドとかは簡単に作れそうですね。
templateコマンド
JBangにはtemplateコマンドがあります。プリセットされているものも含めて一覧にするコマンドがあるので、実行してみます。
$ jbang template list agent Agent template cli CLI template gpt Template using ChatGPT (requires --preview and OPENAI_API_KEY) gpt.groovy Template using ChatGPT for groovy (requires --preview and OPENAI_API_KEY) gpt.kt Template using ChatGPT for kotlin (requires --preview and OPENAI_API_KEY) hello Basic Hello World template hello.groovy Basic groovy Hello World template hello.kt Basic kotlin Hello World template jbang-catalog Template for creating a new JBang catalog hosted on github with automatic renovate updates qcli Quarkus CLI template qmetrics Quarkus Metrics template qrest Quarkus REST template readme.md Basic markdown readme template
プリセットされているものだけでも、魅力的なものがたくさんあります。QuarkusのRESTAPIやCLIだったり、ChatGPTのAPIクライアントを生成できるようです。
JBangのtemplateに追加する
その3
で作成したJBangアプリケーションをテンプレート化してみましょう。
$ jbang template add --name SpringBootTemplate --description SpringBootSampleApp api/SpringBootSample.java api/application.yml [jbang] No explicit target pattern was set, using first file: {basename}.java=api/SpringBootSample.java [jbang] Template 'SpringBootTemplate' added to '/Users/kohei.sasaki/.jbang/jbang-catalog.json'
テンプレートに名前をつけて、テンプレート化したいファイルをスペース区切りで入力します。説明文もつけてみました。作成した情報は、jbang-catalog.jsonの中に入ります。
{ ... ,"templates": { "SpringBootTemplate": { "file-refs": { "{basename}.java": "../git/jbang-sample/api/SpringBootSample.java", "application.yml": "../git/jbang-sample/api/application.yml" }, "description": "SpringBootSampleApp", "properties": {} } }
登録されていますね。テンプレート一覧をみて、確認してみます。
$ jbang template list SpringBootTemplate SpringBootSampleApp
追加されていました。テンプレートに追加したものでJBang init
をしてみます。
jbang init --tempalte SpringBootTemplate template/SpringBootSample.java tree template template ├── SpringBootSample.java └── application.yml
無事作成されています。これで、チーム内ルールがコード化されているので、ちょっとしたツールとかもカジュアルに生産性高く作れそうです。
まとめ
JBang templateの使用方法を説明してみました。生成されるコードはJavaコードがほとんどですが、コマンド、実行などスクリプト言語っぽく使え、チーム開発でも活用できそうです。ぜひ使ってみてください。