2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ガチで0円】Discord Botを24/365ぶん回す!GCP無料枠×Gemini APIで常時稼働(未検証メモ)

Last updated at Posted at 2026-01-29

【ガチで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つだけは守ると安心です。

  1. リージョンを無料枠対象にする
    → 対象外リージョンだと即課金
  2. VMは e2-micro / 1台だけ
    → 複数台や上位マシンは無料枠外
  3. ブートディスクは最小(例: 10GB)
    → 容量を盛ると課金リスク
  4. 固定IPを使わない
    → 使うだけで課金が発生しやすい
  5. Gemini APIの無料枠を超えない
    → 使い過ぎると従量課金

「気づいたら課金」を避けるために、毎日見なくても守れる構成に寄せるのがコツです。

最悪でも「100円以内」に寄せる保険

「完全無料」が理想でも、万一の課金は100円程度に抑えたいなら、次の保険を追加します。

  1. 請求アラート(予算)を100円で設定
    → 50円/100円で通知が来るようにする
    ※ 予算アラートは自動停止ではない点に注意
  2. 自動停止の仕組みを入れる(任意)
    → 予算アラート → Pub/Sub → Cloud Functions でVM停止
    → 少し手間だが「上限」を実質作れる
  3. 外向き通信を最小化
    → Discord/Gemini以外の外部通信を増やさない
  4. ディスクは最小・スナップショット禁止
    → スナップショットは意外と課金要因
  5. 固定IPは使わない
    → 使った時点で課金に近づく

ポイントは「通知」と「自動停止」。
100円を厳密に守りたいなら、自動停止が一番効きます。

構成(最小)

  • GCP Compute Engine: e2-micro(無料枠)
  • OS: Ubuntu LTS
  • Discord bot: discord.py
  • LLM: Gemini API
  • 常駐: systemd

1. Discord Botの準備

  1. Discord Developer Portalでアプリ作成
  2. Botを作成し、TOKENを控える
  3. 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 を順に確認してください。

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?