結論から言うと、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の住処(サーバー)を作ります。ここでの設定を間違えると料金が発生する可能性があるため、慎重に進めてください。
- Google Cloud Platform にアクセスし、Googleアカウントでログインします。
- ※初回はクレジットカード登録が必要ですが、勝手に有料プランに移行されることはありません(「無料トライアル」の状態)。
- 画面上部のプロジェクト選択から [新しいプロジェクト] を作成します(名前は
discord-bot-projectなど)。 - 左上のメニュー(三本線)から [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まで無料
- OS:
設定できたら、一番下の [作成] をクリックします。しばらくすると「緑色のチェックマーク」が付き、サーバーが立ち上がります。
ステップ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コードをサーバーに送ります。
- SSH画面の右上にある [歯車アイコン] → [ファイルをアップロード] をクリック。
- 以下のコードを
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. 保存と起動
Ctrl + Oを押し、Enterを押して保存。Ctrl + Xを押してエディタを終了。- 以下のコマンドで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」の開発に挑戦してみませんか?