niszetの日記

アナログCMOS系雑用エンジニアが頑張る備忘録系日記

(R) RMarkdownのチャンクでnodeを動かす

探しても見つからなかったので書く。

R MarkdownのチャンクにPythonが使えるようになったことは有名?ですが、他にも様々な言語で使用できます。

bookdown.org

そのなかで、nodeが使えるわけですがこれについての記述が探しても見つからなかったで書いておきます。

-eオプションがついている

いわゆるワンライナーが走るような状態です。結果は'-e'オプションだと結果は返ってこないみたい。なので、nodeで何か処理をして外部ファイルに書き出してそれを使うみたいな方法が良いかな、と。何か設定できるかもしれないけど。

nodeへのパスが通っている必要。

当然ながら、チャンクの中身を実行するための各種ソフトウェアはあらかじめインストールされて使用できる状態になっていないといけません。node.jsならここから入手してインストールします。

Node.js

内部で使用しているライブラリがあればそれもnpm installでインストールします。コマンドが通る必要があるならばグローバル環境にインストールするように'-g'をつけた方が良さそうです。node.js自体を実行するのでこの場合はbrowserifyは不要。browserify もグローバルにインストールしておこう。よく使うし。

あとはまぁ普通に

```{node}
var mkpuml = require('./mkpuml.js');
mkpuml.run()
```

の形で書く。呼ばれる側はexportsしないといけない。適当なメソッドに充ててあげればよい。exports.run = function mkpuml(){}のように。

とりあえず使えることがわかったのでこれも技術同人誌に書いておこうと思う。

f:id:niszet:20180913010106p:plain

RMarkdown側から動的に制御するならV8使った方が良さそう。その場合はbrowserifyを使う必要があるのでまぁ環境構築面が不安になってきますね。

Enjoy!!