初めに

ついにたどり着きました。Rのexe化。Rで分析ツールを作った際に、Rを使っていない人に共有する方法は、shiny appを作ってshinyapps.ioにアップロードしてウェブ経由で使ってもらうしかなかったと思います。しかしこの方法だと、ウェブ経由なのでクライアントのセキュリティポリシーに反する場合があったりと色々と問題があります。Rをexe化してスタンドアローンアプリ化してしまえば、この点が解決できます。

仕組み

node.jsのelectronを使ってshiny appを開きます。electronはwebブラウザーを内蔵しているので、shiny appを開けるということだと思います。色んなものを同梱しないといけないので、完成系は1GB近くになってしまいます。同梱されているmacとwinのR-portableのどちらかを削除すれば半分くらいの大きさになります。

経緯

元々、ローカルで動くデスクトップアプリの開発方法を模索していました。Rは初めからexe化無理だろうと思いこんでいました。pythonでexe化するにもpyinstallerのエラーに阻まれてできずにいましたし、また、tkinterの古臭いデザインが嫌でした。デスクトップアプリを開発するには、心機一転C#勉強するかjavascript + electronを勉強するかどちらかだと考えていました。データ分析のライブラリとしてtensorflowjsがあることは知っていたので、javascript(nodejs)で行こうと考えelectronを勉強し始めました。しかし、これはhtmlとcssとjavascriptを全部理解しないといけない苦行の始まりでした。その苦行中、electronで検索していたらRのshinyをelectronを連携させるgithub repositoryと出会うことができ、exe化できることを知りました。

https://github.com/COVAIL/electron-quick-start

covailという企業さんが公開しているみたいです。Rのexe化はphotonとelectricShineというパッケージでもできるようなのですが、photonではうまくいきませんでした。electricShineは試していません。photonはこのcovailという企業さんが公開しているものみたいです。

方法

概要

windowsで成功した場合のやり方を記載します。きっと、macでもできると思います。

  1. shiny appを1ファイルで作成する
  2. コマンドプロンプトから適当なフォルダ内で、gitコマンドを実行
    git clone https://github.com/COVAIL/electron-quick-start
  3. コマンドプロンプトからelectron-quick-startのフォルダに入り、npmコマンド2つを実行
    npm install electron-packager
    npm install
  4. コマンドプロンプトで、npmコマンドを実行。これでelectronが起動してサンプルのshiny appが開かれることを確認する。
    npm start
  5. 上記でうまく開くことができたら、サンプルのapp.Rを、自分のapp.Rファイルで置き換える。もし、自作app.Rで必要なCSVとかあれば同じフォルダに入れ、app.Rから相対パスでcsvにファイルにアクセスできるようにしておく。
  6. ファイルエクスプローラーから以下のファイルをダブルクリックで実行。Rのコマンドラインが現れる。
    “C:\Users\・・・\electron-quick-start\R-Portable-Win\bin\x64\Rgui.exe”
  7. Rのコマンドラインで
    .libPaths(.libPaths()[2]) を実行する
  8. Rのコマンドラインで、自分のshinyappに必要なRのパッケージをインストールする。
    install.packages(“shiny”)
    install.packages(“shinythemes”)
    install.packages(“shinyWidgets”)
    install.packages(“tidyverse”)
  9. コマンドプロンプトで、electron-quick-startのフォルダ内で以下のnpmコマンドを実行してexeを作成
    npm run package-win
  10. electron-quick-startフォルダ内にElectronShinyAppWindowsができそのフォルダ内にelectron-quick-start-win32-ia32ができその中にelectron-quick-start.exeができる。他人と共有する場合には、electron-quick-start-win32-ia32のフォルダごと共有する必要がある。
  11. 上記のフォルダは1GB近くある。減量したい場合は、C:\・・・\electron-quick-start-win32-ia32\resources\app の中の、R-Portable-Mac(約500MB)を削除する。

詳細説明

2.コマンドプロンプトから適当なフォルダ内で、gitコマンドを実行

gitを使える状態にしておかなければなりません。ない人はダウンロードしてください。
https://gitforwindows.org/

3.コマンドプロンプトからelectron-quick-startのフォルダに入り、npmコマンド2つを実行

node.js(javascript)の知識がすこし必要となります。

npmを使える状態にしておかなければなりません。つまりnode.jsをダウンロードする必要があります。
https://nodejs.org/ja/

npmを使ったことない人は、npmはpipのjavascript版だと思ってください。node.jsはjavascriptの1形態だと思ってください。

npm install electron-packager は、electron-packagerをインストールしますということです。nodejsダウンロードしたての人は、npmのパスがうまく通っていない可能性があり、その場合にはエラーがでると思います。npmのパスを設定してから戻ってきてください。

npm install は、フォルダ内にインストールすべきパッケージを記載したファイルがあるので、そのファイルに基づいて必要なパッケージを全部インストールしてくださいということです。

4. コマンドプロンプトで、npmコマンドを実行。これでelectronが起動してサンプルのshiny appが開かれることを確認する。

npm startは、node.jsにmain.js(パッケージelectronを使ったスクリプト)を実行するように命令しています。

ここで起動していないと、おかしいです。どこかのプロセスで失敗しています

7.Rのコマンドラインで.libPaths(.libPaths()[2]) を実行する

portableのRを起動しています。このportable-Rでパッケージをインストールしていきます。インストール先がデフォルトだと2か所あります。.libPaths()で確認することができます。1か所は階層が上のところで、2つ目はC:\Users\・・・\shiny_app_electron\electron-quick-start\R-Portable-Win\library にあります。この2つ目だけにします。そのために、.libPaths(.libPaths()[2])を実行してください。

exeファイルをダブルクリックすると、electron経由で開かれたshiny appが現れるでしょう!!感動しました。この記事を見ているあなたのshiny appも起動することを願っています!!

Categories:

category