share facebook facebook twitter menu hatena pocket slack

2019.07.17 WED

RubyからJavaScriptのコードを実行する方法(ExecJS + mini_racer)

木檜 和明

WRITTEN BY 木檜 和明

Rubyスクリプトの中からJavaScriptのコードを実行するにはいくつかの方法があるが、ここではExecJSを使った手順を示す。実行環境のOSはUbuntu 18.04とする。

ExecJSは複数のJavaScriptランタイムを利用できるが、ここではmini_racerを使うものとする。(macOS環境であれば最初からインストールされているJavaScriptCoreが使える)

まず両者をインストールする。

$ sudo gem install execjs
:
Successfully installed execjs-2.7.0
:

$ sudo gem install mini_racer
:
Successfully installed libv8-7.3.492.27.1-x86_64-linux
:
Successfully installed mini_racer-0.2.6
:

使い方としてはexecjsをrequireするだけで、使用するJavaScriptランタイムはExecJSが自動検知(autodetect)する。

require "execjs"

メソッドとしては以下の3種類が用意されている。

⦿ exec: コード実行(戻り値なし)
⦿eval: コード実行(戻り値あり)
⦿compile & add: 関数実行(引数渡し)
それぞれ実例を示す。
⦿コード実行(戻り値なし)

puts ExecJS.exec("1 + 1")
=> (nil)

⦿コード実行(戻り値あり)

puts ExecJS.eval("2 + 2")
=> 4

⦿関数実行

js = ExecJS.compile("function add() { return 3 + 3 }")
puts js.call("add")
=> 6

⦿関数実行(引数渡し)

js = ExecJS.compile("function add(a, b) { return a + b }")
puts js.call("add", 4, 4)
=> 8

⦿関数実行(外部ファイル読み込み)
(JavaScript) … hello.js

function add(a, b) {
  return a + b;
} 

(Ruby)

js = ExecJS.compile(File.read("hello.js"))
puts js.call("add", 5, 5)
=> 10

元記事はこちら

RubyからJavaScriptのコードを実行する方法(ExecJS + mini_racer)

木檜 和明

木檜 和明

遠くのクラウドと手元のIoTデバイス、両エッジをつないだものづくりがしたいと妄想中。Arduinoのコミュニテイやってます。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。