Rのコードを決まった時間に自動的に実行する


この記事では、Rのプログラムを、RStudioなどを立ち上げることなく、バッチファイルを使って自動で実行する方法を解説します。

## Rのコードを自動実行したい
- 自分がPCを使ってない時間にプログラムを実行したい。
- 毎日何度も同じプログラムを実行したい。
- 実行したいプログラムが大量にある。

実務でRを使っている人であれば、こうしたRの使い方をしたいという要望が強いのではないかと思います。でもそれはそんなに難しいことではなく、Windows環境だとちょっと設定をすれば毎日決まった時間に同じRのコードを実行できるようになります。

私自身もこの方法を使って自分の分析業務のために1日100回以上Rコードを実行しており、気が付いたら業務に必要なデータが出来上がっているという状態です。

以下で、Rの自動実行の設定について手順をまとめます。

## 設定の流れ
この記事では、以下の通りの手順でRを自動実行できるように設定します。

1. 環境変数の設定
2. 実行したいコードが書かれたRファイルの準備
3. Rを実行するためのバッチファイルの準備
4. タスクスケジューラで自動実行の設定

## Step 1 - 環境変数の設定
自動でRを実行するためには、Rがインストールされている場所をコンピュータに教えておいてあげる必要があります。これが環境変数の設定です。

まず、左下の検索ボックスで　"システム環境変数の設定"　を検索してください。
![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1827740/b9d29800-040f-7b8c-0554-d91992226846.jpeg)

結果をクリックすると下のような[システムのプロパティ]が表示されますので、"環境変数" のボタンを押してください。

![システムのプロパティ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1827740/b7d16da8-9ac8-e0af-72c7-0714c64937f8.jpeg)

環境変数の一覧が表示されるので、ユーザ環境変数の中から"Path" を選んで"編集"ボタンを押します。

下のような画面が出てくるので、"新規" ボタンを押して、Rがインストールされている場所を登録しておきましょう。私のRはProgram Filesにインストールした 4.1.1 の64bitのRを使うのでこの画像の通り設定しておきます。

![tempsnip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1827740/927f32c6-28d1-407c-99dc-594bc0f60394.png)


OKを押して閉じると、環境変数の設定は完了です。
Rのバージョンを変更するときは、この環境変数を書き換えましょう。

## Step 2 実行したいコードが書かれたRファイルの準備

Rのコードを実行したいのだから、Rのコードを準備するのは当然なのですが、一つ注意点があります。コードの中でsetwd()関数を使って作業ディレクトリを指定しておきましょう。しておかないと、どこかデフォルトのフォルダで実行されちゃいます。

なお、フォルダの区切りは \ ではなく/ なので注意しましょう。

今回実行するコードは次のようなコードです。

```r
setwd("D:/Dropbox/データ分析/test")
library(tidyverse)
print("testです。")
A <- matrix(rnorm(100),ncol = 2)
write.csv(A,"rand_matrix.csv")
```
サンプルなのでなんでもいいんですが、今回は適当に何かライブラリを読み込んでみて、さらにコードが実行されたことがわかるようにcsvの出力もするコードにしてみましょう。

## Step 3 Rを実行するためのバッチファイルの準備

次に、バッチファイルにRファイルを実行するコマンドを書きましょう。
"D:\Dropbox\データ分析\test\test.r" にあるRファイルを実行したいとすると、下のようになります。これだけ知っておけばいいと思います。私もこれしか知りません。

```
rem これはコメントです。以下のRファイルを実行します。
Rscript D:\Dropbox\データ分析\test\test.r

rem 10秒待機するコマンド。実行の確認などに。
timeout /t 10

rem 実行が終わった後コマンドプロンプトを閉じないコマンドは　cmd /k です。
rem cmd /k
```
rem はコメントアウトです。
メモ帳に上記のコマンドを書いて、拡張子をtxtではなくcmdにして名前を付けて保存しましょう。

![bat.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1827740/44684e7f-51e8-9d96-8b70-233fe77f4117.jpeg)

文字コードを指定できるので実行時に文字化けしないものを選んでください。
![jikko.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1827740/c50fcc61-89d9-ba7b-9c7a-378f3d638eef.jpeg)

## Step 3-2 実行してみましょう

作ったcmd ファイルをダブルクリックしてうまく実行できるか確認してみましょう。ここまでうまくできていれば、コマンドプロンプトが立ち上がって、コードが実行されるはずです。cmd ファイルの文字コードがよくないとここで、文字化けが起こります。

![prompt1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1827740/27d2fea4-d02f-cc9a-c703-342f92eaa80b.jpeg)

setwdで指定したディレクトリを見に行くと、無事にcsvが出力されたことが確認できます。
![kekka.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1827740/65318ce3-f734-1bc4-64fe-4bf3d7d7a595.jpeg)

どうでしょうか。ここまでできれば、RStudioを立ち上げなくても実行したいRのコードをダブルクリックで実行できますね。

最後に、このダブルクリックを、タスクスケジューラで実行できるようにしましょう。

## Step 4 タスクスケジューラの設定

左下の検索ボックスからタスクスケジューラを検索し、タスクスケジューラを立ち上げたうえで、"タスクの作成" の操作を選びます。
![tasks.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1827740/2472907e-6534-2511-fbce-b88dd1620a6a.jpeg)

[全般]、[トリガー]、[操作]の3つのタブで設定が必要です。
［操作］では先ほど作成したcmdファイルを指定してください。
![sosa.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1827740/50eefd8f-9f4f-1a2b-163b-011fd08b7dd9.jpeg)

［トリガー］はスケジュールです。例えば平日の朝7時に実行したい場合は↓のように設定します。
![toriga.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1827740/d462639f-a727-450c-ca66-3246710d0558.jpeg)

［全般］には、タスクの名前を付ければOKです。わかりやすいものにしましょう。

以上で設定は終わりです。

## おわりに

いかがでしょうか。一度環境変数などを設定しておけば2回目からは5分程度でスケジュール設定までできると思います。

データサイエンティストだけでなく、普通のサラリーマンとっても、データ操作をかなり便利に行うツールとしてRは有用です。一度プログラムを作ったら、2回目からの実行は完全に自動化して、業務の効率化につなげていきましょう。

終わり。