結論から言うと、Google Cloud Platform (GCP) の「無料枠 (e2-microインスタンス)」を使えば、Pythonで作った高機能なDiscord Botを24時間365日、完全無料で稼働させ続けることが可能です。 自宅のPCをつけっぱなしにする必要も、月額費用がかかるVPSを契約する必要もありません。

この記事では、GAS(Google Apps Script)では実現できない「即レス」や「複雑な機能」を持つBotを、Googleのクラウド上で動かす手順を徹底解説します。


GASとGCP、何が決定的に違うのか?

多くの人が最初に触れるGASと、今回使うGCPには、「働き方」に大きな違いがあります。

特徴GAS (Google Apps Script)GCP (Compute Engine)
仕組み呼ばれた時だけ起きる(寝起き)24時間ずっと起きている(常駐)
得意なこと定型文の返信、スプレッドシート管理即レス、音楽再生、通話機能、複雑な計算
弱点反応が遅い、長時間動けない設定が少し難しい(黒い画面を使う)
費用無料条件付きで無料 (e2-micro)

GASは「スプレッドシートの延長」ですが、GCPは「インターネット上の仮想パソコン」です。ここにBotを住まわせることで、いつでも瞬時に反応できるようになります。


ステップ1:GCPで「無料のサーバー」を借りる

まずはBotの住処(サーバー)を作ります。ここでの設定を間違えると料金が発生する可能性があるため、慎重に進めてください。

  1. Google Cloud Platform にアクセスし、Googleアカウントでログインします。
    • ※初回はクレジットカード登録が必要ですが、勝手に有料プランに移行されることはありません(「無料トライアル」の状態)。
  2. 画面上部のプロジェクト選択から [新しいプロジェクト] を作成します(名前は discord-bot-project など)。
  3. 左上のメニュー(三本線)から [Compute Engine][VM インスタンス] を選択し、[インスタンスを作成] をクリックします。

【最重要】無料枠にするための「魔法の設定」

以下の3点は必ずこの通りに設定してください。これ以外を選ぶと課金対象になります。

  • リージョン (場所):us-west1 (オレゴン) または us-central1 (アイオワ)
    • 注意: asia-northeast1 (東京) は有料です!必ず米国リージョンを選んでください。
  • マシンタイプ: e2-micro (vCPU x 2, メモリ 1 GB)
  • ブートディスク:
    • OS: Ubuntu (バージョンは 20.04 LTS などでOK)
    • ディスクの種類: 標準永続ディスク
    • サイズ: 30 GB まで無料

設定できたら、一番下の [作成] をクリックします。しばらくすると「緑色のチェックマーク」が付き、サーバーが立ち上がります。


ステップ2:黒い画面(SSH)で環境を作る

サーバーができたら、そこに乗り込んでPythonが動く環境を作ります。

GCPの画面にある [SSH] というボタンをクリックしてください。ブラウザ上に「黒い画面」が立ち上がります。これがサーバーの操縦席です。

以下のコマンドを1行ずつコピーして、黒い画面に貼り付け(右クリック→貼り付け)、Enterキーを押して実行してください。

1. サーバーの更新とツールのインストール

Bash

# サーバーの中身を最新の状態にします
sudo apt update
sudo apt upgrade -y

# Python3とpip(ライブラリ管理ツール)を入れます
sudo apt install -y python3-pip

# Discord Botを動かすためのライブラリを入れます
pip3 install discord.py

# Bot用のフォルダを作って、その中に入ります
mkdir discord_bot
cd discord_bot

ステップ3:Botのコードをアップロードする

ここで、手元のPCで作ったPythonコードをサーバーに送ります。

  1. SSH画面の右上にある [歯車アイコン][ファイルをアップロード] をクリック。
  2. 以下のコードを bot_main.py という名前で保存し、それをアップロードしてください。

【全文】Botのメインコード (bot_main.py)

Python

import discord
from discord.ext import commands
import os
from datetime import datetime

# --- 設定エリア ---
# ※初心者はここに直接Tokenを書いてOKですが、取扱には十分注意してください
TOKEN = "ここにあなたのBotトークンを入れてください"

# Intentsの設定(サーバーから何の情報を受け取るか)
# ※Discord Developer Portalで "Message Content Intent" をONにするのを忘れずに!
intents = discord.Intents.default()
intents.message_content = True # メッセージの中身を読む
intents.members = True         # メンバーの参加/退出を知る

# Botのインスタンス作成
bot = commands.Bot(command_prefix="!", intents=intents)

@bot.event
async def on_ready():
    """Bot起動時に実行される処理"""
    print(f'ログインしました: {bot.user.name} (ID: {bot.user.id})')
    print(f'GCPサーバー時刻: {datetime.now()}')
    
    # Botのステータスを変更(「GCPで稼働中」と表示させる)
    await bot.change_presence(activity=discord.Game(name="GCPで24時間稼働中"))

@bot.event
async def on_message(message):
    """メッセージを受信した時の処理"""
    # 自分自身の発言は無視
    if message.author.bot:
        return

    # 「常時起動」ならではの即レス反応
    if message.content == "ping":
        # ネットワーク遅延(レイテンシ)を表示
        latency = round(bot.latency * 1000)
        await message.channel.send(f"Pong! 🏓 (応答速度: {latency}ms)")

    # コマンド処理のために必要
    await bot.process_commands(message)

@bot.event
async def on_member_join(member):
    """誰かがサーバーに参加した時の処理"""
    # GASのようなポーリング(定期確認)では、この「瞬間」を捉えるのは難しい
    channel = member.guild.system_channel # サーバーのデフォルトチャンネル
    if channel:
        await channel.send(f"{member.mention} さん、ようこそ!GCP Botが検知しました!")

@bot.command()
async def status(ctx):
    """サーバーの状態を教えるコマンド"""
    # Linuxサーバーの稼働時間を取得して表示する
    import subprocess
    try:
        uptime = subprocess.check_output(['uptime', '-p']).decode('utf-8').strip()
        await ctx.send(f"サーバー稼働時間: {uptime}")
    except Exception as e:
        await ctx.send(f"エラー: {e}")

# Botの実行
if __name__ == "__main__":
    bot.run(TOKEN)

アップロードが完了したら、一度手動で動かしてみましょう。

Bash

python3 bot_main.py

「ログインしました」と表示され、Discordで ping と打って反応があれば成功です!

しかし、このままSSH画面を閉じるとBotも止まってしまいます。


ステップ4:【魔法】画面を閉じても動かし続ける (Systemd)

SSH画面を閉じてもBotが死なないように、「Systemd(システムディー)」 という機能を使って、Botをサーバーの守護神(デーモン)にします。

1. 設定ファイルの作成

SSH画面で Ctrl + C を押して一旦Botを止め、以下のコマンドで設定ファイル作成画面(Nanoエディタ)を開きます。

Bash

sudo nano /etc/systemd/system/discordbot.service

2. 設定のコピペ

開いた画面に、以下の内容をコピーして貼り付けます。

※注意: User=your_username の部分は、SSH画面の @ より前の名前(例: satou_tarou)に書き換えてください。

Ini, TOML

[Unit]
Description=Discord Bot on GCP
After=network.target

[Service]
# ↓ここをあなたのGCPユーザー名に書き換えてください!
User=your_username
# ワーキングディレクトリ
WorkingDirectory=/home/your_username/discord_bot
# 実行コマンド
ExecStart=/usr/bin/python3 /home/your_username/discord_bot/bot_main.py
# Botがクラッシュしても自動で再起動する設定
Restart=always
# 再起動までの待機時間
RestartSec=10

[Install]
WantedBy=multi-user.target

3. 保存と起動

  1. Ctrl + O を押し、Enter を押して保存。
  2. Ctrl + X を押してエディタを終了。
  3. 以下のコマンドでBotを裏側で起動させます。

Bash

# 設定を読み込む
sudo systemctl daemon-reload

# Botを起動する
sudo systemctl start discordbot

# サーバー再起動時にも自動でBotが起きるようにする
sudo systemctl enable discordbot

# 状態確認(緑色の active (running) が出れば大成功!)
sudo systemctl status discordbot

これで作業は全て完了です!SSH画面を閉じても、PCの電源を切っても、あなたのBotはGCPの無料サーバーの中で生き続けます。


まとめと注意点

お疲れ様でした!これであなたは「GAS初心者」を卒業し、本格的なBot開発者の仲間入りです。

  • 無料枠の維持: e2-micro インスタンスは、1ヶ月のうち「北米リージョンで1台分」が無料です。2台目を作ったり、東京リージョンを選んだりしないよう注意しましょう。
  • 予算アラート: 万が一設定をミスした時のために、GCPの「お支払い」メニューから「予算とアラート」を設定し、「1円でも発生したらメール通知」が来るようにしておくと安心です。

次は、この環境を使って「音楽Bot」や「読み上げBot」の開発に挑戦してみませんか?