Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
24
Help us understand the problem. What is going on with this article?
@uri

殺伐としたSlackのチャンネルにRの出力が!を実現する

More than 5 years have passed since last update.

AA略 ref) ようかんマンとは (ヨウカンマンとは) [単語記事] - ニコニコ大百科

Slackを使っているとソースコードと出力結果をチームのみんなと共有したいときがある。コピペでは面倒なのでなんとかできないかと模索していたところ(自分は何もしていなかった。チームメンバーががんばっていた)、{slackr}という良さ気なパッケージを見つけた。開発者は信頼と実績のBob Rudisさん。パッケージを使ってみた感想と使い方のメモ。

なお、当パッケージの紹介はすでにおなじみの「盆栽生活」に載っているが、どうも使い勝手がよくなかったとのことで詳しい解説が行われていない。他の方法について述べられているので、そちらも参考にしてほしい。

{slackr}はCRANにもあるが、開発が盛んなので開発版をGitHubからインストールしよう。

devtools::install_github("hrbrmstr/slackr")

私がこの記事を書いている段階でのバージョンは1.3.1.9000だ。

設定

READMEを読むと、ルートディレクトリに.slackrという設定ファイルを置けとある。Slackにコードを投稿するための設定用関数slackr_setup()は、既定値でこのファイルを読み込むようになっている。なお引数config_fileでファイルを指定することができる。別チームやチャンネルへの投稿を行う際にはslackr_setup()を使って設定を切り替えると良い。

.slackrには次の項目を記載する。用途に応じて不要な項目もあるが、基本的にこれらの項目は埋めていたほうが良い。それでは各項目とtokenの取得方法について説明する。

token: YOUR_INCOMING_WEBHOOK_TOKEN
channel: #general
username: slackr
incoming_webhook_url: https://YOUR_TEAM.slack.com/services/hooks/incoming-webhook?
api_token: YOUR_FULL_API_TOKEN
  • token: INCOMING_WEBHOOK... Slackのチャンネル名を右クリックすると表示される'Add a service integration...'のリンクのURL末端にあるhttps://hoge.slack.com/services/new?channel_id=XXXXXXXXXXXXXX部分
  • channel: 投稿先のチャンネル名。よく使うチャンネルを指定しておくと良い(ex. #general) )
  • username: 投稿するボットの名称。
  • incoming_webhook_url: まずはhttps://hoge.slack.com/services/newへアクセスし、Incoming WebHooksを有効にする。生成された'Webhook URL'が'incoming_webhook_url'となる。コピーして貼り付けると良い
  • api_token: API_TOKEN... https://api.slack.com/web に繋ぎ、AuthenticationのところでチームのTokenを取得する

投稿

まずは設定ファイルを読み込み、投稿の準備をすませる。上述のようなファイルを作成したら、

library(slackr)
slackr_setup()

を実行する。

slackr()関数あるいはslack_bot()関数が投稿の際に用いる関数となる。{slackr}の関数はそれぞれ引数で投稿するチャンネルなどの指定ができるので、slackr_setup()で読み込んだ設定と異なるチャンネルやusernameでの投稿時には引数の指定を忘れないように。

slackr(str(iris))

とすると、設定ファイルのチャンネルにこのように投稿される。

general\_\_\_Yokohama\_R\_Slack.png

また、複数の処理を渡すこともできる。

slackr(ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14), 
       trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69), 
       group <- gl(2, 10, 20, labels = c("Ctl","Trt")), 
       weight <- c(ctl, trt), 
       lm(weight ~ group))

日本語ぇ...

"こんにちは" %>% slackr()

general\_\_\_Yokohama\_R\_Slack.png

なんとなく予感していたが、日本語の扱いはやや苦手なようす。

プロット(画像)の投稿

現在描画しているplotを画像ファイルとして投稿する。

library(maps)
map("usa")
dev_slackr(channels = "#random") # このときの投稿はbotではなく、ユーザー本人のものとなる

ファイルを投稿する

slackr_upload(filename = "Rlogo.png")

ソースコードそのものや、画像ファイルをチャンネルに投稿する場合、slackr_upload()を利用する。filenameでファイルのパスを指定し、必要に応じてtitleinitial_commentを付ける。

その他の関数

  • slackr_users(): チームに参加しているメンバーのログイン情報などを返す
  • slackr_groups(): グループの情報を返す
  • text_slackr(): メッセージの投稿

作業する環境は一人だけど、もっとSlack使ってみたい。というわけでEnjoy!

宣伝

Rに関する最新の話題や、コアな内容、初心者からの疑問が盛りだくさんのSlackルームはこちら!

匿名知的集団ホクソエムらがあなたの問題を解決してくれるかも...。

ボタンを押してメールアドレスを入力して登録は完了です!

Slackのメールアドレスの管理的な意味でメールアドレスは支障のないものを登録するようお願いします。

参考

24
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
hoxom
Machine Learning and Data Analysis Company for Your Smiles :)

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
24
Help us understand the problem. What is going on with this article?