Jakarta Commons CLIでJavaコマンドラインも楽々

文:David Petersheim 翻訳校正:原井彰弘
2007-12-13 10:00:00
  • このエントリーをはてなブックマークに追加

 コマンドラインの引数をパースするコードを書く作業は楽しいものではない。しかし、アプリケーションコンテナやウェブサービスが流行っているこのご時世においても、ときどき必要となる。しかし、コマンドラインの引数を調べなければいけない―それが少し複雑になってきた場合には特に―というときには信頼できるオープンソースのJavaツールキット「Command Line Interface」(CLI)を利用しよう。

 CLIはJakarta Commonsプロジェクトのひとつ。ひとつやふたつの引数をパースするくらいのアプリケーションには大げさだが、ほとんどの設定をコマンドラインから行うようなものを開発するならば必要不可欠である。

 CLIを利用するには、最初にOptionクラスのインスタンスを作成する必要がある。

Options opt = new Options();

 作成したOptionsインスタンスを用いて、アプリケーションが受け取るコマンドラインの引数を定義する。これを行うひとつの方法は、OptionsクラスのaddOption()メソッドを用いることだ。アプリケーションが受け取るオプションひとつにつき、このメソッドを一度呼び出す。

opt.addOption("h", false, "Print help for this application");
opt.addOption("u", true, "The username to use");
opt.addOption("dsn", true, "The data source to use");

 クラスの引数を定義したら次にCommandLineParserを作成し、mainメソッドに渡されたStringの配列をパースする。

BasicParser parser = new BasicParser();
CommandLine cl = parser.parse(opt, args);

さて、全ての引数をパースし終わったので、次にパーサから返されたCommandLineインスタンスを調べ、どのような引数と値がユーザから与えられたのかを見つけ出す。

if ( cl.hasOption('h') ) {
    HelpFormatter f = new HelpFormatter();
    f.printHelp("OptionsTip", opt);
}
else {
    System.out.println(cl.getOptionValue("u"));
    System.out.println(cl.getOptionValue("dsn"));
}

 上記のように、HelpFormatterクラスを用いると自動的にプログラムのヘルプを生成することも可能だ。

コード全体は以下のようになる。

// OptionsTip.java
import org.apache.commons.cli.BasicParser;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.ParseException;

public class OptionsTip {
    public static void main(String args[]) {
        try {
            Options opt = new Options();

            opt.addOption("h", false, "Print help for this application");
            opt.addOption("u", true, "The username to use");
            opt.addOption("dsn", true, "The data source to use");

            BasicParser parser = new BasicParser();
            CommandLine cl = parser.parse(opt, args);

            if ( cl.hasOption('h') ) {
                HelpFormatter f = new HelpFormatter();
                f.printHelp("OptionsTip", opt);
            }
            else {
                System.out.println(cl.getOptionValue("u"));
                System.out.println(cl.getOptionValue("dsn"));
            }
        }
        catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

 CLIツールキットは退屈なコーディングを肩代わりし、コマンドラインの引数のパースを単純な作業にする。より詳しい情報は、Jakarta Commons CLIプロジェクト にあるドキュメントを参照して欲しい。

  • 新着記事
  • 特集
  • ブログ
このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]