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

Rに管理されてみる

 Rに管理されてみる

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

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

    View Slide

  2. はじめに
    2 / 27

    View Slide

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

    View Slide

  4. はじめに
    書籍
    4 / 27

    View Slide

  5. はじめに
    所属
    LINE Fukuoka株式会社
    Data Scientist
    DataLabs
    Data Science Team - Manager
    Data Engineering & Solution Team - Manager
    LINE株式会社
    CDO Office
    5 / 27

    View Slide

  6. Task Management
    6 / 27

    View Slide

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

    View Slide

  8. Task Management
    Task Managementは”めんどくさい”
    なので、いろいろなツールがある
    JIRA
    Trello
    Confluence (!?)
    Slack(!?!?)
    Excel(!?!!?!!?!?!?!?!?!?!) etc…
    私は複数のプロジェクトにassign
    プロジェクトでツールが異なる
    めんどくさい
    自分用にTrelloを使う(2021/04~)
    8 / 27

    View Slide

  9. Task Management
    Trello
    Kanbanスタイルのタスク管理ツール
    詳細は公式サイトを参照 https://trello.com/
    9 / 27

    View Slide

  10. Task Management
    Trelloのめんどうなところ
    アーカイブが使いづらい
    検索しづらい
    削除がしづらい
    Archived -> removeしかできない
    Reportが弱い
    Textベース
    分析できない
    業務の傾向などが分析できない
    ...よろしい、ならばRだ
    10 / 27

    View Slide

  11. Trello with R
    11 / 27

    View Slide

  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

    View Slide

  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

    View Slide

  14. Trello with R
    いろいろ関数にしよう
    ほしいのは以下の通り
    簡単に認証情報を保持できるもの(ベタ打ちしない)
    CURDの基本的な関数(低水準関数)はほしい
    用途に合わせて使える関数(高水準関数)もほしい
    batch処理を仮想環境で実行しやすいようにしたい
    とりあえず作ってみよう
    使っているコードは以下のRepositoryにあります:

    https://github.com/kazutan/trelloR
    14 / 27

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  25. Trello with R
    パッケージ化しないの?
    そのつもりだった
    勢いで関数まで作ったけど、あとからパッケージを見つけた
    https://github.com/jchrom/trelloR
    しかも同名だった…
    ただ、設計コンセプトが違ったので、自分の関数をそのまま使ってる
    私がおいてるRepositoryはインストールできるけど、推奨はしません
    自分好みの関数を作る、これもまたよし
    25 / 27

    View Slide

  26. Data Science for me
    26 / 27

    View Slide

  27. Data Science for me
    以下は公開できない情報が多いので、説明のみでご了承ください
    Card検索ツール
    flexdashboard
    とShiny
    を利用
    DT
    でカード一覧、クリックするとコメントを表示させる
    タスク可視化ダッシュボード
    flexdashboard
    上でplotly
    などにより可視化
    分析/予測
    時系列予測を実施
    起票からcloseするまでの堆積時間の分析 etc...
    Enjoy!
    27 / 27

    View Slide