Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Rに管理されてみる

 Rに管理されてみる

Tokyo.R #100でのプレゼン資料です。
イベントURL: https://tokyor.connpass.com/event/253867/

154699a2e3d8b497494a5ee118f211a5?s=128

Kazuhiro Maeda

July 23, 2022
Tweet

More Decks by Kazuhiro Maeda

Other Decks in Programming

Transcript

  1. Rに管理されてみる Tokyo.R #100 kazutan(前田 和寛) 2022-07-23

  2. はじめに 2 / 27

  3. はじめに 自己紹介 名前/アカウント 前田和寛(Maeda Kazuhiro) @kazutan Twitter GitHub Qiita, r-wakalang,

    etc... 3 / 27
  4. はじめに 書籍 4 / 27

  5. はじめに 所属 LINE Fukuoka株式会社 Data Scientist DataLabs Data Science Team

    - Manager Data Engineering & Solution Team - Manager LINE株式会社 CDO Office 5 / 27
  6. Task Management 6 / 27

  7. Task Management タスクを管理/運用して業務を遂行できるようにすること 私が大切にしていること タスクはかならずticket/cardにする 小さくても、終わった後でも必ずする Close/Goal基準を明確化すること 1 ticketに1つのClose/Goal基準 進行状況を確認できること

    管理できなくなる 作業ログを残せること 後にtask-framework structuringで必要 ...結局は基本的なことが大事 7 / 27
  8. Task Management Task Managementは”めんどくさい” なので、いろいろなツールがある JIRA Trello Confluence (!?) Slack(!?!?)

    Excel(!?!!?!!?!?!?!?!?!?!) etc… 私は複数のプロジェクトにassign プロジェクトでツールが異なる めんどくさい 自分用にTrelloを使う(2021/04~) 8 / 27
  9. Task Management Trello Kanbanスタイルのタスク管理ツール 詳細は公式サイトを参照 https://trello.com/ 9 / 27

  10. Task Management Trelloのめんどうなところ アーカイブが使いづらい 検索しづらい 削除がしづらい Archived -> removeしかできない Reportが弱い

    Textベース 分析できない 業務の傾向などが分析できない ...よろしい、ならばRだ 10 / 27
  11. Trello with R 11 / 27

  12. TrelloにはREST APIが提供されている https://developer.atlassian.com/cloud/trello/rest/ Trelloのほぼ全ての要素が扱えそう 各種APIについては今回の発表で は省略 ドキュメントがしっかりしている key/tokenがあれば利用可能 API Call制限などはそれぞれで確

    認してください 管理者により制限されている場合 があります APIがあるならRでできるじゃないか!! Trello with R Trello API 12 / 27
  13. Trello with R httrで叩いてみた key/tokenはkeyring パッケージを使って保持させてみた base_url , path あたりは雑に別途作成

    雑に叩いてみた first_api_call <- GET( url = base_url, add_headers(Accept = ""), add_headers(Accept = "application/json"), path = paste(me_path, "boards", sep = "/"), query = list( key = keyring::key_get("trello_api_key"), token = keyring::key_get("trello_api_token") ), verbose() ) うまくいった 13 / 27
  14. Trello with R いろいろ関数にしよう ほしいのは以下の通り 簡単に認証情報を保持できるもの(ベタ打ちしない) CURDの基本的な関数(低水準関数)はほしい 用途に合わせて使える関数(高水準関数)もほしい batch処理を仮想環境で実行しやすいようにしたい とりあえず作ってみよう

    使っているコードは以下のRepositoryにあります: https://github.com/kazutan/trelloR 14 / 27
  15. Trello with R key/token情報の保持 set_trello_auth_infos(force_update = FALSE) https://github.com/kazutan/trelloR/blob/master/R/api.R#L23-L56 認証情報はkeyring パッケージを利用することに

    対話的にkey/tokenをセットするのでRのログに残らない すでに登録してある場合、強制的にupdateしたい場合は引数で指定 check_trello_auth_infos(key = NULL, token = NULL, null_return = NULL) https://github.com/kazutan/trelloR/blob/master/R/api.R#L71-L107 認証情報がすでにあるかどうかをチェック すでにあるならそれを持ってくる 15 / 27
  16. Trello with R CRUD関数(低水準関数) - GET get_trello_api(base_url, path, verbose =

    FALSE, content = TRUE, query = list(), key = NULL, token = NULL) https://github.com/kazutan/trelloR/blob/master/R/api.R#L136-L166 base_url , path でAPIの行き先を指定 query でクエリパラメータを指定 verboseを出すかどうかを指定可能 content = TRUE で、outputに httr::content() を当てたものを返す key , token はNULL ならローカルのkeyringへ探しに行く batch処理をする場合は、ここにSecretで渡せばOK 16 / 27
  17. Trello with R CRUD関数(低水準関数) - PUT put_trello_api(base_url, path, verbose =

    FALSE, content = TRUE, query = list(), body = NULL, encode = c("multipart", "form", "json", "raw"), key = NULL, token = NULL) https://github.com/kazutan/trelloR/blob/master/R/api.R#L173-L206 get_trello_api() とほぼ一緒 body , encode については ?httr::PUT を参照 17 / 27
  18. Trello with R CRUD関数(低水準関数) - POST post_trello_api(base_url, path, verbose =

    FALSE, content = TRUE, query = list(), body = NULL, encode = c("multipart", "form", "json", "raw"), key = NULL, token = NULL) https://github.com/kazutan/trelloR/blob/master/R/api.R#L213-L246 put_trello_api() とほぼ一緒 18 / 27
  19. Trello with R CRUD関数(低水準関数) - DELETE delete_trello_api(base_url, path, verbose =

    TRUE, key = NULL, token = NULL) https://github.com/kazutan/trelloR/blob/master/R/api.R#L253-L275 get_trello_api() とほぼ一緒 ただし、verbose = TRUE をデフォルトに 19 / 27
  20. Trello with R 高水準関数 - メンバー情報取得 get_member_infos(base_url, member = "me",

    post_path = NULL, query = list(), verbose = FALSE, content = TRUE, key = NULL, token = NULL) https://github.com/kazutan/trelloR/blob/master/R/get.R#L13-L46 メンバー情報を取得する関数 member ユーザー名もしくはメンバーIDを指定 長さ2以上のベクトルで与えた場合、purrr::map でまとめて実行する me は自分自身を指定する意味となる post_path はさらに対象を指定するときに利用 詳細はTrello APIリファレンスを参照 20 / 27
  21. Trello with R 高水準関数 - ボード情報取得 get_board_infos(base_url, board_id, post_path =

    NULL, query = list(), verbose = FALSE, content = TRUE, key = NULL, token = NULL) https://github.com/kazutan/trelloR/blob/master/R/get.R#L56-L89 ボード情報を取得する関数 board_id ボードIDを指定 あとは get_member_infos() と同様 21 / 27
  22. Trello with R 高水準関数 - カード情報取得 get_card_infos(base_url, card_id, post_path =

    NULL, query = list(), verbose = FALSE, content = TRUE, key = NULL, token = NULL) https://github.com/kazutan/trelloR/blob/master/R/get.R#L99-L132 カード情報を取得する関数 card_id カードIDを指定 あとは get_member_infos() と同様 22 / 27
  23. Trello with R 高水準関数 - カード削除 remove_card(base_url, card_id, verbose =

    FALSE, key = NULL, token = NULL) https://github.com/kazutan/trelloR/blob/master/R/delete.R#L12-L40 カードを削除する関数 card_id カードIDを指定 23 / 27
  24. Trello with R 基本的な流れ 1. set_trello_auth_infos() でkey/tokenをセット 2. get_member_infos() でメンバー情報を取得

    1. そのメンバーが所有するboard_idがこの中に含まれる 3. get_board_infos() でボード情報を取得する 1. そのboardが保有するcard情報も持ってくる 2. Trelloのリストやカスタムフィールドのマスタもboardに入っている 3. post_path でlists やcustomFields を指定して実行すればOK 4. get_card_infos() で、カード内のコメントを取得 1. カードのコメントはcardの下にぶら下がっている 5. あとはよしなに整形 1. 結構しんどいので覚悟しとく これでTrello上のデータを取得できた!!!! 24 / 27
  25. Trello with R パッケージ化しないの? そのつもりだった 勢いで関数まで作ったけど、あとからパッケージを見つけた https://github.com/jchrom/trelloR しかも同名だった… ただ、設計コンセプトが違ったので、自分の関数をそのまま使ってる 私がおいてるRepositoryはインストールできるけど、推奨はしません

    自分好みの関数を作る、これもまたよし 25 / 27
  26. Data Science for me 26 / 27

  27. Data Science for me 以下は公開できない情報が多いので、説明のみでご了承ください Card検索ツール flexdashboard とShiny を利用 DT

    でカード一覧、クリックするとコメントを表示させる タスク可視化ダッシュボード flexdashboard 上でplotly などにより可視化 分析/予測 時系列予測を実施 起票からcloseするまでの堆積時間の分析 etc... Enjoy! 27 / 27