【VPS活用】PCを閉じても眠らない!「Discordボット」&「自動化スクリプト」を24時間稼働させるプロの運用術【Python + Systemd】

あなたのボット、寝ていませんか?

こんにちは!「リナックス先生」です。
前回はVPNを作ってセキュリティを強化しましたが、今回は「攻め」の活用術です。

コウ君

先生、趣味でDiscordのボットを作ってみたんです!
でも、僕のノートパソコンで動かしてるので、パソコンを閉じたりスリープにするとボットも止まっちゃって…。
友達から「ボット返事しないぞー」ってクレームが来るんです。

リナックス先生

それは当然ね。
そんな時こそVPSの出番よ。
今回は、VPSの中にPython環境を作って、「サーバーが再起動しても勝手に生き返る不死身のボット」を作るプロの運用術を教えるわ。

1. VPSでボットを動かすメリット

HerokuやReplitなどの無料枠で動かす方法もありますが、本格的に運用するならVPS一択です。

  • 24時間365日稼働: スリープモードはありません。いつでも即座に応答します。
  • 制限なし: 無料サービスのような「稼働時間制限」や「メモリ制限」を気にせず、重い処理(画像生成やAI連携など)も可能です。
  • データの保存: SQLiteやMySQLを使って、ユーザーのレベルや会話履歴を永続的に保存できます。

2. 環境構築:Pythonの準備

今回はAlmaLinux 9(またはUbuntu)を想定して解説します。まずはPython環境を整えましょう。

Step 1: Pythonと仮想環境のインストール

システムを汚さないために、プロジェクトごとに仮想環境(venv)を作るのが鉄則です。

# 必要なパッケージを入れる (AlmaLinuxの場合)
dnf install python3 python3-pip -y

# 作業用ディレクトリ作成
mkdir -p /opt/my-discord-bot
cd /opt/my-discord-bot

# 仮想環境の作成
python3 -m venv venv

# 仮想環境に入る
source venv/bin/activate

Step 2: ライブラリのインストール

Discord用のライブラリと、環境変数を読み込むためのライブラリを入れます。

(venv) pip install discord.py python-dotenv

3. ボットの作成(セキュリティ重視)

コードに直接トークン(パスワード)を書くのは危険です。.env ファイルを使って管理しましょう。

Step 1: 環境変数の設定 (.env)

vi .env

中身:

DISCORD_TOKEN=ここにあなたのボットのトークンを貼り付け

Step 2: ボット本体の作成 (main.py)

vi main.py

中身:

import os
import discord
from dotenv import load_dotenv

# .envファイルを読み込む
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)

@client.event
async def on_ready():
    print(f'{client.user} としてログインしました')

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content == '/ping':
        await message.channel.send('Pong! VPSからこんにちは!')

client.run(TOKEN)

一度手動で動くかテストしてみましょう。

(venv) python main.py

Discordで /ping と打って返事が来ればOKです。Ctrl + C で停止します。

4. 【重要】Systemdで「不死身化(デーモン化)」する

ここがプロの技術です。
python main.py で動かすだけだと、ターミナルを閉じるとボットも止まってしまいます。
Linuxの管理システム「Systemd」に登録して、バックグラウンドで常駐させましょう。

Step 1: サービスファイルの作成

Root権限で設定ファイルを作ります。

# 仮想環境を抜ける
deactivate

# ファイル作成
vi /etc/systemd/system/discord-bot.service

▼記述内容(コピペOK)

[Unit]
Description=My Discord Bot Service
After=network.target

[Service]
# 実行ユーザー(普段使っているユーザー名に変えてください)
User=root
# 作業ディレクトリ
WorkingDirectory=/opt/my-discord-bot
# 実行コマンド (仮想環境内のpythonを使うのがポイント!)
ExecStart=/opt/my-discord-bot/venv/bin/python main.py
# エラーで落ちても自動で再起動する設定
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Step 2: 自動起動の有効化と開始

# Systemdの設定を読み込み
systemctl daemon-reload

# 自動起動をオンにする(サーバー再起動時にも動くように)
systemctl enable discord-bot

# サービスを開始
systemctl start discord-bot

# 状態確認
systemctl status discord-bot

緑色の丸で active (running) と出ていれば成功です!
これでターミナルを閉じても、PCの電源を切っても、VPSが生きている限りボットは永遠に動き続けます。

5. 応用:定期実行スクリプト(Cron)

ボット以外にも、Pythonを使えば「毎朝8時にニュースをLINEに送る」といった自動化も可能です。

SystemdではなくCron(クーロン)を使います。

crontab -e

記述例:

# 毎日 朝8:00に weather.py を実行
0 8 * * * /opt/my-scripts/venv/bin/python /opt/my-scripts/weather.py

ここでも「仮想環境内のPythonフルパスを指定する」のが、エラーを防ぐコツです。


まとめ:VPSは「24時間働くロボット工場」

いかがでしたか?
Systemdを使うことで、あなたの作ったプログラムは「趣味の工作」から「実用的なサービス」へと進化しました。

コウ君

感動です!
パソコンを閉じてもスマホから /ping したら返事が返ってきました!
エラーで止まっても Restart=always で勝手に生き返るなんて、ゾンビみたいで頼もしいです!

リナックス先生

ふふ、良い例えね。
VPSはWebサイトを表示するだけでなく、こうやって裏方として働く「ボット」や「スクリプト」の住処としても最適なの。
どんどん自動化して、生活を便利にしていきましょう!

▼ボット運用に最適なVPS

Pythonのボットやスクリプトを動かすだけなら、それほど高いスペックは必要ありません。月額数百円のエントリープランでも十分に動作します。まずはここから自動化ライフを始めてみましょう。

【2026年最新】Linuxサーバー構築におすすめのVPS比較3選!現役エンジニアが速度とコスパで厳選
Linuxの勉強、まだ「自分のPC」でやって消耗していませんか?「Linuxを覚えたいけど、環境構築でエラーが出て先に進めない…」「VirtualBoxを入れたらパソコンが重くなった…」これは、Linux学習を始める9割の人がぶつかる壁です...

コメント