GeekFactory

int128.hatenablog.com

Rhinoを使って簡単に本番環境の挙動を確認する

開発環境ではうまく動くのになぜか本番環境で動かないとか、本番環境での挙動が分からんといったとき、いちいち本番環境にテストコードをデプロイして確認するのは面倒ではありませんか?Rhinoを利用して動的にコードを実行するツールを使うと、本番環境での挙動を簡単に確認できます。

基本的な仕組みは、WebページからPOSTされたJavaScriptRhinoで実行するだけです。

import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;

// リクエストを処理する部分
String js = param("js");
Context context = Context.enter();
Scriptable scope = context.initStandardObjects();
String result = Context.toString(context.evaluateString(scope, js, null, 1, null));
Context.exit();

続きはGistで

https://gist.github.com/1467965
<h1>JavaScript Evaluator</h1>
<p>On the fly JavaScript evaluator.</p>
<form action="/admin/evaluateJavaScript" method="post" id="evaluator">
<h2>Code</h2>
<p><textarea name="js" id="js"></textarea></p>
<p><button>Evaluate</button></p>
</form>
<h2>Evaluation Result</h2>
<p><textarea id="result"></textarea></p>

詳しくは↓の画面でHTMLソースを参照

http://lab.hidetake.org/javascript-evaluator/

上記のソースコードは App Engine, Slim3, jQuery に依存していますが、他の環境でもちょっと手直しすれば動きます。あ、上記のデモページではセキュリティ上の理由でコードを実行できないようにしています。

例えば、カレントディレクトリの一覧は何が見えるのかなと気になったらこのコード。

java.util.Arrays.asList(new java.io.File('./').listFiles())

デフォルト文字セットは何だっけと気になったらこのコード。

java.nio.charset.Charset.defaultCharset()

RhinoJavaクラスにアクセスする方法はぐぐるとたくさん出てくるので、気になる方は調べてみてください。

このツールは誰でもアクセスできると極めて危険なので、管理者だけアクセスできるよう制限してください。上手く使えば機動力の高いツールになります。