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

文:David Petersheim
翻訳校正:原井彰弘
2007/12/13 10:00

ひょっとして、コマンドラインの引数をパースするコードをわざわざ書いている?JavaのCLIアプリケーションで引数を簡単に扱うための「Jakarta Commons Command Line Interface」を扱う。

 コマンドラインの引数をパースするコードを書く作業は楽しいものではない。しかし、アプリケーションコンテナやウェブサービスが流行っているこのご時世においても、ときどき必要となる。しかし、コマンドラインの引数を調べなければいけない―それが少し複雑になってきた場合には特に―というときには信頼できるオープンソースの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プロジェクト にあるドキュメントを参照して欲しい。

記事の感想やご意見をコメントでお寄せください(CNET_IDログインが必要です)
ログイン パスワードを忘れた方  |  新規登録
  • 今日のトップ記事
  • 昨日
  • 2日前
  • 3日前
  • 6日前
  • 7日前
  • 新着記事
  • 人気記事
  • 特集
  • ブログ