UvaScript の使い方

はじめに

UvaScript は、Perl や Ruby のようなスクリプト言語で書くような処理を Java で書くためのツールキットです。 Java は機能の豊富な汎用言語ですが、多数のファイルをまとめて処理したり、外部コマンドを起動するような処理は苦手で、そのような場合には Perl や Ruby が使われることが多いようです。

UvaScript は、多数のファイルをまとめて操作したり、外部コマンドを起動する処理に便利な API (クラス・ライブラリ) を提供します。 UvaScript を使うと、そのような処理をおこなうプログラムを、Java を使って比較的簡潔に書くことができるようになります。

入手

UvaScript のバイナリ (jar ファイル) は、uva.jar です。

Javadoc ドキュメントは、ここです。

UvaScript は自由に利用することができます。

簡単なプログラム例

例として、src ディレクトリの下にある全てのファイルの名前を表示するプログラムを書いてみましょう。

このプログラムは無名クラスを使って書いてあるのでわかりにくいかもしれませんが、要は src ディレクトリの下を再帰的に調べて見つかった全てのファイルとディレクトリを引数 f として、以下のメソッドを実行します。

run メソッドは、引数 f で表されるファイルやメソッドの名前を表示します。

src ディレクトリの下ではなく、別なディレクトリの下を調べたいときは、元のプログラムの

にある、find メソッドの引数に与えるパターンを変えます。

例えば次のようなパターンが使えます。

ワイルドカード * は、ファイル名もしくはディレクトリ名の一部または全部として使うことができ、任意の文字列にマッチします。 なお * は、パス名の途中のディレクトリを指定するのには使えません。 例えば

の左側の * は、ディレクトリの指定に使われていますから誤りです。 パス名の右端のファイルもしくはディレクトリ名の指定にだけ使えます。

一方、ワイルドカード ** は、ディレクトリ名の代わりに用いることができます。 0 以上の任意個数のディレクトリ名の並びにマッチします。 例えば

とすると、Foo.java、src/Foo.java、src/poi/Foo.java、src/poi/hoi/Foo.java 等にマッチします。

最後に、ディレクトリやファイル名の区切り文字は Windows であっても / です。 ¥や\ ではありません。

コンパイルと実行

上で書いたプログラム Ls.java をコンパイルするには次のようにします。

uva.jar は UvaScript の jar ファイルです。 必ずしもカレント・ディレクトリに置いてある必要はありません。 カレント・ディレクトリに置いていない場合には、ディレクトリ名をつけて指定します。

コンパイルが正常に終わると Ls.jar という jar ファイルが作られます。 この jar ファイルは必要なクラスファイルを全て含みますから、次のようにして実行できます。

Ls.jar に続けてコマンド行引数を書くと、Ls クラスの main メソッドの String[] 型の引数として渡されます。 プログラムの実行にあたって、uva.jar は必要ありません。 コンパイルしたプログラムを周囲の人に配布する場合には、Ls.jar だけを配布すればよいことになります。

プログラムが複数のファイルからなる場合には、コンパイルするときにコマンド行引数として順に並べます。 例えば

とすると Ls.java、Util.java、Support.java の 3 つのファイルからなるプログラムをコンパイルします。 ただし main メソッドをもつクラスの .java ファイルはコマンド行引数の先頭に書かなければなりません。 生成される jar ファイルの名前も、先頭のクラスの名前が使われます。

プログラムのひな形

UvaScript は、プログラムのひな形を出力する機能を用意しています。 例えば

とすると、Ls.java というファイルを生成します。 このファイルの中は、典型的な UvaScript のプログラムのひな形になっていますから、これを部分的に修正することで、必要なプログラムを素早く書き上げることができます。

外部コマンドの起動

外部コマンドの起動には uvascript.Task クラスを使います。 単純に外部コマンドを起動するだけなら、

のようにします。 この例では Task クラスのコンストラクタの引数

を外部コマンドとして起動します。

複数のコマンドをパイプでつないで起動することもできます。 例えば

は、シェルから

と起動するのと同じです。

標準入力や標準出力をファイルにリダイレクトすることも可能です。

は、シェルから

と起動するのと同じです。



Java(TM) is a trademark of Sun Microsystems, Inc.
Copyright (C) 2004 by Shigeru Chiba, All rights reserved.