【ガチで0円】Discord Botを24/365ぶん回す!GCP無料枠×Gemini APIで常時稼働(未検証メモ)
重要: この記事は未検証の設計メモです。
「AIに読ませれば概ね動くはず」という前提で構成しています。
実運用前には必ず検証してください。
この記事でやること
- GCPの無料枠(e2-micro)でDiscord Botを24/365稼働させる
- 返答はGemini APIを使う
- スクショなしで、手順とコマンドだけで完結
まず言い切る
「Discord Botだけなら、無料枠×Gemini APIで回せる」
— とにかく動かしたい人向けに、最短構成だけ置いていきます。
こんな人向け
- 0円でとりあえず動かしたい
- Discord Botだけ動けばOK
- サーバは貧弱でもいい
この記事を書くきっかけ
- claudebot を見て「自分専用ボット」を作りたくなった
- ただし claudebot で完全無料運用は難しそうだった
- そこで Gemini API で実装すれば無料枠でいけると考えた
結論として、
- Discord bot だけなら Gemini API でも十分
- LLMを呼ぶだけならサーバのCPUは貧弱でもOK
- だから e2-micro + Gemini API の構成でいけるはず
という前提で書いています。
前提と無料枠の注意
「完全無料」と書いていますが、条件付きです。ここが一番大事です。
-
GCPの無料枠(Always Free)はリージョンや条件に制限があります
→ 対象リージョン/条件はGCP公式を確認してください -
外部IP・ディスク容量・通信量によっては課金されます
→ 固定IPは基本有料 -
Gemini APIにも無料枠の上限があります
→ 使い過ぎると課金されます
※無料枠の上限は変更されるため、必ず公式ドキュメントを確認してください。
必要なら**正規の方法(課金プラン/サポート問い合わせ)**で上限を引き上げられます。
「無料枠の範囲で運用する」前提の手順です。
無料枠を守るためのポイント(超重要)
この5つだけは守ると安心です。
-
リージョンを無料枠対象にする
→ 対象外リージョンだと即課金 -
VMは e2-micro / 1台だけ
→ 複数台や上位マシンは無料枠外 -
ブートディスクは最小(例: 10GB)
→ 容量を盛ると課金リスク -
固定IPを使わない
→ 使うだけで課金が発生しやすい -
Gemini APIの無料枠を超えない
→ 使い過ぎると従量課金
「気づいたら課金」を避けるために、毎日見なくても守れる構成に寄せるのがコツです。
最悪でも「100円以内」に寄せる保険
「完全無料」が理想でも、万一の課金は100円程度に抑えたいなら、次の保険を追加します。
-
請求アラート(予算)を100円で設定
→ 50円/100円で通知が来るようにする
※ 予算アラートは自動停止ではない点に注意 -
自動停止の仕組みを入れる(任意)
→ 予算アラート → Pub/Sub → Cloud Functions でVM停止
→ 少し手間だが「上限」を実質作れる -
外向き通信を最小化
→ Discord/Gemini以外の外部通信を増やさない -
ディスクは最小・スナップショット禁止
→ スナップショットは意外と課金要因 -
固定IPは使わない
→ 使った時点で課金に近づく
ポイントは「通知」と「自動停止」。
100円を厳密に守りたいなら、自動停止が一番効きます。
構成(最小)
- GCP Compute Engine: e2-micro(無料枠)
- OS: Ubuntu LTS
- Discord bot:
discord.py - LLM: Gemini API
- 常駐:
systemd
1. Discord Botの準備
- Discord Developer Portalでアプリ作成
- Botを作成し、TOKENを控える
- Privileged Gateway Intentsで
- MESSAGE CONTENT INTENT を有効化
Botの招待URLは後で作ります。
2. Gemini APIキーを取得
Google AI StudioでAPIキーを発行し、控える:
GEMINI_API_KEY=...
3. e2-microを作成(gcloud例)
以下は一例です。リージョンは無料枠対象であることを確認してください。
gcloud config set project YOUR_PROJECT_ID
gcloud compute instances create discord-bot \
--machine-type=e2-micro \
--image-family=ubuntu-2204-lts \
--image-project=ubuntu-os-cloud \
--zone=YOUR_ZONE \
--boot-disk-size=10GB
SSHでログイン:
gcloud compute ssh discord-bot --zone YOUR_ZONE
4. セットアップ
sudo apt-get update -y
sudo apt-get install -y python3-venv git
作業ディレクトリ:
mkdir -p ~/discord-bot && cd ~/discord-bot
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install discord.py google-generativeai
5. Botコード(最小)
bot.py を作成:
import os
import asyncio
import discord
import google.generativeai as genai
DISCORD_TOKEN = os.environ["DISCORD_TOKEN"]
GEMINI_API_KEY = os.environ["GEMINI_API_KEY"]
genai.configure(api_key=GEMINI_API_KEY)
model = genai.GenerativeModel("gemini-1.5-flash")
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)
@client.event
async def on_message(message):
if message.author.bot:
return
if not message.content.startswith("!ai "):
return
prompt = message.content[len("!ai "):].strip()
if not prompt:
await message.channel.send("質問を入力してください。")
return
def ask_gemini():
return model.generate_content(prompt).text
try:
reply = await asyncio.to_thread(ask_gemini)
except Exception as e:
await message.channel.send(f"エラー: {e}")
return
await message.channel.send(reply[:2000]) # Discordは2000文字制限
client.run(DISCORD_TOKEN)
6. 環境変数
export DISCORD_TOKEN="YOUR_DISCORD_BOT_TOKEN"
export GEMINI_API_KEY="YOUR_GEMINI_API_KEY"
手動で起動してテスト:
python3 bot.py
7. 自動起動(systemd)
/etc/systemd/system/discord-bot.service を作成:
[Unit]
Description=Discord Bot (Gemini)
After=network.target
[Service]
Type=simple
User=YOUR_USER
WorkingDirectory=/home/YOUR_USER/discord-bot
Environment=DISCORD_TOKEN=YOUR_DISCORD_BOT_TOKEN
Environment=GEMINI_API_KEY=YOUR_GEMINI_API_KEY
ExecStart=/home/YOUR_USER/discord-bot/.venv/bin/python /home/YOUR_USER/discord-bot/bot.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
有効化:
sudo systemctl daemon-reload
sudo systemctl enable discord-bot
sudo systemctl start discord-bot
ログ確認:
journalctl -u discord-bot -f
8. Bot招待URL
OAuth2 URL Generatorでスコープ:
bot-
applications.commands(必要なら)
権限は Send Messages など最低限に。
よくある詰まりポイント
- Botが反応しない
→ Message Content Intentの有効化忘れが多い - エラーが出る
→DISCORD_TOKEN/GEMINI_API_KEYの設定ミス - 返答が遅い
→ Gemini APIの応答速度 or e2-microのCPU制限
料金で詰まらないために
- 固定IPは使わない(課金リスク)
- ディスクサイズは最小
- 大量の外向き通信を避ける
- Gemini API無料枠の上限を確認
まとめ
未検証ですが、理屈上は無料枠だけでDiscord Botを24/365運用可能です。
「動いたら追記」前提のメモとして出すなら、十分価値があります。
検証したら結果を追記します。
動かない場合は リージョン / 外部IP / APIキー / systemd を順に確認してください。