4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

YouTubeの視聴履歴(生き恥)を友達に晒すDiscord Bot「IkihajiTube」を作った話

Posted at

はじめに

こんにちは。BMI921です。
今回は、「YouTubeの視聴履歴(生き恥)をDiscordで共有して、友達との仲を深める」 という、少し変わったDiscord BotとChrome拡張機能を作ったので紹介します。

その名も IkihajiTube です。

thumbnail-ikihajitube.jpeg

🔗 リンク

開発の動機

みなさんは、友人がYouTubeで普段どんな動画を見ているか気になったことはありませんか?
あるいは、「この動画面白い!」と思ったものを共有したいけど、いちいちURLを貼るのは面倒...と思ったことは?

「自分の視聴履歴(生き恥)をさらけ出すことで、逆説的に友情が深まるのではないか?」

そんな仮説(?)のもと、視聴履歴を自動収集し、Discordサーバーに垂れ流すシステムを開発しました。

spotifyにコラボプレイリストという、複数人が聞いた曲をまとめてくれる機能があります。それがアイデアの本です。Youtubeのニッチな動画を共有できる機会が現実ではなく、残念だなと常々思ってました...

IkihajiTubeでできること

b.jpeg

主な機能は以下の2点です。

  1. 複数人が視聴した動画の共有: サーバー内のメンバーで、同じ動画を見た人がいれば「これ、みんな見てるよ!」と通知します。共通の話題作りに最適です。
  2. ランダムな視聴履歴の共有: 誰かが視聴した動画をランダムにピックアップして晒します。意外な一面が見れるかもしれません。

Chrome拡張機能を入れるだけで、あとはバックグラウンドで自動的に履歴が収集・共有されます。

システム構成と技術スタック

今回の開発では、新しい技術の学習も兼ねてモダンな技術スタックを採用しました。

全体のアーキテクチャ

システムは大きく分けて3つのコンポーネントで構成されています。

  1. Chrome Extension: ユーザーのYouTube視聴履歴を収集するクライアント
  2. API Server (ElysiaJS): 視聴履歴を受け取り、DBに保存するサーバー
  3. Discord Bot: 蓄積されたデータから動画情報をDiscordに投稿するボット

c.jpeg

技術スタック一覧

開発効率とパフォーマンスを意識し、ランタイムには Bun を採用しました。また、これらを一元管理するために Turborepo を導入しています。

d.jpeg

カテゴリ 技術 選定理由・コメント
ランタイム 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に視聴履歴をもらえればよかったんですが、プライバシー?セキュリティ?とかの関係でなかったです。こういう選択を取らざるを得ず、モバイルアプリの視聴履歴を取れないのは残念です。

使い方

  1. Chrome拡張機能をインストール
  2. 拡張機能からDiscord認証を行う
  3. 自分のDiscordサーバーにBotを招待(招待リンク
  4. チャンネルで /register を実行

これだけで「生き恥」の共有が始まります!

おわりに

「IkihajiTube」はオープンソースで開発しています。
もし面白いなと思ったら、GitHubのStar⭐️をいただけると開発の励みになります!

今後の展望ですが、LLMによるフィルタリング機能を実装予定です。
流石に、IkihajiTubeとはいえ、人に晒したくない恥もあるかと思うので。

技術育成camp vol.17のハッカソンで一緒にチーム開発をしてくれた友人に感謝いたします!

GitHubリポジトリ: https://github.com/bmi921/ikihaji-tube

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?