2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Java初心者】JRubyをJavaから呼び出す

Posted at

なぜこれが必要?

RubyをインストールできないPCでJavaはOKとなると、JRubyを使おうという選択肢が出てきます。ただ、起動するのに時間がかかる。

このため、以下のようなGUIを作ってJVM環境を作っておいて、Rubyスクリプトや、処理するためのデータを書き換えればいいのかなと思った。

今回は、このGUIの作り方は省略しますが、このJavaアプリからJRubyを呼び出し、スクリプトを実行させる方法だけやってみます。

image.png

必要なもの

  • JRuby本体 jruby-complete-9.4.3.0.jar を使いました
  • このサンプルでは log4j2を使用しています

GEM_HOMEは $HOME/JGEM にあることにしています。
このため、以下のような形で、事前に必要なRubyライブラリーを入れておきます
(ドキュメント生成を省略するため -N としています)

GEM_HOME=/home/XXXXX/JGEM java -jar jruby-complete-9.3.6.0.jar -S gem install ライブラリー名 -N

書いてみる

     /**
     * JRubyスクリプトをJavaから呼び出す
     *
     * @param inputData 処理するデータ(文字)
     * @param script Rubyスクリプト本体
     * @return 処理結果
     */
    String execRubyScript(String inputData, String script) {
        // 処理結果を格納
        String out;
        // JRuby
        ScriptingContainer jruby = new ScriptingContainer();
        // 処理したいデータを標準入力として入れる
        logger.debug("スクリプトに渡す文字列:" + inputData);
        if (!inputData.isEmpty()) {
            String[] stdin = new String[1];
            stdin[0] = inputData;
            jruby.setArgv(stdin);
        }
        // この一行がないと二度目の実行に影響が出た
        jruby.terminate();

        // GEM_HOMEの場所を指定
        String gemHome = System.getProperty("user.home") + File.separator + "JGEM";
        jruby.callMethod(jruby.runScriptlet("Gem"), "use_paths", gemHome, gemHome);

        // スクリプトの実行
        try {
            Object runScriptlet = jruby.runScriptlet(script.strip());
            out = runScriptlet.toString();
            logger.debug("スクリプト実行結果:" + out);
        } catch (Exception e) {
            logger.debug("スクリプト実行失敗:" + e.getMessage());
            out = e.getMessage();
        }
        return out;
    }

追記

Rubyスクリプトに変数を渡す方法は、標準入力を使う方法以外もあると思います。

https://tyfkda.github.io/blog/2015/03/08/jruby-from-java.html
こちらのサイトを参考にさせていただきました。ありがとうございました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?