LoginSignup
1
0

More than 1 year has passed since last update.

Java CLI ツールのスケルトン

Last updated at Posted at 2023-05-07

知り合いの Java 開発者が、コマンドラインで使う CLI tool は開発したことがない、と言っていました。なのでその知り合いのため、Java 用に簡単なテンプレートを作成してみました。

他の方にあまり参考にはならないとおもいますが、いちおう公開しておきますね。GitHub リポジトリは yamachan/CLIToolBase です。

環境

環境は以前に 投稿した 時からあまり更新しておらず。
image.png
開発環境はレトロな Eclipse IDE 2020-09 for Enterprise Java Developers です。
image.png

プロジェクトの新規作成

ファイルの New メニューから Java Prokect を新規作成します。
image.png
Project Name を適当に入力 (今回は CLIToolBase) して Finish で終了。
image.png
Package Explorer に作成したパッケージが表示されていればok。
image.png

git init しておく

まだ空のプロジェクトですが、いったん git init を実行して初期化しておきます。
image.png
この空の状態を first commit として push しておきました。

main 関数を作成

さて、まずは最初に実行されるクラスを新規作成します。
image.png
適当なクラス名 (今回は CLIMain) を指定し、main 関数の生成をチェックして Finish。
image.png
以下のような感じで生成されますね。
image.png
とりあえず、定番の1行を追加してみましょう。
image.png
変更を保存したら、クラスファイルを右クリックして Run As Java Application です。
image.png
コンソールに Hello World. が表示されればok。
image.png
ついでに簡単な README.md ファイルを追加して push してみました。

Apache Commons CLI の導入

CLI tool を書く場合は必須ともいえる Apache Commons CLI を導入します。

ちょっと原始的ですが mvnrepository などから好みのバージョンをダウンロードします。私は新しめの commons-cli-1.5.0.jar ファイルをダウンロードしました。ダウンロード先はどこでも良い気はしますが、今回はプロジェクト内に lib フォルダを作成して、配置しています。
image.png
そして Build Path メニューにある Configure Build Path... メニューから
image.png
Add JARs... メニューから、配置した jar ファイルを追加します。
image.png
こんな感じに追加されていればok。Apply and Close で閉じましょう。
image.png

動作確認

Using Apache Commons CLI にあるサンプルコードを適当にコピーして動作確認してみます。

CLIMain.java
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;

public class CLIMain {

	public static void main(String[] args) throws ParseException {
		// create Options object
		Options options = new Options();

		// add t option
		options.addOption("t", false, "display current time");
		
		CommandLineParser parser = new DefaultParser();
		CommandLine cmd = parser.parse(options, args);

		if(cmd.hasOption("t")) {
			System.out.println("Sample output with t option.");		
		} else {
			System.out.println("Sample output without t option.");		
		}
	}
}

このコードを単に実行すると else 文のほうのメッセージが表示されます。
image.png
実行の Run Configuration... から、
image.png
パラメータ部分に -t オプションを指定して実行すると、
image.png
if文の cmd.hasOption("t") が成立して、表示メッセージが変わることが確認できます。
image.png
この変更も push してみました。

長いオプション名も有効にする

-t に加えて --time という長いオプション名を使えると良いですよね。むろん今は実行エラーになります。
image.png
指定できるようにするには、以下のように変更します。

CLIMain.java
		// add t option
		options.addOption("t", "time", false, "display current time");

メッセージも少し修正したものを push しましたので、参照してみてください。

Help メッセージの生成

commons-cli ライブラリで私が一番好きなのは、ヘルプメッセージの生成が楽になるところです。サンプルを以下のように拡張してみました。

CLIMain.java
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;

public class CLIMain {
	public static String version = "1.0.0";
	public static String update = "2023/05/07";
	public static void main(String[] args) throws ParseException {
		// create Options object
		Options options = new Options();

		// add options
		options.addOption("t", "time", false, "display current time");
		options.addOption("h", "help", false, "display help message");
		
		CommandLineParser parser = new DefaultParser();
		CommandLine cmd = parser.parse(options, args);

		if(cmd.hasOption("h")) {
			HelpFormatter hf = new HelpFormatter();
        	hf.printHelp("CLIToolBase", "A simple template repo for Java CLI tool.", options, "\nversion " + version + " at " + update, true);
           	System.exit(0);
		} else if (cmd.hasOption("t")) {
			System.out.println("Sample output with [-t|--time] option.");
		} else {
			System.out.println("Sample output without [-t|--time] option.");		
		}
	}
}

差分は push したものを参照したほうが良いかもしれません。

で、-h もしくは --help オプションを指定して実行すると、以下のようなヘルプメッセージが表示されます。
image.png
パラメータ一覧の部分が自動生成なのがポイントです。

ツールを配布する

作成したツールは jar 形式にまとめて利用者に配布しましょう。まず Run Configurations のパラメータ指定はいったん消しましょう。
image.png
プロジェクトを右クリックして Export... を実行。
image.png
Runable JAR file を選んで Next。
image.png
Launch configuration には Run Configurations と同じものを指定します。 Export destination で配布用の jar ファイル名を指定します。
image.png
Library handling は真ん中の選択肢をお勧めします。生成された jar の中に、実行に必要なライブラリもそのまま含まれるので、便利かつ楽です。
image.png
※ 利用するライブラリのサイズが大きくて配布が面倒な場合は一番下を選んでファイルを分けましょう

Finish で jar ファイルが生成されますので、利用者に配布しましょう。jar ファイルを受け取った側は、以下のように実行できます。
image.png

というわけで

非常に初歩的な内容となりましたが、Java で CLI tool を書いてみる際の簡易テンプレートを作成し、ざっくり説明してみました。commons-cli ライブラリを使うと、CLI tool の UI 作成部分が非常に楽なので、自分に便利なものを量産すると良いとおもいますよ。

ではでは。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0