Japan.R 2020でLT発表した内容のスライドです https://japanr.connpass.com/event/194867/
※ 資料は 2020-12-05 現在での内容となります。
tubeplayR v1.0への道Japan.R 2020kazutan(前田 和寛)2020-12-05
View Slide
はじめに2 / 29
はじめに自己紹介名前/アカウント前田和寛(Maeda Kazuhiro)@kazutanTwitterGitHubQiita, r-wakalang, etc...所属LINE Fukuoka株式会社開発センター - DataLabs - DataAnalysisチームマネージャー3 / 29
Rソーシャル本 #宇宙本 #犬四匹本はじめに4 / 29
はじめに担当業務LINEグループにあるデータを活用して様々な課題にアプローチサービス関連サービスの成長につながる分析施策の効果検証などオペレーション関連オペレーションの可視化オペレーションの効率化につながる分析など福岡で一緒にEnjoyしませんか?http://linefukuoka.blog.jp/archives/81637302_people_engineer_interview.htmlお気軽にご連絡ください5 / 29
今日のお話6 / 29
今日のお話概要私が開発/公開している tubeplayRパッケージのお話ですtuveplayRとは機能的な不満新機能の実装v1.0への道留意事項分析や業務に関する話はありません今回はRが大好きな一個人としてお話しますかなり駆け足です今日のスライドは公開した後に、Twitterに#japanrのハッシュタグをつけて流しますので、細かいところなどはあとでそちらを参照してください7 / 29
tubeplayRとは8 / 29
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
tubeplayRとは使用画面はこんな感じです:10 / 29
機能的な不満11 / 29
利用者からの声履歴についてYouTubeのプレイリストURLを利用して毎日同じURLを再生しているのですが、再生するたびにYouTubeを開いてはURLをコピーしてConsoleで実行しています。どうせなら、過去に再生したのを簡単に持ってくるようなのはできないものでしょうか?匿名希望(40代男性・福岡県)動画リストについていつもRで分析するときに利用しています。メドレー的な動画を気分によって再生したりするのですが、動画リストをストックして自由に再生できるようになりませんか?あと、そのストックしたのを他の人に共有するのを簡単にしたいです。P.N. ごぼう天うどん大好き12 / 29
そんな機能はない13 / 29
...でも、14 / 29
なければ作ればいい15 / 29
要件整理リプレイ(history)機能について以下の機能を実現する関数を実装すればOK1. 再生するたびに、その動画情報をどこかにストックさせる2. ストックしている再生履歴情報を呼び出せる3. 再生履歴にアクセスしてリプレイさせる4. 再生履歴を消去させるurlストック・共有(playlist)機能について以下の機能を実現する関数を実装すればOK1. 動画情報をまとめたものを作成/呼び出し/消去する2. 動画情報をまとめたものをtubeplayにセット(staged)する3. tubeplayにセットしたものを再生するいざ実装へ16 / 29
新機能の実装17 / 29
全体的な変更点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
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
history機能の実装(2)実装の内部的なものは時間の都合により省略historyの消去tp_clear_history()再生履歴をすべて消去引数なし、Undoなしhistoryから再生tp_replay(backto = 1, add_history = FALSE)再生履歴から再生backto =で遡る件数を指定。デフォルトは直前のを再生add_history =で履歴に残すかどうかを指定。デフォルトはFALSE20 / 29
history機能の活用例# 履歴 取得df_history tubeplayR tp_get_history()# 動画情報 抽出tube_infos df_history[c(1, 6),]# 確認knitr kable(tube_infos)title type url timestamp1【初音ミク】グリーンライツ・セレナーデ /Greenlights Serenade【オリジナルMV】 - YouTubesingle https://www.youtube.com/watch?v=XSLhsjepelI2020-12-0513:59:216 作業用BGM - YouTube playlisthttps://www.youtube.com/playlist?list=PLfBmEmueFr_T3q-rHpuXegBPmyM_IJOli2020-10-3019:36:1021 / 29
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
playlist機能の実装(2)playlistの確認(show)tp_get_plist(label = NULL, view = FALSE, print = FALSE,create_new = FALSE)保存しているplaylistにアクセスlabel = NULLで、plist全体にアクセス指定したい場合は文字列で与えればOKview = TRUEで対象をviewに送り、print = TRUEでリストの要約を出力オブジェクトに渡せば、返り値として対象のプレイリストを格納playlistの削除(remove)tp_remove_plist(plist_id = NULL, plist_label = NULL)保存しているplaylistを削除plist_idは通し番号、plist_labelはlabelによって指定23 / 29
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
playlistの活用例# history 持 tube_infos playlisttubeplayR 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
「とりあえず動いたからデプロイしようぜ」現在、devブランチでv0.1.4.9001で公開中でも…まだ「動作した」レベルなので、十分に作り込んでない実はヘルプ全く書いてないぶっちゃけExperimentalそもそもなんでここまで作り込むの?必要なの?でも、私のQOLは向上した26 / 29
v1.0への道27 / 29
Roadmapto v0.2エラー回避を書くヘルプを書くvignetteを書くパッケージのWebサイトを作るto v1.0R Consoleからのコマンドで「再生している動画をコントロール」できるようにする...多分できると思う28 / 29
Enjoy!29 / 29