本文へスキップ
Discord

Discordサーバーを構築する

このガイドでは、Discord Developer Portalでアプリケーションとボットを作成し、トークンを守り、コミュニティサーバーに招待し、LinuxのVPSで24時間運用する方法(systemd、pm2、Docker)を説明します。所要時間は30〜45分で、小規模なボットなら低価格のVPSで十分です。

最終更新日:2026/10/9

このガイドでは、Discord Developer Portalでアプリケーションとボットを作成し、トークンを守り、コミュニティサーバーに招待し、LinuxのVPSで24時間運用する方法(systemd、pm2、Docker)を説明します。所要時間は30〜45分で、小規模なボットなら低価格のVPSで十分です。

手順ごとのインストール

  1. Discordアカウントで2段階認証を有効にし、現行のNode.js(またはPython)のLTS版をインストールします。

  2. discord.com/developers/applicationsでアプリケーションを作成します(New Application)。

  3. Botタブでトークンを生成(Reset Token)し、パスワードマネージャーか.envファイルに一度だけコピーします。

  4. 実際に使うPrivileged Gateway Intents(Presence、Server Members、Message Content)だけを有効にします。

  5. 「ボット招待リンク」ツールで招待リンク(botとapplications.commandsスコープ、最小限の権限)を生成します。

  6. リンクを開き、サーバー(「サーバー管理」権限が必要)を選んで認証します。

  7. 最小限のボット(discord.js)を書き、.envのトークンでローカルテストします。

  8. LinuxのVPSを準備します:非rootユーザー、ファイアウォール、Node.js(「VPSの準備」ガイド参照)。

  9. コードをデプロイし、トークンを.env(chmod 600)に置いて、systemd、pm2、Dockerでボットを起動します。

  10. コミュニティサーバーを設定します:ロール、チャンネル、権限、Webhook、モデレーション。

前提条件

Discordアカウント(2段階認証あり)、所有または管理するサーバー、Node.js LTS(またはPython)が必要です。インストールするdiscord.jsのバージョンが要求する最低バージョンを確認してください。ホスティングにはLinux VPS(小規模ボットなら通常1 vCPU・512 MB〜1 GBのRAMで足ります。コードに応じて調整)。ボットトークンは絶対に共有しないでください。ボットの完全な制御権を与えます。

アプリケーションとボットの作成

  • discord.com/developers/applications → New Application → 名前 → Create。
  • General Information:Application ID(公開のclient_id)をコピー。
  • Bot → Reset Token → トークンをコピー(表示は一度だけ)。
  • トークンが漏れた場合(公開Gitリポジトリ、スクリーンショットなど)は直ちにReset Tokenを実行。

トークンの保護(.env)

トークンをコードに書かないでください。Gitから除外し、自分だけが読めるように.envファイルを使います。例(ダミー値):

echo 'DISCORD_TOKEN=ChangeMe!' > .env
chmod 600 .env
echo '.env' >> .gitignore

Privileged Intents

  • Server Members Intent:メンバーの参加・退出イベントと全メンバー一覧。
  • Message Content Intent:メッセージ本文の読み取り(スラッシュコマンドのみなら不要)。
  • Presence Intent:メンバーのプレゼンス状態。
  • 一定数のサーバー(執筆時点のDiscordポリシーでは100)を超えると、これらのインテントにはボットの認証が必要です。最新のポリシーを確認してください。

ボットを招待する

招待リンクは次の形式です(ダミーのclient_id、permissions = 3072:チャンネルの閲覧と書き込み)。権限計算機で整数を求め、専用ツールでリンクを組み立てます:

https://discord.com/oauth2/authorize?client_id=123456789012345678&scope=bot%20applications.commands&permissions=3072

最小限のボット(discord.js)

インストール:npm init -y && npm install discord.js dotenv。index.js(最新APIはdiscordjs.guide参照):

require('dotenv').config();
const { Client, Events, GatewayIntentBits } = require('discord.js');

const client = new Client({ intents: [GatewayIntentBits.Guilds] });

client.once(Events.ClientReady, (c) => console.log(`Logged in as ${c.user.tag}`));

client.login(process.env.DISCORD_TOKEN);

systemdで運用

/etc/systemd/system/discord-bot.service(Userとパスを調整、nodeのパスは「which node」で確認)。その後:sudo systemctl daemon-reload && sudo systemctl enable --now discord-bot、ログ:journalctl -u discord-bot -f。

[Unit]
Description=Discord bot
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=botuser
WorkingDirectory=/home/botuser/bot
EnvironmentFile=/home/botuser/bot/.env
ExecStart=/usr/bin/node index.js
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

pm2で運用

pm2はクラッシュ時にプロセスを再起動します。「pm2 startup」が表示するsudoコマンドを実行すると、起動時にpm2が立ち上がります。

sudo npm install -g pm2
pm2 start index.js --name discord-bot
pm2 save
pm2 startup
pm2 logs discord-bot

Dockerで運用

以下のDockerfile(Nodeのバージョンはdiscord.jsの要件に合わせてください)。トークンはenvファイルで渡してビルド・実行:docker build -t discord-bot . && docker run -d --restart unless-stopped --env-file .env --name discord-bot discord-bot

FROM node:lts-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
USER node
CMD ["node", "index.js"]

コミュニティサーバーの設定

  • ロール:役割別(管理者、モデレーター、メンバー)に最小限の権限で作成します。ボットのロールは管理対象ロールより上に置きます。
  • チャンネル:カテゴリー(ようこそ、ルール、一般、サポート、ボイス)を作り、権限はチャンネルごとでなくカテゴリー単位で設定します。
  • Webhook:ゲームサーバーの状態を投稿するには「Webhook埋め込みビルダー」で埋め込みを作ります。
  • モデレーション:認証レベル、AutoMod、監査ログ。サーバー設定でモデレーターに2段階認証を必須にします。
  • 告知:game-rank.com/jeuxにゲームサーバーを登録して見つけてもらいましょう。

トラブルシューティング

  • 「TokenInvalid」/「An invalid token was provided」:トークンの誤り、余分なスペース、またはリセット済み。Reset Tokenで再取得してください。
  • 「Used disallowed intents」:Botタブで該当する特権インテントを有効にするか、コードから外します。
  • 「Missing Access」/「Missing Permissions」:ボットにそのチャンネルでの権限がないか、ロールの階層が低すぎます。
  • スラッシュコマンドが表示されない:招待にapplications.commandsスコープがなかったか、コマンドが未登録(デプロイ)です。正しいリンクでボットを再招待してください。
  • VPS上でボットが切断される:ログ(journalctl -u discord-bot -f)、空きメモリ、Restart=on-failureの設定を確認します。

よくある質問

Discordボットは無料ですか?
開発者ポータルでのボット作成は無料です。VPSや常時稼働のPCなどのホスティングだけが月数ユーロかかる場合があります。
トークンが漏れたらどうすればよいですか?
BotタブですぐにReset Tokenを押し、.envを更新してボットを再起動し、サーバーの監査ログを確認します。
systemd、pm2、Dockerのどれ?
systemdは最も軽量でLinuxに統合済み、pm2は複数のNode.jsプロセスを扱うときに便利、Dockerは環境を分離して再現性のあるデプロイを実現します。いずれもクラッシュ後にボットを再起動します。
ボットのホスティングに開放ポートは必要ですか?
不要です。ボット自身がDiscordへの外向き接続を開きます。管理用にSSHポートだけ到達可能であればよく、Webサーバーを公開する場合は別です。

Discordサーバー用ツール

Discord
Discordログイン不要
Discord Webhookメッセージを埋め込み・ライブプレビュー・JSON・curl例付きで作成。サイトから何も送信しません。
Webhook埋め込み開く
ドキュメント
Discord
Discordログイン不要
Discordの権限整数とチェックボックスを相互変換。公式のビット値を使用します。
権限ボット開く
ドキュメント
Discord
Discordログイン不要
ボットのOAuth2招待URLを作成:client_id、スコープ、権限、事前選択サーバー。
OAuth2ボット開く
ドキュメント