チラシの裏の設計書

プログラム開発、データ分析からロボット作りまでものづくり全般を思うがままに書き連ねたブログ。

Shinyアプリを配布できるようにするよ

既出情報ではあるんですが、日本語情報があまりないので英語拒絶症の人(主に自分)のためにまとめておきます。

 

☆やりたいこと

R言語のWebアプリが作れるフレームワークShinyで作ったアプリをR言語環境がない人に配布したい。

 

☆やること

配布可能なR環境の「Rポータブル」と「ブラウザ」と「Shiny起動バッチ」をセットで渡してあげるとうまく動くよ、という内容。

R環境まるまる送ってるだけじゃん、という突っ込みはなしで。

難しい設定をせずにダブルクリックしたら使える、ということに価値があるのだ!(たぶん)

 

☆情報源

www.r-bloggers.com

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ポータブルのダウンロード

sourceforge.net

ダウンロードして解凍しておきます。

 

・ポータブルブラウザ準備

情報元の例では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画面が出てくれば成功です。

f:id:stkdev:20170212004312p:plain

いい感じに起動できました。