YouTube上でノートが取れるChrome拡張機能を作った

YouTubeでメモ・ノートが取れるアプリ「YtNote  by YuipApps」、ブラウザ拡張機能・Chrome拡張機能を紹介します。

## 概要  

こんにちは＆はじめまして。YuipAppsです。YouTubeなどの動画サイトで使えるノートテイキングアプリ、YtNoteをベータリリースしました。Chrome、Firefoxはもちろん、iPhone、Androidでも動作します。

YtNoteをダウンロード → ~~（近日更新）~~ [Quick Start](https://github.com/yuis-ice/ytnote#quick-start)
YtNoteの詳細 → ~~（近日更新）~~ [ytnote: A note taking app for YouTube and many more. Fully works on Chrome, Firefox, Safari. Built on React.js.](https://github.com/yuis-ice/ytnote)

<br>

<iframe width="560" height="315" src="https://www.youtube.com/embed/LgTR5WK2YF4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

<br>
<br>

今回のアプリ、YtNoteは、Reactでプログラミングを行いました。ぜひ使ってみてくださいね。

メインのインターフェイスはこんな感じ。

![vlcsnap-2022-04-19-10h09m25s980.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/170548/343ffdc4-0685-fe7a-6bb6-ec25f61afa75.png)

再生位置にジャンプする、メモを取る、動画の画面キャプチャー画像を取る、などの機能が使えます。
まだベータ版なので、これから機能は増えるかもしれません。

![vlcsnap-2022-04-19-10h02m36s052.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/170548/665d73b8-a453-9433-d719-b8e560469ef4.png)

ノート機能では、マークダウン記法が使えます。
ノートのマークダウンはリアルタイムで表示、保存されます。

![vlcsnap-2022-04-19-10h03m46s280.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/170548/699436cd-b4c7-d2a7-3d4a-d7ad63908200.png)

コードタグも使えますよ。ハイライト付きです（ドヤァ）

![vlcsnap-2022-04-19-10h03m59s360.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/170548/2e7dc30a-19ef-5cc6-99cd-979eaccd9eec.png)

リンクタグも使えます。

![vlcsnap-2022-04-19-10h04m18s069.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/170548/0b9e586e-7373-fea6-0bbf-9e4830c5e815.png)

スタイルシートも設定できますよ。

![vlcsnap-2022-04-19-10h04m37s593.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/170548/f47582dd-4abe-708a-5bcf-dc783bd7c1ab.png)

インターフェイスはマウスでドラッグできちゃいます。

![vlcsnap-2022-04-19-10h04m56s960.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/170548/62d42860-5e27-78e5-ef2b-19828ef8422f.png)

インターフェイスの表示の切り替えは画面右下のアイコンをクリックで可能です。

蛇足ですがデバッグ情報も見れます。保存されているデータが見れますよ。

![vlcsnap-2022-04-19-10h05m05s350.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/170548/35888a8d-45e0-6893-d88c-6fc7a199505e.png)

最後に、インポート、エクスポート機能です。
データをバックアップしたい場合や他のブラウザに移動やコピーしたい場合などにも使えますよ。

![vlcsnap-2022-04-19-10h05m16s946.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/170548/144be96e-c18e-32bf-55fc-51aac1378ca1.png)

以上です。ダウンロード、もっと詳しい情報、更新情報については、上記リンクの動画先にて、動画説明欄にて随時更新します。

## 経緯

YouTubeでのノートテイキングでは私は以前[Yinote](https://chrome.google.com/webstore/detail/yinote/fhpgggnmdlmekfdpkdgeiccfkignhkdf?hl=en)という拡張機能を使っていました。

ただこれは問題が何点かあり、特にクリティカルヒットしたのは直近数ヶ月のYouTubeのインターフェイスの変更による拡張機能の動作不具合です。これにより、利用がまず困難となってしまいました。Githubにissueもありますが、残念ながら対応の様子が見られない状況です。

- 他にも、プレーンテキストであり、マークダウンではない
- テキストなしでタイムスタンプのみのノート作成ができない
- YouTubeの動画停止、動画再生で都度マウスでフォーカスする必要がある
- 何より、テキスト機能のみでスナップショット画像撮影の機能がない

といった理由で、もう個人開発で自作したほうが早い説を提唱することとなりました。

## Tech Stack

- React.js 
  - reduxjs
  - styled-components
  - react-transition-group
  - react-tabs
  - react-syntax-highlighter
  - react-markdown
  - react-draggable
  - react-ace
- html2canvas
- lodash
- axios 
- momentjs
- Chrome Extensions API
  - chrome.storage
  - chrome.tabs
 
### デバッグ・開発

- webpack 
  - webpack-dev-server
  - react-hot-loader
  - babel
  - sass
  - compiler.hooks.afterEmit
- expressjs
  - ws
- vscode 
  - chrome attach
  - sourceMaps

## 仕組み 

ボタンをクリックするとYouTubeのvideoタグから現在再生時間のデータを取得、html2canvasでvideoタグのHTMLデータをスクリーンショットしてdata URLを取得、stateに保存しReactでレンダリングします。

データの保存、同期にはchrome.storage.local APIを使っています。
Chrome拡張機能ではありますが、Chrome拡張機能のポップアップHTMLなどに依存していないので、インストールをしなくてもURLアドレスバーにjavascript:でコピペすれば実は使えます。その場合chrome.storageの代わりにlocalStorageを使えば、5MBまでの容量制限はありますが、スマホやタブレットでも使えます。


---

以上です。ありがとうございました。