LoginSignup
6
5

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-01-06

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

R教団とは

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

とある会社のワイ

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

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

01.png

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

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

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

02.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」を立ち上げて、コンソール上で、
たしかこう打ち込むんやったな

cd %~dp0 
R.exe

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

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

03.png

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

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

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

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

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

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

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

ほんで実行っと。

04.png

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

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

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

@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として名前をつけておくか。

rscript wake.r
pause

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

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

が必要や。つまりwake.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からや

shinyUI(navbarPage("happy new year",

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

次はserver.rの作成や。

library(shiny)
library(ggplot2)
library(ggmap)

shinyServer(function(input, output) {

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

})

できた・・・

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

10.png

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

111.png

これが神の御尊顔や!!

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

008.png

後日談

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

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

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

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

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

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

R言語流行らせコラ!

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

6
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5