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