読者です 読者をやめる 読者になる 読者になる

データ穴リストのブログ

文系へっぽこリサーチャーから穴リストへジョブチェンジ中。渋谷の片隅でニヤニヤしております。・・・動いたら、ね。

cronRで自動化にちゃれんじ

アイがなくてもエーねん*1

そもそも僕がRをちゃんと頑張ろうと決心したのは、世の中のエンジニア氏たちはみんな、 ぱそこん君と対話的だけでなく、パシリのようにこき使えていいな、という思いから始まりました。

やりたいこと、やらないといけないことはいっぱいあるのに、 - そろそろ月末だからアレださなきゃ! - …またこの季節か。。またあの人に頭下げて作業お願いしなきゃ。。 - 前回と同じでいいから、あのファイルはコピーぺして使おう

…とか、そういうの、ストレスでした。 考える時間が欲しい。 考えなくてよい手作業は極力やりたくない。 人に作業振ってもやれ今は他の仕事がだの、やれメンドくさいだの、そういう心のケアばかりにはいい加減付き合ってられない!

ということで、タスクスケジューラを使いたかったのです。

  • cronとは 世のエンジニア氏たちには今更ですね。 非エンジニアの僕と同じような皆さんにはコチラが分かったような分からないような気になってちょうどよろしいかと思います。

cronとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

で、crontabがどうとかbin/crontabとかetc/crontabとか色々書いてあるけど結局我々はどこに、どう書いたらパシられてくれるのか、それが知りたいのだよ。

そゆこと、前提のないヒト向けの資料はなかなかないですね。

書き方とかは書いてあるんだけどね。

  • cronRとは

そんな痒いところにもうちょっと届きそうで届かない、けどちょっと届くネット社会ですが、 cronRはじゃあなんなのかというと、

これらの2つのパッケージを使用すると、RプロセスをRから直接スケジュールすることができます。これは、基本的なLinux / Unixジョブスケジューリングユーティリティであるcronに直接コマンドを渡すか、Windowsのタスクスケジューラを使用して行います。パッケージはRのスクリプトは、非対話的に実行することができ、できることその事実を知らないRのユーザー始まるために開発された自動化を。

Scheduling R scripts and processes on Windows and Unix/LinuxChromeさんの翻訳のまま引用

相変わらずちょっとカタコトだけどそこは愛嬌ということで。 ちなみに「2つの」といってるのはまぁ書いてありますがWindowsの場合は別なタスクスケジューラというのがあるのでパッケージは別だよ、というだけですね。 今回はそっちはムシです。 もうWindowsでRstudioほとんどいじってないんだもの。

cronの設定、しなきゃしなきゃ…とは思ってたんだけど、腰が重くてなかなかたどり着かず状態だったので、Rstudio内でこの操作を完結できるのはとてつもなくありがたかったですね。 無論、ちゃんとしたLinuxユーザにはどうでもいいパッケージだというのはよく分かるけど。

あと、このパッケージはRstudioAddinもあって、今回初めてRstudioAddinを使ってみました。

  • 導入

スクショとか入れると親切でしょうけど面倒なのでいれません。

  • RstudioのAddinボタンをポチるのもいいけど、install.package("Addinslist")がステキ
  • Addinlistでアドイン一覧を眺める。
  • cronRをインストー

ちなみにAddinslistの紹介はこちら www.karada-good.net

…さあ!これで使えるのかな?と思ったら「ShinyFilesがないよ」とエラーが出る。 パッケージを入れようにもできない。

なんだこりゃ?と思っていたら、先の開発者さんのgithubを見たら、 どうやらアドインを使うには更に別のパッケージも必要だとか。 ということで下記を実行

install.packages('miniUI')
install.packages('shiny')
install.packages('shinyFiles')

これで準備が出来ました。

結論からいうと、Rスクリプトファイルが消えました。

  • 自動実行するスクリプトを選択して、
  • ジョブの名前を書いて、
  • ジョブのタイミングを設定して、
  • リポジトリだかってとこのパスを指定して

ポチッ!

としたら、同名の空のファイルの出来上がり。

ふぁ!?!?!?!?!?!?!?!?!?!?!?

どうしようどうしよう…

そういえばバックアップとか全然とってない…

git管理もしようと思ってたけど全然理解してない…

指定したスクリプトはかなり前に作って定期的にポチポチ実行していた 自分の中では割と重宝しているものだったので、頭真っ白。

ああ、イチからコード書き直さなきゃなのか…金曜の夜に…もうムリ… と思ったら、Dropboxさんが復元してくれた。…ギリギリセーフ。。。

なにがいけなかったって、 リポジトリのパスを設定する際に、元ファイルと同じ場所に指定なんかしたもんだから*2、 まっさらなファイルを上書き保存してくれたってだけだった。。。

というわけで、今一度上記の引用先*3の動画を見て、 リポジトリ用のディレクトリを作って、ようやく自動化できた。

あの時の衝撃をぼくはわすれない。

バックアップもそうだけど、まずテストスクリプトで試せよってね。

とにもかくにも、これでパソコン君をパシらせることが出来るようになりました。

さぁどんどんパシらせよう。

*1:AI、つまりインテリジェンスがなくたってA、AIだと人工的ってなるけどここではAutomationだったらいいんだよ、というユーモアです。それを説明するというね。

*2:結果のlogファイルが出来る場所くらいに思ってたので…

*3:http://www.bnosac.be/index.php/blog/64-scheduling-r-scripts-and-processes-on-windows-and-unix-linux