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

tubeplayR v1.0への道

tubeplayR v1.0への道

Japan.R 2020でLT発表した内容のスライドです
https://japanr.connpass.com/event/194867/

※ 資料は 2020-12-05 現在での内容となります。

Kazuhiro Maeda

December 05, 2020
Tweet

More Decks by Kazuhiro Maeda

Other Decks in Programming

Transcript

  1. tubeplayR v1.0への道
    Japan.R 2020
    kazutan(前田 和寛)
    2020-12-05

    View Slide

  2. はじめに
    2 / 29

    View Slide

  3. はじめに
    自己紹介
    名前/アカウント
    前田和寛(Maeda Kazuhiro)
    @kazutan
    Twitter
    GitHub
    Qiita, r-wakalang, etc...
    所属
    LINE Fukuoka株式会社
    開発センター - DataLabs - DataAnalysisチーム
    マネージャー
    3 / 29

    View Slide

  4. Rソーシャル本 #宇宙本 #犬四匹本
    はじめに
    4 / 29

    View Slide

  5. はじめに
    担当業務
    LINEグループにあるデータを活用して様々な課題にアプローチ
    サービス関連
    サービスの成長につながる分析
    施策の効果検証など
    オペレーション関連
    オペレーションの可視化
    オペレーションの効率化につながる分析など
    福岡で一緒にEnjoyしませんか?
    http://linefukuoka.blog.jp/archives/81637302_people_engineer_interview.html
    お気軽にご連絡ください
    5 / 29

    View Slide

  6. 今日のお話
    6 / 29

    View Slide

  7. 今日のお話
    概要
    私が開発/公開している tubeplayR
    パッケージのお話です
    tuveplayR
    とは
    機能的な不満
    新機能の実装
    v1.0への道
    留意事項
    分析や業務に関する話はありません
    今回はRが大好きな一個人としてお話します
    かなり駆け足です
    今日のスライドは公開した後に、Twitterに#japanr
    のハッシュタグをつけて流し
    ますので、細かいところなどはあとでそちらを参照してください
    7 / 29

    View Slide

  8. tubeplayRとは
    8 / 29

    View Slide

  9. tubeplayRとは
    概要
    RStudio上でYouTube動画を再生できるパッケージ
    Webinerを見ながらコーディング可能
    作業用BGMを楽しめる
    インストール
    remotes install_github("kazutan/tubeplayR") #安定版
    remotes install_github("kazutan/tubeplayR", "dev") #開発版
    使い方
    動画閲覧用URLをコピーしてくればOK(プレイリストにも対応)
    tubeplayR tubeplay("want/play/the/url")
    9 / 29

    View Slide

  10. tubeplayRとは
    使用画面はこんな感じです:
    10 / 29

    View Slide

  11. 機能的な不満
    11 / 29

    View Slide

  12. 利用者からの声
    履歴について
    YouTubeのプレイリストURLを利用して毎日同じURLを再生しているのです
    が、再生するたびにYouTubeを開いてはURLをコピーしてConsoleで実行して
    います。
    どうせなら、過去に再生したのを簡単に持ってくるようなのはできないものでし
    ょうか?
    匿名希望(40代男性・福岡県)
    動画リストについて
    いつもRで分析するときに利用しています。
    メドレー的な動画を気分によって再生したりするのですが、動画リストをストッ
    クして自由に再生できるようになりませんか?
    あと、そのストックしたのを他の人に共有するのを簡単にしたいです。
    P.N. ごぼう天うどん大好き
    12 / 29

    View Slide

  13. そんな機能はない
    13 / 29

    View Slide

  14. ...でも、
    14 / 29

    View Slide

  15. なければ
    作ればいい
    15 / 29

    View Slide

  16. 要件整理
    リプレイ(history)機能について
    以下の機能を実現する関数を実装すればOK
    1. 再生するたびに、その動画情報をどこかにストックさせる
    2. ストックしている再生履歴情報を呼び出せる
    3. 再生履歴にアクセスしてリプレイさせる
    4. 再生履歴を消去させる
    urlストック・共有(playlist)機能について
    以下の機能を実現する関数を実装すればOK
    1. 動画情報をまとめたものを作成/呼び出し/消去する
    2. 動画情報をまとめたものをtubeplayにセット(staged)する
    3. tubeplayにセットしたものを再生する
    いざ実装へ
    16 / 29

    View Slide

  17. 新機能の実装
    17 / 29

    View Slide

  18. 全体的な変更点
    user directoryについて
    historyもplaylistも情報をストックしなければならない
    そのユーザーのホームディレクトリに.Rtubeplay
    ディレクトリを作るように
    tubeplayRパッケージでデータを保存するときは、全てここに格納
    消去したいときはtp_clean_user_dir()
    (引数なし)でOK
    関数名について
    メイン関数であるtubeplay()
    はこれまで通り
    各種exportしている関数についてはtp_*
    で統一
    動画情報について
    title, type(single/playlist), url, timestampを取得
    この4つを動画情報として定義し、tube_info
    とした
    18 / 29

    View Slide

  19. history機能の実装(1)
    実装の内部的なものは時間の都合により省略
    tubeplay() の修正
    引数history = TRUE
    を追加
    再生すれば、historyがストックされるように
    historyの取得
    tp_get_history(view = FALSE, print = FALSE)
    再生履歴へアクセス
    オブジェクトに引き渡せば、tube_info
    形式の情報をdata.frameで格納可能
    view = TRUE
    でView()
    へ送る
    print = TRUE
    でprint()
    へ送る
    19 / 29

    View Slide

  20. history機能の実装(2)
    実装の内部的なものは時間の都合により省略
    historyの消去
    tp_clear_history()
    再生履歴をすべて消去
    引数なし、Undoなし
    historyから再生
    tp_replay(backto = 1, add_history = FALSE)
    再生履歴から再生
    backto =
    で遡る件数を指定。デフォルトは直前のを再生
    add_history =
    で履歴に残すかどうかを指定。デフォルトはFALSE
    20 / 29

    View Slide

  21. history機能の活用例
    # 履歴 取得
    df_history tubeplayR tp_get_history()
    # 動画情報 抽出
    tube_infos df_history[c(1, 6),]
    # 確認
    knitr kable(tube_infos)
    title type url timestamp
    1
    【初音ミク】グリーンライ
    ツ・セレナーデ /
    Greenlights Serenade【オ
    リジナルMV】 - YouTube
    single https://www.youtube.com/watch?
    v=XSLhsjepelI
    2020-12-05
    13:59:21
    6 作業用BGM - YouTube playlist
    https://www.youtube.com/playlist?
    list=PLfBmEmueFr_T3q-
    rHpuXegBPmyM_IJOli
    2020-10-30
    19:36:10
    21 / 29

    View Slide

  22. playlist機能の実装(1)
    新規playlist(plist
    )の作成
    tp_create_new_plist(urls = NULL, tube_infos = NULL, label)
    与えたYouTube urlsまたはtube_info
    のオブジェクトからplaylist(plist
    )を作成し
    て保存
    urls
    にはurlの文字列ベクトルを受け付ける
    tube_infos
    にはhistoryなどから抽出したtube_info
    オブジェクトを受け付け

    urls
    とtube_infos
    の両方を与えると、両方をbind_rowsして一つにする
    label
    はそのplaylistの名前を指定
    プレイリストは複数作成可能
    内部的にはプレイリストのtube_info
    形式のdata.frameをリストとして保持
    この関数はあくまで作成と保存
    プレイリストの呼び出し(staged)は別の関数で準備
    22 / 29

    View Slide

  23. playlist機能の実装(2)
    playlistの確認(show)
    tp_get_plist(label = NULL, view = FALSE, print = FALSE,
    create_new = FALSE)
    保存しているplaylistにアクセス
    label = NULL
    で、plist全体にアクセス
    指定したい場合は文字列で与えればOK
    view = TRUE
    で対象をviewに送り、print = TRUE
    でリストの要約を出力
    オブジェクトに渡せば、返り値として対象のプレイリストを格納
    playlistの削除(remove)
    tp_remove_plist(plist_id = NULL, plist_label = NULL)
    保存しているplaylistを削除
    plist_id
    は通し番号、plist_label
    はlabelによって指定
    23 / 29

    View Slide

  24. playlist機能の実装(3)
    playlistの呼び出し(staged)
    tp_start_plist(plist_id = NULL, plist_label = NULL, shuffle = FALSE)
    plist_id
    またはplist_label
    で指定したプレイリストを呼び出す(staged)
    plist_id
    は通し番号、plist_label
    は付与したlabelによって指定
    呼び出しているplaylistの確認(get)、動画を再生(next)
    tp_get_staged_plist(view = FALSE, print = FALSE)
    tp_next_plist(skip = 1)
    tp_get_staged_plist
    は、呼び出しているプレイリストへアクセス
    view
    , print
    、および引数は他のget系と同じ
    tp_next_plist
    は、呼び出しているプレイリストから再生
    skip = 1
    で次のを再生
    再生された動画はstagedからはdropされる
    24 / 29

    View Slide

  25. playlistの活用例
    # history 持 tube_infos playlist
    tubeplayR tp_create_new_plist(tube_infos = tube_infos,
    label = "kosaki")
    # 作成 playlist 呼 出
    tubeplayR tp_start_plist(plist_label = "kosaki")
    # 呼 出 plist 次 動画 再生
    tubeplayR tp_next_plist()
    # playlist
    # csv 適切 形 export可能
    kosaki tubeplayR tp_get_plist(label = "kosaki")
    # 作 playlist 削除
    tubeplayR tp_remove_plist(plist_label = "kosaki")
    25 / 29

    View Slide

  26. 「とりあえず動いたからデプロイしよう
    ぜ」
    現在、devブランチでv0.1.4.9001
    で公開中
    でも…
    まだ「動作した」レベルなので、十分に作り込んでない
    実はヘルプ全く書いてない
    ぶっちゃけExperimental
    そもそもなんでここまで作り込むの?必要なの?
    でも、私のQOLは向上した
    26 / 29

    View Slide

  27. v1.0への道
    27 / 29

    View Slide

  28. Roadmap
    to v0.2
    エラー回避を書く
    ヘルプを書く
    vignetteを書く
    パッケージのWebサイトを作る
    to v1.0
    R Consoleからのコマンドで
    「再生している動画をコントロール」
    できるようにする
    ...多分できると思う
    28 / 29

    View Slide

  29. Enjoy!
    29 / 29

    View Slide