Shinyアプリを配布できるようにするよ
既出情報ではあるんですが、日本語情報があまりないので英語拒絶症の人(主に自分)のためにまとめておきます。
☆やりたいこと
R言語のWebアプリが作れるフレームワークShinyで作ったアプリをR言語環境がない人に配布したい。
☆やること
配布可能なR環境の「Rポータブル」と「ブラウザ」と「Shiny起動バッチ」をセットで渡してあげるとうまく動くよ、という内容。
R環境まるまる送ってるだけじゃん、という突っ込みはなしで。
難しい設定をせずにダブルクリックしたら使える、ということに価値があるのだ!(たぶん)
☆情報源
Tutorial: Packaging your Shiny App as an Windows desktop app
いわば、これらの素晴らしい情報の日本語訳なだけです。
☆手順
・各種リソースの配置
以下のスクリプトやファイルを任意のフォルダに配置します。
あとで使うのでlibrary置き場もメモしておきます。
App/
├ Shiny/
│ ├ ui.R
│ └ server.R
├ FirefoxPortable/
│ └ FirefoxPortable.exe
├ R-Portable
├ R-Portable.exe
└ App/
└ R-Portable/
└ library/
・Shinyアプリの作成
通常の開発環境でShinyアプリを作ります。
このとき、server.R側に一部追加します。
```R: server.R
shinyServer(function(input, output, session) {
session$onSessionEnded(function(){
stopApp()
q("no")
})
})
```
太字の部分を追加してRを終了させるコードを追加しておきましょう。
・ライブラリのコピー
Shiny実行に必要な以下のライブラリを上記のRポータブル内のlibraryフォルダにコピーします。
- shiny
- sourcetools
- htmltools
- R6
- xtable
- httpuv
- Rcpp
- jsonlite
- digest
- mime
・Rポータブルのダウンロード
ダウンロードして解凍しておきます。
・ポータブルブラウザ準備
情報元の例ではGoogle Chrome Portableを使っています。
ほかのブラウザでもできることを検証するために今回はMozilla Firefox, Portable Editionを使ってみます。
・Shiny起動スクリプト
Shinyをブラウザとポートを指定して起動します。
スクリプト自体はRで書きます。
```R: runShinyApp.R
.libPaths("./R-Portable/App/R-Portable/library")
# the path to portable firefox
browser.path = file.path(getwd(),"FirefoxPortable/FirefoxPortable.exe")
options(browser = browser.path)
shiny::runApp("./Shiny/",port=8888,launch.browser=TRUE)
```
・起動スクリプト
最後にShiny起動スクリプトをRポータブルで実行させる起動スクリプトを準備しましょう。
```VBS: run.vbs
Randomize
CreateObject("Wscript.Shell").Run "R-Portable\App\R-Portable\bin\R.exe CMD BATCH --vanilla --slave runShinyApp.R" & " " & RND & " ", 0, False
```
こちらも情報元のものをそのまま使わせていただきました。
・起動テスト
run.vbsをダブルクリックで、ブラウザが起動してShiny画面が出てくれば成功です。
いい感じに起動できました。