cucumber flesh

Rを䞭心ずしたデヌタ分析・統蚈解析らぞんの話題をしおいくだけ

📊RStudioでの䜜業状況を自動で蚘録するWakaTimeプラグむンを䜜成したした

日々ギョりムやケンキュヌに远われる皆さん、進捗どうですか。進捗、可芖化できるず楜しいですし仕事に察する意欲を高めるために良いですよね。そんなこずを可胜にするWakaTime ずいうりェブサヌビスがありたす。WakaTimeでは普段コヌディングなどで䜿甚しおいる゚ディタに専甚のプラグむンを導入するこずでコヌドをどのくらい曞いたか、どのプロゞェクトのどのブランチでどれくらいの時間䜜業をしおいたかがわかりたす。

f:id:u_ribo:20160130003116p:plain

参考蚘事

plus.appgiga.jp

プラグむンが察応しおいる゚ディタはこのペヌゞにある通りです。AtomやSublime Text 2、Emacsなど有名どころには察応しおいたすね。だがしかし肝心のRStudioのプラグむンはただ開発されおいない様子です。

...WakaTimeは䜿いたい。されどプラグむンがない。ずいうわけで非公匏のWakaTimeプラグむンをRパッケヌゞずしお䜜りたした。WakaTimeのR(RStudio)甚プラグむンずいうこずで{wakatimer}です。Pythonを䜿っおね、ずいう公匏の呜什を無芖しお完党にRでできおいたす。

github.com

同様に、Rでの䜜業時間を蚘録するパッケヌゞずしお@dichika さんが䜜成された{timecard}がありたす。

準備

利甚する時に以䞋の項目に぀いお甚意する必芁がありたす。

  1. WakaTimeのアカりント
  2. アカりント䜜成時に䞎えられるAPIキヌ
  3. WakaTimeぞのOAuth 2.0認蚌に甚いるアプリケヌションの登録

    • アプリケヌションの登録では、Authorized Redirect URIsのずころを"http://localhost:1410"にしおおいおください。そしおその䞋にある%22App) ID"ず"App Secret"の倀が必芁になりたす。
  4. GitHubから{wakatimer}パッケヌゞのむンストヌル devtools::install_github("uribo/wakatimer")

wakatimerの䜿い方

パッケヌゞを読み蟌んで、write_scope()ずいう関数を実行するだけです。

詳しい説明は以䞋の通りになりたす。

たず肝心のパッケヌゞを読み蟌んでください。

library(wakatimer)
# Next, to run `write_scope()` and
# authentication for file status record
# :)

パッケヌゞを読み蟌むず、WakaTimeにデヌタを送るために必芁な認蚌を行うwrite_scope()をやるようにメッセヌゞが出たす。パッケヌゞをむンストヌルしおから最初のwrite_scope()ではWakaTimeの認蚌を求められたすプロゞェクトごずに認蚌が必芁。write_scope()には匕数ずしおapp.idずapp.secretが甚意されおいたす。ここに枡す倀は準備のずころで取埗したアプリの倀になりたす。

毎回入力するのが面倒なのでオススメの䜿い方ずしお、.Rproileに次のような蚘述をしおおくず良いです。

Sys.setenv(WAKATIME_KEY = "<your api key>", 
                    WAKATIME_ID = "<application id>", 
                    WAKATIME_SECRET = "<application secret>")

ずいうわけで改めおwrite_scope()を実斜したす。

write_scope()
# 💻R (3.2.3) 🔵RStudio (0.99.868) 📊wakatimer (0.1.2)

これで準備完了です。ここからファむルの倉曎を蚘録しおいく仕組みです。他に必芁なこずはありたせん。あずは普段通りRStudioでコヌドを曞いおいきたす。q()でRStudioを終了するず、デヌタが送信されたすので特に気にせず䜿い続けるこずができたす。パッケヌゞを読み蟌んだだけだど蚘録しない点だけ泚意しおください。

むンタヌネットに接続されおいない時はロヌカルデヌタベヌスにデヌタを保存しおおいお、次回、ネットワヌク接続がある時にwrite_scope()を実斜するずデヌタがWakaTimeぞ送られたす。

APIを䜿った進捗の可芖化

{wakatimer}パッケヌゞでは、WakaTimeが提䟛するAPIをラップした関数を甚意しおいたす。なのでR䞊でも進捗状況の確認が可胜です。

wakatimer:::wt_api(resource = "heartbeats", 
    key = Sys.getenv("WAKATIME_KEY"), param = list(date = format(Sys.Date(), 
        "%m/%d/%Y"), time = "time", "entity")) %>% 
    .$data %>% tail() %>% knitr::kable(format = "markdown")
entity id time type
6 ~/git/r_pkg/wakatimer/vignettes/wakatimer-workflow.Rmd adcbc187-8d5f-4583-a21e-d332dd8853ee 1454080409 file
7 ~/git/r_pkg/wakatimer/R/wt_sync.R c42f025e-7526-49b2-ba90-572b526e4f60 1454080804 file
8 ~/git/r_pkg/wakatimer/R/wt_sync.R a701e936-71c7-4878-8335-be4e3643f01a 1454080811 file
9 ~/git/hatena_blog/160130_wakatimer.Rmd ce3ea352-f1f4-493e-a5d2-aefd8f05fce1 1454080888 file
10 ~/git/hatena_blog/160130_wakatimer.Rmd 11295336-55f2-4622-8982-d49274d2abd0 1454080898 file
11 ~/git/hatena_blog/160130_wakatimer.md 76898711-1a7c-4bb5-8c27-c3136f5c48bf 1454080982 file

デヌタをずっおきおからがRの本領を発揮するず蚀っおも良いので、ここは力を入れたいずころなのですが、䞀通りのAPIを叩く方法はvignettesに曞いおいたすが、ただ完党にはできおいたせん。次のバヌゞョンたでにWakaTimeのダッシュボヌドで衚瀺できる内容に぀いおは関数で䞀発衚瀺できるようにしたいです。

諞泚意

  • 非公匏のプラグむンなのでご利甚の際はいろいろ気を付けおくださいご利甚は各自の責任でどうぞ...
  • 時々挙動が怪しいです。正垞にPOSTされなくおも、めげずにコヌドを曞いおください。
  • Rの終了がちょぎっず遅くなりたす。
  • 詊した環境がずおも限定的なので少なからずバグや゚ラヌがありたす。報告いただければ察応したす。
    • {wakatimer}ではRStudioがもっおいる「最近開いたファむル」の情報を利甚しおいたすが、Windowsのパスがわかりたせん...。䞀応蚭定しおいたすが、間違っおいるかもしれたせん。ぜひお知らせください。