DiscordBot

Discord Botの開発 (サーバー構築)

前回はDiscordBotの開発でプログラムが動作するところまでを行いました。

Botプログラム自体は動作するようになりましたが、Botは常に起動した状態でなければなりません。
そのためにはBotをサーバーなどで動かす必要があります。
サーバー自体はレンタルサーバーか自宅サーバーとしてDockerを使用して動かすことにします。
Docker自体の構築方法は以前に紹介しておりますので、今回は簡潔にPythonとDockerを使用してBotを動かす方法を紹介します。

0. 環境

  • OS: MacOS 15
  • Python: 3.9
  • Docker: 28.1.1
  • docker-compose: 28.1.1

1. Python環境の準備

前回からの続きで「py_discord」という環境を構築した状態となっているはずです。
この環境を以下のコマンドを使用して「requirements.txt」に保存しておきます。
この「requirements.txt」は後でDockerのイメージを作成する際に使用します。

pip freeze > requirements.txt

2. Dockerfileの作成

Docker自体はすでに環境が用意されているものとなります。
以下の内容で「Dockerfile」を作成します。

# ベースとなるPythonの公式イメージを選択 (軽量なslim版がおすすめ)
FROM python:3.9-slim

# コンテナ内の作業ディレクトリを設定
WORKDIR /app

# 依存関係のファイルを先にコピー
COPY requirements.txt .

# pipを使って依存関係をインストール
# --no-cache-dirでキャッシュを残さず、イメージサイズを小さくする
RUN pip install --no-cache-dir -r requirements.txt

# プロジェクトのすべてのファイルをコンテナにコピー
COPY . .

# 6. コンテナが起動したときに実行するコマンドを指定
CMD ["python", "main.py"]

3. docker-compose.ymlの作成

次に「docker-compose.yml」を作成します。
ちなみに最近のdocker-composeでは「version: ‘3’」の指定は不要になっています。

services:
  discord-bot:
    # Dockerfileがある場所を指定してイメージをビルド
    build: 
      # ビルドコンテキストはカレントディレクトリ
      context: .
      # Dockerfileの場所を具体的に指定
      dockerfile: .docker/Dockerfile
    # .envファイルから環境変数を読み込む
    env_file:
      - ./.env
    # コンテナが何らかの理由で停止した場合、常に自動で再起動する
    restart: always

以下のファイル構成となります。(.envは環境に応じて用意してください)

.
├── .docker
│   └── Dockerfile
├── py_discord # 仮想環境
│   ├── bin
│   ├── include
│   ├── lib
│   └── pyvenv.cfg
├── .env
├── docker-compose.yml
├── main.py
└── requirements.txt

4. Botの起動

以下のコマンドでBotを起動します。

docker-compose up -d

これで随時Botが起動し、Discordのサーバーで動作するようになります。