R教団の一員としてR言語布教ウイルスを作った話



内容はR言語で作ったwebアプリを作ってみても、社内にRユーザーがいないから使われなかったり、サーバーを立てようにも壁が多かったりしたときの苦し紛れの策をとるならこんな感じだろうな、と書いたものです。


#R教団とは

> R教団とは、社会にはびこる表計算ソフト教団と戦う戦士達の集団である。
> R教団員の役割は全社員にRを導入し、Rを第一言語とさせることである。
> 分析手順の残らない分析は廃止して、表計算ソフトでは扱えない大規模データ時代を乗り切るための道を皆に指し示そうとする集団。
> 教団員数は1人である。

#とある会社のワイ

ワイ「元旦から仕事かー。たーのしー。:innocent:」

機内モードON !
クローム ポチー !
スペースキー連打


![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275572/e63d4eaa-1756-a5bd-55bd-0dd1bd857d10.png)


上司「ワイくん、このデータ分析しといて」

ワイ「あぁ^～恐竜がぴょんぴょんするんじゃぁ^～」

上司「ワイくん？ついでにダッシュボード作っといて。」

![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275572/26f15018-f4c9-c62d-ebbf-14a494c82b9a.png)

ワイ「(はぁ・・・いい調子やったのに・・・)」

ワイ「上司さん。ワイCADは使えませんよ。ましてや車の内装デザインなんてセンスも・・・」

上司「ワイくん知らんの？分析のUIのことをダッシュボードっていうんやで。」

ワイ「:fearful: ・・・しってましたよ。ブンセキのウイですよね。しってます。関西流のかまかけですよ。」

上司「・・・。とりあえず頼んだよ(お前出身関西と違うだろ)」


#UIをつくる

ワイ「えーっと、分析のUIの作り方っと。ｯﾀｰﾝ」

> pythonならflask,Django、Rならshiny、C#で組んじゃう人もいる。

ワイ「なるほどなー。R最強やな！Rでshiny使う一択やろ！」


#a few years later...

ワイ「できました！」

上司「(ずいぶん長くかかったな)言語やパッケージは何使ったのか報告してよ」

ワイ「Rのシャイニーで作ったwebアプリです。」

上司「そのシャイニーとやらで作ったダッシュボードは他の人に見せる時どうするの？」

ワイ「サーバー立てたらみんなで見られます！クラウドでシャイニーサーバーとか契約できるみたいです。」

上司「んー、クラウドは申請が面倒だからなぁ。」

ワイ「じゃあオンプレで一台たてましょうか」

上司「んー、オンプレは費用と保守管理がなぁ」

ワイ「:innocent:」

上司「やっぱRって使いにくいね。**表計算ソフトでマクロ組んだほうが扱いやすいな**」

ワイ「:innocent::innocent:」

#表計算ソフト is god ??

ワイ「(あかん。このままでは会社がいつまでも**only表計算ソフト教**に侵食されたままや)」

ワイ「せや！**みんなに強制的にRをインストールさせたらええんやないか？**」

ワイ「Rを知らない人でもいつの間にかRが入ってて、Rで書いたスクリプトがいつの間にか動いてしまうようにしたらいいんや！ダッシュボードを欲しがっている人みんなにこっそりインストールしたろ！エミュレータとかも勝手にドライバとか裏でインストールしとるし、それと一緒一緒！」

ワイ「これは教団員として徳が積めるぞぉ^～～」

#Rの強制インストール

えっと、windowsはbatファイルでexeを起動できたな。
windowsやからデフォルトで入っているコマンドプロンプト「cmd.exe」を立ち上げて、コンソール上で、
たしかこう打ち込むんやったな

```powershell
cd %~dp0 
R.exe
```

これをテキストファイルに書き込んで、拡張をも.batに書き直して、
CRANからダウンロードしたRと同じフォルダにぶち込んで、
ダブルクリックで実行すると・・・Rのインストーラが起動したでぇ！

スクリプトをコマンドから動かすにはインストール時解答先のbinの中にあるRscript.exeを動かしたいんだよなぁ

![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275572/1029fbf0-1e36-9eb7-482a-8b6fcd67da4b.png)

これを.batファイルから動かすには、PCの根本的な環境変数にRscript.exeのあるフォルダpathを登録してやる必要があるな。

これもみんなに気づかれずにこっそり追加する必要があるんやで～。
コマンドプロンプトについて調べてみると・・・

```powershell
setx /M PATH "%PATH%;C:\R\bin"
```

これでpathを自動で追加できるんやな！

でも**インストール先が各自で違うとpath追加が厄介**やな。

C直下にインストールさせることを明示させとかなアカン。
ここはみんな気づくように事前指示を出したいから・・・


```powershell
echo MsgBox "インストール先を C:\R に変更してください。",vbInformation,"C直下にRフォルダを作成" > %TEMP%\msgbox.vbs & %TEMP%\msgbox.vbs

del /Q %TEMP%\msgbox.vbs
```

こうしたらメッセージボックスが出てくれるようやな。
なんや**vbsはUTF-8に対応していない**ようやな。
日本語が読み込めないんご。
**.batファイル自体の文字コードを保存時にANISに変更しといてやろ**
難しいことやない。
メモ帳アプリから保存の時に文字コードを指定してやればええんや。

![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275572/058a66a0-5a04-c954-efba-f65956de9e3b.png)

ほんで実行っと。


![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275572/25d43cf6-8b0c-9a10-c004-8e7ad3b1f958.png)

出た出た！これでみんな指示に従ってくれるやろ。

これだとRを既に入れている人は二重インストールになってまうな。
・・・
**まぁRユーザーなら何個Rが入っていても嬉しいやろし、既にインストールしてあってもええよな！**


とりあえずここまでで考えたスクリプトは、インストール用の名前をつけて一つのbatにまとめておくやで。
path追加ってことは設定の深いところに書き込むんやろし**管理者権限で**実行する必要があるんやろなぁ。

```powershell
@echo off
cd %~dp0 
echo MsgBox "インストール先を C:\R に変更してください。",vbInformation,"C直下にRフォルダを作成" > %TEMP%\msgbox.vbs & %TEMP%\msgbox.vbs
del /Q %TEMP%\msgbox.vbs
R.exe
setx /M PATH "%PATH%;C:\R\bin"
pause
```

#ダッシュボードの起動

これでコマンドプロンプト画面からRが起動するようになった。
次はshinyをみんなに起動させるための仕組みをつくるで～

まずRのスクリプトをコマンドプロンプトで動かすには、スクリプトのファイルpathの前にrscriptと指定してやるんや。
この辺りはpythonも一緒やな。
起動させるからテキトーにwake.batとして名前をつけておくか。


```powershell
rscript wake.r
pause
```

このwake.rって指定したファイルの中身はshinyを起動させるコマンドを打ち込むんや。

> ・入っていないライブラリーを自動インストールさせること。
> ・ミラーサイトの指定すらさせないこと
> ・シャイニーを起動させること
> ・シャイニーに関するスクリプトは適当に名付けた「dashboaRd」というフォルダから読み込むことにしよう

が必要や。つまりwake.rの中身はこんな感じやな。

```r
options(repos="https://cran.ism.ac.jp/")
if(require(shiny)==FALSE){install.packages("shiny");library(shiny)}
if(require(tidyverse)==FALSE){install.packages("tidyverse");library(tidyverse)}
if(require(ggplot2)==FALSE){install.packages("ggplot2");library(ggplot2)}
if(require(ggmap)==FALSE){install.packages("ggmap");library(ggmap)}

runApp("dashboaRd")
```

これで自動でパッケージインストールからshinyのwebアプリ起動まで行ってくれるやろ。

ほんでbatのあるフォルダに「dashboaRd」という名前のフォルダを作って、
dashboaRdフォルダ内にui.rとserver.rを作成するで。

まずはui.rからや

```r
shinyUI(navbarPage("happy new year",

    mainPanel(
      submitButton("Please come down God"),
              plotOutput("plot1")
            )))
            
```

次はserver.rの作成や。

```r
library(shiny)
library(ggplot2)
library(ggmap)

shinyServer(function(input, output) {

                                output$plot1 <- renderPlot({
                                ggimage(hadley)
                                })

})
```




#できた・・・

あとはwake.batを**管理者権限で**実行して・・・

![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275572/bfe4965e-4f0b-d863-5697-77c5cd1a4b4c.png)

このアドレスをブラウザに張り付けて・・・
(edgeは未対応らしい)

![111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275572/f37c5c0b-1c60-adb5-4be0-dd9ba26dbd26.png)


**これが神の御尊顔や!!**


最終的にフォルダ構成は以下のようになりました。

![008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275572/5e93c690-1eeb-6cde-3a75-dbc40cf5c50c.png)

#後日談

上司「ワイくんから送られてきたzipを解凍して、wakeup.batをたたいて、コマンドプロンプト画面に表示されたアドレスをブラウザにはりつけると・・・。おお、webアプリが見えた見えた！やるじゃないか。」

部長「お、ワイ君の上司さんRのショートカットがあるじゃないか！！R使いなんだね！これから分析が経営のキーになってくるから頼んだよ～」

上司「ハイ。分析大事ですよね。(Rってなんや？なんかワイくんがいっとったかもな&#x1f914;)」

上司「ワイくん、**あとでRについてちょっと教えてくれないか?**」

ワイ「やったぜ:sunglasses:(はい、もちろんです)」


#:pray:今年もRが繁栄しますように:pray: 

R言語流行らせコラ!

# 管理者権限で実行してくださいね。