Google Sheets に登録された本のリストから、ユーザーの気分や要望に合わせて本を選書してくれる Discord Bot。
自然言語で要望を伝えると、Google Sheets に登録された本の中から 5 冊程度の本をおすすめしてくれる。
ユーザー: /選書 今日は雨で憂鬱。でも2時間くらい読書できる。
現実逃避できて、読後感が良いものがいいな
Bot: 📚 雨の日にぴったりの5冊、選んでみました!
1. 『かもめ食堂』群ようこ
→ 静かな北欧の空気感が、雨音と合いそう。
心がほっこりする読後感も◎
2. 『夜は短し歩けよ乙女』森見登美彦
→ 現実離れした京都の夜の冒険。2時間で
ちょうど読み切れるボリューム感。
...
| 要素 | 技術 |
|---|---|
| 言語 | Python 3.11+ |
| Bot フレームワーク | discord.py |
| Sheets 連携 | gspread |
| AI | Google Gemini API |
| ホスティング | Northflank |
このBotは Libra Mate からエクスポートした Google Sheets に対応している。
Libra Mate は書籍管理アプリで、蔵書を Google Sheets に出力できる。このアプリを利用している人であれば、同じ仕組みを構築できる。
| カラム名 | 説明 | 必須 |
|---|---|---|
| タイトル | 本のタイトル | 必須 |
| 著者名 | 著者 | 必須 |
| 出版社 | 出版社名 | 任意 |
| 商品説明 | 本の説明文 | 任意 |
| 既読フラグ | 読了済みかどうか | 任意 |
| 削除フラグ | TRUE の場合は除外 | 任意 |
| メモ | 自由記述 | 任意 |
git clone https://github.com/<your-username>/discord-book-recommender.git
cd discord-book-recommenderpip install -r requirements.txtcp .env.example .env
# .env を編集して各種トークン・認証情報を設定- Google Cloud Console でプロジェクトを作成
- Google Sheets API を有効化
- サービスアカウントを作成し、JSON キーをダウンロード
- JSON キーの内容を 1 行にして
GOOGLE_CREDENTIALS_JSONに設定 - サービスアカウントのメールアドレスをスプレッドシートに共有
python src/main.py| 変数名 | 説明 |
|---|---|
DISCORD_TOKEN |
Discord Bot トークン(Discord Developer Portal で取得) |
GEMINI_API_KEY |
Gemini API キー(Google AI Studio で取得) |
GOOGLE_SHEETS_ID |
スプレッドシートの ID(URL の /d/ と /edit の間の文字列) |
GOOGLE_CREDENTIALS_JSON |
サービスアカウント認証情報(JSON を 1 行にしたもの) |
# 仮想環境の作成(推奨)
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# 依存パッケージのインストール
pip install -r requirements.txtNorthflank を使用してデプロイする。GitHub 連携を設定すると push 時に自動デプロイされる。
- Northflank でプロジェクトを作成
- Combined Service を追加し、GitHub リポジトリを連携
- Environment タブで環境変数を設定
- デプロイ実行
northflank.json を使用した GitOps デプロイにも対応している。
fork して使用する場合は、northflank.json 内の以下の項目を変更すること。
自分のリポジトリ URL に変更する。
"vcsData": {
"projectUrl": "https://github.com/<your-username>/discord-book-recommender",
"projectType": "github",
"projectBranch": "main"
}デフォルトは europe-west。必要に応じて変更する。
"region": "europe-west"利用可能なリージョン: europe-west, us-central, asia-southeast
MIT License