Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

はじめに 2 / 29

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

今日のお話 6 / 29

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

tubeplayRとは 8 / 29

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

機能的な不満 11 / 29

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

そんな機能はない 13 / 29

Slide 14

Slide 14 text

...でも、 14 / 29

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

新機能の実装 17 / 29

Slide 18

Slide 18 text

全体的な変更点 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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

v1.0への道 27 / 29

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

Enjoy! 29 / 29