Java 1.6(Mustang)にはスクリプト実行コマンドjrunscriptが添付される。
jrunscriptは、対話的にシェルとして使うことも、スクリプトファイルを読み込み実行することもできる。
Rhinoの、org.mozilla.javascript.tools.shell.Mainクラスに類似する機能を持つ。
簡単な利用方法は以下を参照のこと。
jrunscriptは、簡単なタスクから共通的に利用する基本となる関数群をビルトインオブジェクトとして提供している。
以下、JavaOne発表資料PDFの28ページで紹介されている。
以下一覧表に、jrunscriptのビルトインオブジェクト群を文字列化し出力を行いまとめた。
| タイプ | 名前 | 返り値 | 宣言 | 説明 |
|---|---|---|---|---|
| ファイル | ||||
| String | javax.script.filename | - | - | スクリプトファイルの名前。 |
| JavaObject | curDir | - | java.io.File | 現在のディレクトリ。 |
| Function | pwd | void | pwd() | 現在の作業ディレクトリを表示する。 |
| Function | cat | void | cat(obj, pattern) | リソースの内容を表示する。 リソースとしてファイルやURLを指定できる。 パターンを渡すと、合致する行のみを表示することができる。 |
| Function | cd | void | cd(target) | 現在のディレクトリを移動する。 引数が渡されない場合、ユーザーのホームディレクトリへ移動する。 |
| Function | find | void | find(dir, pattern, callback) | 指定されたディレクトリ以下から、パターンに合致する名前を持つファイル検索する。 合致した各ファイルを引数として、コールバック関数が呼び出される。 デフォルトのコールバック関数としてprintが設定されている。 |
| Function | grep | void | grep(pattern, files) | 指定したファイル群の中から、パターンに合致する行を取り出す。 |
| Function | ls | void | ls(dir, filter) | ディレクトリに含まれるファイルを一覧する。 ファイル名によりフィルタリングを行なえる。 |
| Function | dir | void | dir(d, filter) | lsのエイリアス。 |
| Function | mkdir | void | mkdir(dir) | ディレクトリを作成する。 |
| Function | mkdirs | void | mkdirs(dir) | ディレクトリを作成する。 複数階層を一度に作成できる。 |
| Function | cp | void | cp(from, to) | ファイルをコピーする。 fromのアドレスを基にストリームを開き、toへ出力する。 ディレクトリをコピーすることはできない。 |
| Function | mv | void | mv(from, to) | ファイルを移動またはリネームする。 |
| Function | ren | void | ren(from, to) | mvのエイリアス。 |
| Function | rm | void / boolean | rm(pathname) | ファイルまたはディレクトリを削除する。 削除に失敗するとfalseが返される。 |
| Function | del | void / boolean | del(pathname) | rmのエイリアス。 |
| Function | rmdir | void / boolean | rmdir(pathname) | rmのエイリアス。 |
| Function | which | void | which(cmd) | システム環境変数PATHの中から、コマンドを検索し表示する。 |
| Function | pathToFile | java.io.File | pathToFile(pathname) | パス文字列を基に、Fileオブジェクトを生成する。 |
| Function | printFile | void | printFile(f) | ファイルおよびディレクトリの情報を表示する。 |
| Function | dirname | String | dirname(pathname) | パス表記からディレクトリ部分を取り出す。 |
| 入出力 | ||||
| JavaObject | err | - | java.io.PrintStream | 標準エラー出力ストリーム。 |
| JavaObject | inp | - | java.io.BufferedInputStream | 標準入力ストリーム。 |
| JavaObject | out | - | java.io.PrintStream | 標準出力ストリーム。 |
| Function | read | String | read(prompt, multiline) | 標準入力ストリームから、入力を読み取る。 マルチラインにtrueを渡すと、複数行の入力を受け取れる。 |
| Function | inStream | java.io.InputStream | inStream(str) | ファイルまたはURLのアドレスを基に、InputStreamを生成する。 |
| Function | outStream | java.io.OutputStream | outStream(out) | OutputStreamを生成する。 |
| Function | streamClose | void | streamClose(stream) | エラーを起こさずに、ストリームを閉じる。 |
| Function | javaByteArray | java.lang.Byte[] | javaByteArray(len) | 指定した長さのJavaのByteクラスの配列を生成する。 |
| XML | ||||
| Function | XMLDocument | Node | XMLDocument(inp) | ファイルアドレスを基に、DOMを生成する。 URLでXMLリソースを指定する場合は、inStream関数で生成したストリームを引数にする必要がある。 |
| Function | XMLSource | javax.xml.transform.Source | XMLSource(inp) | ファイル、URL、DOMノードを基に、XMLソースを生成する。 |
| Function | XMLResult | javax.xml.transform.Result | XMLResult(out) | XML結果ツリーを生成する。 |
| Function | XSLTransform | void | XSLTransform(inp, style, out) | DOMまたはXMLファイルに、XSLTを適用し出力する。 スタイルはオプションで、入力と、出力の2つの引数のみでも動作する(現在はバグがあるため、スタイルが無い場合は、nullを渡す必要がある)。 |
| 環境 | ||||
| JavaArray | arguments | - | java.lang.String[] | コマンドライン引数。 |
| JavaArray | javax.script.argv | - | java.lang.String[] | コマンドライン引数。 |
| JavaObject | context | - | javax.script.ScriptContext | スクリプトコンテキストのインスタンス。 デフォルト出力、デフォルト入力、コンテキスト変数へのアクセスなどの手段を提供する。 |
| JavaObject | engine | - | javax.script.ScriptEngine | スクリプトエンジンのインスタンス。 スクリプトの評価、コンテキストの変更、エンジンファクトリの取得などの手段を提供する。 |
| JSAdapter | env | - | - | システム環境変数。PATHや、JAVA_HOMEなどの値。 |
| JSAdapter | sysProps | - | - | Javaシステムプロパティ。OS名、JVMのバージョン、ファイル区切り文字、ホームディレクトリのパスなどを持つ。 |
| プロセス | ||||
| Function | exec | void | exec(cmd) | システムコマンドを実行し、結果を表示する。 |
| Function | exit | void | exit(code) | スクリプトの実行を終了する。 |
| Function | quit | void | quit(code) | exitのエイリアス。 |
| 日付 | ||||
| Array | months | - | [object Array] | 月の名前の配列。"Jan"、"Feb"、"Mar"など。 |
| Function | date | void | date() | 現在の時刻を表示する。 |
| ユーティリティ | ||||
| JavaClass | File | - | [JavaClass java.io.File] | Fileクラスのショートカット。 |
| JavaPackage | javax | - | [JavaPackage javax] | javaxパッケージのショートカット。 |
| JavaPackage | org | - | [JavaPackage org] | orgパッケージのショートカット。 |
| Function | echo | void | echo(x) | 引数の一覧を表示する。 |
| Function | ip | void | ip(name) | ホスト名を基に、アドレス情報を取得する。 |
| Function | jlist | JSAdapter | jlist(list) | JavaのListを基に、JavaScriptのArrayに類似する簡易なラッパを生成する。 Arrayのメソッドの一部のみをラップする。 |
| Function | jmap | JSAdapter | jmap(map) | JavaのMapを基に、JavaScriptのObjectに類似する簡易なラッパを生成する。 |
| Function | JSInvoker | JSAdapter | JSInvoker(obj) | 詳細不明。 javax.script.Invocableと関連がある様子。 |
| Function | load | void | load(str) | 外部スクリプトをロードする。 呼び出し元とコンテキストが共有されるため、共通の変数および関数を利用できる。 |
| Function | void | print(str) | 文字列を表示する。 スクリプト実行コンテキストへ文字列を出力する。 | |
| Function | printf | java.io.PrintStream | printf(format, args) | 文字列を整形して表示する。 |
調査の際に利用した、ソース出力スクリプトは以下。
(function(){
var props = keys(this).sort(
function(a, b){
return compare(typeof(this[a]), typeof(this[b])) || compare(a, b);
});
for(var e, i = 0; e = props[i] ; i++){
print("/*");
print(" NAME : " + e );
print(" TYPE : " + typeof(this[e]) );
print(" STRING : " + Object.prototype.toString.apply(this[e]) );
var value = "" + this[e];
if( (/function/).test(value) ){
print("*/" + value );
} else {
print(" VALUE : " + value + "\n*/\n" );
}
}
function keys(obj) {
var rval = [];
for (var prop in obj)
rval.push(prop);
return rval;
}
function compare(a, b){
return (a == b) ? 0 :
(a < b) ? -1 : 1;
}
})()
上記を適当な名前のファイルに保存し、出力をJavaScriptファイルへリダイレクトすると、ビルトインオブジェクトのソースファイルを取得できる。
jrunscript -f printBuiltInObjects.js > buildInObjects.js
このソースファイルは、基本オブジェクトの使い方や、Javaとの接続サンプルとして読むこともでき大変参考になった。
今後、Javaのバージョンが上がりビルトインオブジェクトも改訂された場合も、上記スクリプトを実行することで変更を確認できる。