Contents
1️⃣ Discord 開発者ポータルで Bot アプリとトークンを取得する手順
手順概要(画像付きの公式ページでも同様)
| 手順 | 操作内容 |
|---|---|
| 1 | https://discord.com/developers/applications にアクセスし、Discord アカウントでログイン |
| 2 | 右上の 「New Application」 をクリック → 任意の名前を入力して 「Create」 |
| 3 | 左メニューから 「Bot」 を選択 → 「Add Bot」 → 確認ダイアログで 「Yes, do it!」 |
| 4 | 作成された Bot のカードにある 「Copy」(または 「Reset Token」)をクリックし、トークンを取得 |
| 5 | 同じ画面左下の 「OAuth2」 → 「URL Generator」 で bot スコープと必要な権限を選び、生成された URL を使ってサーバーへ招待 |
重要:トークンは 絶対にコードやリポジトリに直接書かない ようにしてください。漏洩すると Bot が不正利用されます。
トークン管理のベストプラクティス
.envファイルに保存
dotenv
BOT_TOKEN=YOUR_DISCORD_BOT_TOKEN_HERE- リポジトリに
.envを含めない -
プロジェクト直下に以下の内容で
.gitignoreを作成gitignore
# Node / Python 用環境変数ファイル
.env# VSCode の設定ファイル(任意)
.vscode/# OS が生成する不要ファイル
Thumbs.db
Desktop.ini
git status で除外が反映されていることを確認
- 変更後は必ず -
GitHub・Replit 等の UI からシークレットとして登録
- GitHub → リポジトリ > Settings > Secrets and variables > Actions に
BOT_TOKENを追加 -
Replit の左メニュー Secrets タブに同名で入力
-
定期的なトークンローテーション
開発者ポータルの「Reset Token」から新しいトークンを取得し、.envとシークレットを更新して再デプロイする習慣をつけると安全性が向上します。
2️⃣ Gateway Intents と Bot 権限の設定
必要な Intent とその役割(2024 年時点)
| Intent | 用途 | 設定場所 |
|---|---|---|
MESSAGE_CONTENT |
ユーザーが送信したテキストメッセージを取得 | Bot 設定画面 → Privileged Gateway Intents で有効化 |
GUILDS |
サーバー情報の取得・コマンド登録 | デフォルトで有効 |
GUILD_MESSAGES |
ギルド内のメッセージイベント受信 | デフォルトで有効 |
※注意:
MESSAGE_CONTENTは「Privileged」Intent に該当するため、必ず開発者ポータル側でも有効化してください。無効のままだとMissing Intentエラーが発生します。
招待 URL 生成時に付与すべき最低権限
| 権限 | 説明 |
|---|---|
| Send Messages | メッセージ送信 |
| Read Message History | 過去メッセージの取得(Ping の応答だけでも必要) |
これらを選択すれば、基本的なスラッシュコマンドは問題なく動作します。追加機能が必要になったら、その都度権限を拡張してください。
3️⃣ Node.js 環境構築と discord.js v15 での Ping Bot 実装
3‑1. 推奨環境
| 項目 | バージョン(執筆時点) |
|---|---|
| Node.js | 20.x 系(LTS) |
| npm | 10.x 系 |
| discord.js | v15(最新安定版) |
公式は「LTS バージョンであれば問題なく動作する」としています。新バージョンがリリースされたら、公式ドキュメント を確認してください。
3‑2. Node.js と npm のインストール手順(macOS / Linux / Windows 共通)
|
1 2 3 4 5 6 7 8 9 10 |
# macOS/Linux (Homebrew がある場合) brew install node@20 # Windows (PowerShell) winget install OpenJS.Nodejs.LTS # バージョン確認 node -v # => v20.x.x npm -v # => 10.x.x |
3‑3. プロジェクト作成と依存パッケージのインストール
|
1 2 3 4 5 6 7 8 |
mkdir discord-ping-bot && cd discord-ping-bot # npm 初期化(質問はすべてデフォルトで OK) npm init -y # 必要ライブラリをインストール npm i discord.js@15 dotenv # dotenv は .env 読み込み用 |
3‑4. Ping Bot のサンプルコード
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
// index.js require('dotenv').config(); // .env をロード const { Client, GatewayIntentBits } = require('discord.js'); const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent, ], }); client.once('ready', () => { console.log(`✅ Logged in as ${client.user.tag}`); }); // スラッシュコマンドのハンドリング client.on('interactionCreate', async interaction => { if (!interaction.isChatInputCommand()) return; if (interaction.commandName === 'ping') { const latency = Date.now() - interaction.createdTimestamp; await interaction.reply(`🏓 Pong! Latency: `${latency}ms``); } }); client.login(process.env.BOT_TOKEN); |
package.json に起動スクリプトを追加
|
1 2 3 4 5 6 |
{ "scripts": { "start": "node index.js" } } |
3‑5. Bot のローカル起動と確認手順
|
1 2 3 |
npm run start # コンソールに「✅ Logged in as <BotName>#xxxx」が表示されれば成功です。 |
デバッグヒント
-Invalid Tokenが出たら.envの文字列やシークレット設定を再確認。
-Missing IntentエラーはMESSAGE_CONTENTが有効化されていないときに発生します。
4️⃣ Python 環境構築と discord.py 2.x での同等実装
4‑1. 推奨環境
| 項目 | バージョン(執筆時点) |
|---|---|
| Python | 3.11 系 (公式 LTS) |
| discord.py | 2.x 系(最新安定版) |
| python-dotenv | 環境変数読み込み用 |
4‑2. Python と仮想環境のインストール
|
1 2 3 4 5 6 7 8 9 10 |
# macOS / Linux (Homebrew がある場合) brew install python@3.11 # Windows (PowerShell) winget install Python.Python.3.11 # バージョン確認 python3 --version # => Python 3.11.x pip3 --version # => pip 23.x |
仮想環境作成と有効化
|
1 2 3 |
python3 -m venv bot-env source bot-env/bin/activate # Windows: .\bot-env\Scripts\activate |
4‑3. 必要パッケージのインストール
|
1 2 |
pip install -U "discord.py>=2.0" python-dotenv |
4‑4. Ping Bot のサンプルコード
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# bot.py import os import discord from discord import app_commands from dotenv import load_dotenv load_dotenv() # .env をロード intents = discord.Intents.default() intents.message_content = True # MESSAGE_CONTENT を有効化 bot = discord.Client(intents=intents) tree = app_commands.CommandTree(bot) @bot.event async def on_ready(): await tree.sync() # スラッシュコマンドを Discord に登録 print(f'✅ Logged in as {bot.user}') @tree.command(name='ping', description='Bot のレイテンシを返します') async def ping(interaction: discord.Interaction): latency = round(bot.latency * 1000) await interaction.response.send_message( f'🏓 Pong! Latency: `{latency}ms`' ) bot.run(os.getenv('BOT_TOKEN')) |
.env の例
|
1 2 |
BOT_TOKEN=YOUR_DISCORD_BOT_TOKEN_HERE |
4‑5. ローカルでの起動手順
|
1 2 3 |
python bot.py # コンソールに「✅ Logged in as …」と表示されたら成功です。 |
5️⃣ よくあるエラーと対処法(共通)
| エラー | 原因例 | 対策 |
|---|---|---|
| Invalid Token | .env のスペース、改行ミス、シークレット未設定 |
トークンを再コピーし、環境変数名 BOT_TOKEN が正しいか確認 |
| Missing Intent | 開発者ポータルで MESSAGE_CONTENT がオフ、コードに未指定 |
ポータル → Bot 設定 → Privileged Gateway Intents をオンにする。コードでも MessageContent / intents.message_content = True を追加 |
| Rate Limit (429) | 短時間に大量の API 呼び出し(例:連続メッセージ送信) | 1 秒以上の間隔を設けるか、エラーハンドラで retry-after ヘッダーを取得して待機 |
| Command not registered | スラッシュコマンドが同期されていない | 起動時に await tree.sync()(Node では client.application?.commands.set([...]))を呼び出す。デプロイ後は数分待つことも必要 |
6️⃣ 無料クラウドサービスへのデプロイ
6‑1. Replit にデプロイする手順
| 手順 | 内容 |
|---|---|
| 1 | Create repl → 「Import from GitHub」か「Node.js / Python」テンプレートで新規作成 |
| 2 | 左メニューの Secrets タブを開き、BOT_TOKEN に取得したトークンを貼り付け |
| 3 | package.json の "start" スクリプトが自動実行されるので Run ボタンで起動 |
| 4 (任意) | 常時稼働させたい場合は while True: time.sleep(60) 等の keep‑alive コードを追加 |
注意:Replit の無料プランは一定時間アイドルになるとスリープします。軽いハートビート(例: 5 分ごとの
console.log('keep-alive'))でスリープ防止が可能です。
6‑2. Railway にデプロイする手順
| 手順 | 内容 |
|---|---|
| 1 | Railway にサインイン → New Project → 「Deploy from GitHub」 |
| 2 | 対象リポジトリを選択し、Variables タブで BOT_TOKEN を設定 |
| 3 | Settings → Deployments で「Auto deploy on push」を有効化 |
| 4 | デプロイ完了後に表示されるログ画面で「✅ Logged in as …」を確認 |
6‑3. 環境変数だけで安全に運用するためのチェックリスト
- [.gitignore に
.envが入っているか] - [GitHub シークレットと Replit / Railway の Secrets が最新トークンになっているか]
- [コード中に
process.env.BOT_TOKEN(Node)またはos.getenv('BOT_TOKEN')(Python)が正しく呼び出されているか] - [定期的にトークンをリセットし、再デプロイする手順がドキュメント化されているか]
7️⃣ 学習リソースまとめ
| カテゴリ | 推奨リンク |
|---|---|
| 公式マニュアル | - discord.js v15: https://discordjs.dev/v15/ - discord.py 2.x: https://discordpy.readthedocs.io/en/stable/ |
| 日本語解説記事 | - note「Discord Bot 入門」:https://note.com/structure_block/n/n1408a199b023 - Qiita「Pythonで実装する Discord Bot」:https://qiita.com/1ntegrale9/items/9d570ef8175cf178468f |
| 動画チュートリアル | - YouTube 公式 Discord 開発者チャンネル(最新バージョン解説) |
| 無料ホスティング例 | - Replit Docs: https://docs.replit.com/ - Railway Docs: https://railway.app/docs |
✅ まとめ
- Bot とトークンは開発者ポータルで取得し、
.envに保存・Git 管理から除外 - 必要な Intent (
MESSAGE_CONTENT) と最低権限(Send Messages, Read Message History)を必ず有効化 - Node.js (discord.js v15) または Python (discord.py 2.x) のいずれかで Ping Bot をローカル実行
- エラーはトークン・Intent・レートリミットが主因。公式ドキュメントと本チェックリストで対処
- Replit・Railway 等の無料クラウドへデプロイし、環境変数だけで安全に運用
上記を順に実践すれば、初心者でも 30 分以内に動く Discord Bot を手元に作成でき、次のステップとしてコマンド追加やデータベース連携といった高度機能へスムーズに移行できます。 Happy coding!