🧭 あなたに最適なVPSを30秒で無料診断 診断する →

【2026年版】DiscordのAIチャットボット(Midjourney風・ChatGPT風)をVPSで24時間稼働させる

読む前に30秒だけ。用途・予算を選ぶだけで、あなたに最適なVPSがわかります(無料・登録不要) 無料診断 →

【2026年版】DiscordのAIチャットボット(Midjourney風・ChatGPT風)をVPSで24時間稼働させる

最初に結論を書いておきます

テキスト生成だけのDiscord AIボットにGPUは不要。 これだけははっきり言いたい。

GPUプランを推してくる記事をたまに見かけますが、テキスト生成ならCPU+メモリ8GBのVPSで普通に動きます。GPU推しはほぼアフィリエイト報酬の単価が高いから、というのが本音だと思っています。単価が高いプランを売りたいから理由を後付けしてる構造。疑って読んでください。

自分の結論をまとめると:

  • テキストボット(Ollama)だけ作りたい → KAGOYAかXServerの8GBプランで十分。月2,000円台
  • 24時間フル稼働が前提のDiscordボット → XServerの月830円固定が損益分岐で有利。後で計算します
  • まず動くか試したい → KAGOYAの14日無料から始める。週末が2回入るので確認には十分
  • 画像生成(Stable Diffusion)も使いたい → GPUプランが現実的。ただし月5,000円〜は覚悟して
  • OpenAI APIをバックエンドにする → 2GBのVPSで動く。月1,000円台 + API代
  • 自分のPCで動かし続けるのは? → やめたほうがいい。PCが気になって全然手放しにならないし、何かあったときにリモートデスクトップで入り直す手間まで考えたら最初からVPSにすべき

VPS選びに迷っている人向けに、損益分岐点の計算は後のセクションで丁寧にやります。


Discordに自前のAIボットを常設したい

DiscordサーバーにMidjourneyやChatGPT風のボットを置きたいと思ったことがある人、わりと多いんじゃないかと思います。自分もそのひとりでした。

MidjourneyもChatGPT系のサービスも月額費用がかかりますが、自分でdiscord.pyボットを作ってVPSに置けば、一度の構築コストだけで24時間稼働し続けるAIボットが手に入ります。

しかもサーバーメンバー全員が使えるようになる。これが大きい。個人の月額サブスクを人数分払う必要がなくなる。

正直、最初の構築さえ乗り越えれば難しいことは何もないです。この記事ではdiscord.py + Ollamaバックエンドを組み合わせたAIチャットボットと、Stable Diffusionによる画像生成ボットの構築手順を解説します。自分が実際に試行錯誤した順番で書いているので、詰まりやすいポイントも都度コメントします。


システム構成

[Discordユーザー] → /ask こんにちは
        ↓
[VPS上のdiscord.pyボット]
        ↓
[Ollama(Llama 3 / Mistral)]
        ↓ 回答生成
[Discordに返信]

画像生成の場合:

[Discordユーザー] → /image 猫 水彩画風
        ↓
[VPS上のボット]
        ↓
[ComfyUI / Stable Diffusion API]
        ↓ 画像生成
[Discordに画像添付で返信]

構成はシンプルです。ボット本体がVPS上で動き続けて、LLMのOllamaかAPIにリクエストを投げるだけ。難しいことは何もない。


必要なVPSスペック

構成CPUメモリストレージ
テキスト生成のみ(Ollama)4コア8GB50GB
画像生成含む(SD + Ollama)8コア16GB以上100GB以上
OpenAI API利用(外部API)2コア2GB20GB

テキスト生成だけなら8GBメモリのVPSで十分です。 Llama 3の4bit量子化モデルなら余裕で動く。1円の追加コストも払わなくていい。

もう一度言いますが、GPUが本当に必要になるのはStable Diffusionで画像生成するときだけです。テキストボット用途でGPUプランを勧めてくる記事は、プラン単価が高いほうが報酬も上がるアフィ構造を疑って読んでください。記事の作りとしてGPUを前に持ってくる理由がほぼない。


広告 KAGOYA CLOUD VPS →

KAGOYA CLOUD VPS は14日間無料トライアル付き。週末が2回入るので、平日は仕事で触れなくても確認には十分な時間があります。コストゼロで動作確認してから判断できます。


KAGOYAとXServer、どっちがいい?(金額で判断する)

ここは少し丁寧に書いておきます。「なんとなくXServer」「なんとなくKAGOYA」で選ぶのはもったいないので、数字で考えてみます。

KAGOYA CLOUD VPS(時間課金)

  • 4コア / 8GB メモリ:約2.2円/時間
  • 月30日フル稼働:2.2円 × 24時間 × 30日 ≒ 月1,584円
  • 使った分だけ課金なので、週末しか触らないなら当然もっと安くなる

XServer VPS(月額固定)

  • 4コア / 8GB メモリ:月830円〜(キャンペーン時)
  • 何時間使っても定額。24時間フル稼働させてこそお得になるプラン
  • 毎月いくら使うか計算したくない人には、固定料金のほうが精神的にラクというのもある

損益分岐点を計算すると:

830円 ÷ 2.2円/時間 ≒ 月76時間

月76時間以上VPSを稼働させるならXServerの固定料金が安くなる。逆に76時間未満の使い方ならKAGOYAの時間課金が得。

そしてDiscordボットは、サーバーにいる間ずっとONにしておくのが前提です。アクティブなサーバーなら24時間稼働がデフォルト。月720時間稼働になるのでXServerの830円固定はかなり強い。 KAGOYA時間課金だと同じ条件で約1,584円になる。差額は約754円。年間で9,000円近い差。

自分だったらどうするか: まずKAGOYAの14日無料で動作確認して、ちゃんと動くとわかってからXServerに移行するか、KAGOYAのまま使い続けるかを判断する。KAGOYAの14日無料は週末が2回入るので、平日は仕事で触れなくても確認には十分な時間があります。最初から月額を払い始める必要はない。


環境構築:ステップバイステップ

Step 1: Discord Developer Portal でボットを作成する

  1. Discord Developer Portal にアクセス
  2. 「New Application」→ アプリ名を入力
  3. 左メニューの「Bot」→「Add Bot」
  4. 「Token」をコピー(後で使用)
  5. 「MESSAGE CONTENT INTENT」を有効化
  6. 「OAuth2」→「URL Generator」でスコープ bot + 権限 Send Messages, Read Messages/View Channels, Attach Files を選択
  7. 生成されたURLでサーバーにボットを招待

ここはDiscord側の設定なのでVPS関係なく最初に済ませておく。トークンの扱いは慎重に。 GitHubにそのままpushすると悪用されます。後で .env ファイルへの分離とGitignoreの設定を必ずやります。

Step 2: VPS に Python 環境を整える

sudo apt update && sudo apt install -y python3.11 python3.11-venv python3-pip

mkdir ~/discord-ai-bot && cd ~/discord-ai-bot
python3.11 -m venv venv
source venv/bin/activate

pip install discord.py requests python-dotenv aiohttp

Step 3: Ollama をインストールしてモデルを取得

# Ollamaインストール
curl -fsSL https://ollama.ai/install.sh | sh

# テキスト生成用モデルを取得(約4.7GB)
ollama pull llama3

# バックグラウンドで起動
sudo systemctl enable ollama
sudo systemctl start ollama

Llama 3のモデルダウンロードは4.7GBあるので少し時間かかります。回線次第では10〜20分。コーヒーでも飲みながら待つ感じで。VPSのストレージに50GB以上確保しておかないとここで詰まります。スペック表を見ながら選んでください。

Step 4: ボットの本体を作成する

# bot.py
import discord
from discord.ext import commands
from discord import app_commands
import aiohttp
import os
from dotenv import load_dotenv

load_dotenv()

DISCORD_TOKEN = os.getenv("DISCORD_TOKEN")
OLLAMA_URL = "http://localhost:11434/api/generate"

intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix="!", intents=intents)
tree = bot.tree

@bot.event
async def on_ready():
    await tree.sync()
    print(f"ボット起動: {bot.user}")

async def ask_ollama(prompt: str, model: str = "llama3") -> str:
    """Ollamaに問い合わせて回答を取得"""
    payload = {
        "model": model,
        "prompt": prompt,
        "stream": False,
    }
    async with aiohttp.ClientSession() as session:
        async with session.post(OLLAMA_URL, json=payload) as resp:
            data = await resp.json()
            return data.get("response", "回答を生成できませんでした")

@tree.command(name="ask", description="AIに質問する")
async def ask_command(interaction: discord.Interaction, question: str):
    """スラッシュコマンド /ask で質問を受け付ける"""
    await interaction.response.defer()  # 処理中を示す

    response = await ask_ollama(question)

    # 2000文字制限を考慮して分割
    if len(response) > 1900:
        response = response[:1900] + "...(省略)"

    await interaction.followup.send(
        f"**質問:** {question}\n\n**回答:**\n{response}"
    )

@tree.command(name="chat", description="AIとフリートークする")
async def chat_command(interaction: discord.Interaction, message: str):
    """日本語でフリートーク"""
    await interaction.response.defer()

    system_prompt = f"あなたは親切なアシスタントです。日本語で簡潔に回答してください。\n\nユーザー: {message}"
    response = await ask_ollama(system_prompt)

    embed = discord.Embed(
        title="AI の回答",
        description=response[:4000],
        color=discord.Color.blue()
    )
    embed.set_footer(text="Powered by Ollama + Llama 3")
    await interaction.followup.send(embed=embed)

@bot.event
async def on_message(message: discord.Message):
    """ボットがメンションされたときに反応"""
    if message.author == bot.user:
        return
    if bot.user.mentioned_in(message):
        question = message.content.replace(f"<@{bot.user.id}>", "").strip()
        if question:
            async with message.channel.typing():
                response = await ask_ollama(question)
                await message.reply(response[:2000])

    await bot.process_commands(message)

bot.run(DISCORD_TOKEN)

Step 5: .env ファイルを設定する

nano .env
DISCORD_TOKEN=your-bot-token-here

.env ファイルは必ず .gitignore に入れること。 これを忘れてトークンが漏れるパターンが本当によくある。漏れたら即Discordのポータルからトークンをリセットしてください。漏れてからの対処より、最初から防ぐほうがずっとラクです。

Step 6: 動作確認

python bot.py

Discordサーバーで /ask こんにちは と入力してボットが返答すれば成功です。最初に動いた瞬間はけっこう嬉しいもので、「あ、本当に動くんだ」ってなります。自分もなりました。

Step 7: systemd で24時間稼働させる

ここが一番大事なステップ。これをやらないとVPSのターミナルを閉じた瞬間にボットが止まります。折角ここまで来てそれは悲しいので、必ずやること。

sudo nano /etc/systemd/system/discord-bot.service
[Unit]
Description=Discord AI Bot
After=network.target ollama.service

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/discord-ai-bot
EnvironmentFile=/home/ubuntu/discord-ai-bot/.env
ExecStart=/home/ubuntu/discord-ai-bot/venv/bin/python bot.py
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable discord-bot
sudo systemctl start discord-bot
sudo systemctl status discord-bot

Restart=always を入れておけばクラッシュしても自動で再起動します。これがあるのとないのでは安心感が全然違う。VPSにしたのに「ボットが止まってないか気になる」状態になったら本末転倒なので、systemdへの登録はセットで必ずやってください。


画像生成機能を追加する(ComfyUI連携)

ここからは 画像生成が必要な人向け の話。テキストボットだけでいい人は読み飛ばして構いません。

ぶっちゃけ、Stable DiffusionをVPSで動かすのは月数万になることもあって、気軽におすすめとは言いにくい。「月数万はまぁまぁ高い」というのが本音です。ただ、セットアップさえ乗り越えれば使い勝手はいい。 GPUプランのVPSで立ち上げが楽にできるなら、選択肢としてはあり。コストの覚悟さえできていれば。

# ComfyUIインストール(GPUプランのVPS推奨)
git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI
pip install -r requirements.txt
python main.py --listen 127.0.0.1 --port 8188
# bot.py に追加
import aiofiles
import uuid

@tree.command(name="image", description="AIに画像を生成させる")
async def image_command(interaction: discord.Interaction, prompt: str):
    await interaction.response.defer()

    # ComfyUI API呼び出し(簡略版)
    async with aiohttp.ClientSession() as session:
        payload = {
            "prompt": {
                "3": {
                    "inputs": {"text": prompt, "clip": ["4", 1]},
                    "class_type": "CLIPTextEncode"
                }
                # 実際はComfyUIのワークフローJSON全体を指定
            }
        }
        async with session.post(
            "http://127.0.0.1:8188/prompt", json=payload
        ) as resp:
            result = await resp.json()
            await interaction.followup.send(f"画像生成中... プロンプト: {prompt}")
広告 XServer VPS →

XServer VPS の GPU プラン(NVIDIA L4)なら画像生成も快適に動作します。


よくある質問

A. systemdサービスとして登録することで、クラッシュや再起動時に自動復帰します。`sudo systemctl status discord-bot` でログを確認し、エラーの原因を特定してください。多くの場合はトークンの設定ミスかOllamaの起動順序の問題です。Step 7を飛ばしている場合は必ずやってください。
A. 日本語に特化したモデルを使うと精度が上がります。`ollama pull elyza/llama-3-elyza-jp-8b` など、日本語ファインチューニング済みモデルを試してみてください。メモリは最低8GB必要です。
A. チャンネルIDを環境変数で指定し、`if interaction.channel_id != ALLOWED_CHANNEL_ID: return` のように条件分岐を追加することで制限できます。複数チャンネルをリストで管理する方法も簡単に実装できます。
A. はい。`ask_ollama` 関数をOpenAI APIの呼び出しに置き換えるだけです。OllamaはOpenAI互換のAPIエンドポイントを持つため、コードの変更量は最小限で済みます。VPSのスペックも2GBメモリで動くので、コストを最低限に抑えたい人にはこの構成がいちばんラクです。

まとめ:あなたの使い方で選ぶ

結局「どれが正解か」は使い方次第なので、自分の状況と照らし合わせてみてください。

使い方必要スペックおすすめVPS月額目安判断
テキストボットだけ(Ollama)・試し段階4コア / 8GBKAGOYA(14日無料)まず0円週末2回で動作確認してから判断
月76時間以上フル稼働させる(24時間稼働前提)4コア / 8GBXServer(固定830円〜)830円〜固定料金のほうが精神的にラク
月76時間未満・ときどき使う程度4コア / 8GBKAGOYA(時間課金)使った分だけ損益分岐点より安くなる
OpenAI APIバックエンド(Ollama不要)2コア / 2GBどこでも1,000円台 + API代最軽量構成。コスト最優先ならこれ
画像生成(Stable Diffusion)も使いたいGPUプランXServer GPU or KAGOYA GPU5,000円〜月数万になることも覚悟して。立ち上げが楽なら選択肢にはなる

損益分岐点まとめ: KAGOYAの時間課金(約2.2円/時間)とXServerの月額固定(830円〜)を比較すると、月76時間以上使うならXServerが得、未満ならKAGOYA。 Discordボットを24時間稼働させるなら月720時間なので、フル稼働前提ならXServer一択に近い。とはいえ最初からXServerに突っ込む前に、KAGOYAの無料枠で「本当に動くか」「自分がちゃんと使うか」を確認してからでも遅くないです。



最後に一言だけ。

この記事に書いたのはあくまで今の自分の判断であって、最終回答じゃないです。VPSの料金体系は変わるし、モデルの性能も上がっていく。まずKAGOYAの14日無料で試してみて、動いたら継続か乗り換えかを考えればいい。「自分に向いてるかわからない」は試してみないと永遠にわからない。合わなかったらやめればいい。それだけの話だ。


関連記事