はじめに
こんにちは。BMI921です。
今回は、「YouTubeの視聴履歴(生き恥)をDiscordで共有して、友達との仲を深める」 という、少し変わったDiscord BotとChrome拡張機能を作ったので紹介します。
その名も IkihajiTube です。
🔗 リンク
- GitHub: https://github.com/bmi921/ikihaji-tube
- Chrome Web Store: IkihajiTube Client
開発の動機
みなさんは、友人がYouTubeで普段どんな動画を見ているか気になったことはありませんか?
あるいは、「この動画面白い!」と思ったものを共有したいけど、いちいちURLを貼るのは面倒...と思ったことは?
「自分の視聴履歴(生き恥)をさらけ出すことで、逆説的に友情が深まるのではないか?」
そんな仮説(?)のもと、視聴履歴を自動収集し、Discordサーバーに垂れ流すシステムを開発しました。
spotifyにコラボプレイリストという、複数人が聞いた曲をまとめてくれる機能があります。それがアイデアの本です。Youtubeのニッチな動画を共有できる機会が現実ではなく、残念だなと常々思ってました...
IkihajiTubeでできること
主な機能は以下の2点です。
- 複数人が視聴した動画の共有: サーバー内のメンバーで、同じ動画を見た人がいれば「これ、みんな見てるよ!」と通知します。共通の話題作りに最適です。
- ランダムな視聴履歴の共有: 誰かが視聴した動画をランダムにピックアップして晒します。意外な一面が見れるかもしれません。
Chrome拡張機能を入れるだけで、あとはバックグラウンドで自動的に履歴が収集・共有されます。
システム構成と技術スタック
今回の開発では、新しい技術の学習も兼ねてモダンな技術スタックを採用しました。
全体のアーキテクチャ
システムは大きく分けて3つのコンポーネントで構成されています。
- Chrome Extension: ユーザーのYouTube視聴履歴を収集するクライアント
- API Server (ElysiaJS): 視聴履歴を受け取り、DBに保存するサーバー
- Discord Bot: 蓄積されたデータから動画情報をDiscordに投稿するボット
技術スタック一覧
開発効率とパフォーマンスを意識し、ランタイムには Bun を採用しました。また、これらを一元管理するために Turborepo を導入しています。
| カテゴリ | 技術 | 選定理由・コメント |
|---|---|---|
| ランタイム | Bun | 起動が爆速で、開発体験が非常に良かったです。 |
| モノレポ管理 | Turborepo | API, Bot, Extensionを単一リポジトリで管理し、型定義(packages/core)を共有できるようにしました。 |
| API | ElysiaJS | Bun向けのWebフレームワーク。型安全性とパフォーマンス重視で採用。 |
| DB / ORM | PostgreSQL / Drizzle ORM | SQLライクに書けるDrizzleが最近のお気に入りです。 |
| 環境構築 | Docker / Dev Containers |
docker-compose up だけでDB等の環境が揃うようにしています。 |
技術的なこだわりポイント
1. Bun + ElysiaJS の開発体験
Bunの起動やビルドはNode.jsの数倍速く、待機時間がほぼない爆速な開発体験でした。特にElysiaJSはデフォルトでtRPCのようなEnd-to-Endの型安全性が備わっており、サーバーの変更が即座にクライアントの型補完に反映されるのが「えぐい」ほど快適でした。
2. Turborepoによるモノレポ構成
Turborepoを活用して、APIとChrome拡張で使う共通の型定義やエンティティをpackagesに切り出し、再利用性を極限まで高めました。リクエストの型などを共通化することで、一箇所の修正が全体に安全に反映される構成が作れて「超便利」でした。
3. Chrome拡張機能の自動収集
Chrome拡張機能がブラウザのバックグラウンドで動作し、youtube.comのドメインを検知して、クエリパラメータの?v=<video_id>をサーバーに送ります。視聴履歴を送るだけの簡単な仕組みですね!ですが、視聴履歴を、どのグループに属している誰が、という情報はわからないので、discord Oauth認証でログインして個人情報をdiscord APIから取得することで実現しています。
本当は、Youtubeの公式APIに視聴履歴をもらえればよかったんですが、プライバシー?セキュリティ?とかの関係でなかったです。こういう選択を取らざるを得ず、モバイルアプリの視聴履歴を取れないのは残念です。
使い方
- Chrome拡張機能をインストール
- 拡張機能からDiscord認証を行う
- 自分のDiscordサーバーにBotを招待(招待リンク)
- チャンネルで
/registerを実行
これだけで「生き恥」の共有が始まります!
おわりに
「IkihajiTube」はオープンソースで開発しています。
もし面白いなと思ったら、GitHubのStar⭐️をいただけると開発の励みになります!
今後の展望ですが、LLMによるフィルタリング機能を実装予定です。
流石に、IkihajiTubeとはいえ、人に晒したくない恥もあるかと思うので。
技術育成camp vol.17のハッカソンで一緒にチーム開発をしてくれた友人に感謝いたします!
GitHubリポジトリ: https://github.com/bmi921/ikihaji-tube



