discord.js による Discord Bot 開発
discord.js v14 系で Discord Bot を作る前に、Node.js 環境、Developer Portal、Token 管理、GatewayIntentBits、スラッシュコマンド、運用前チェックの流れを整理します。
この記事で分かること
- Node.js と npm の準備
- Developer Portal と Token の扱い
- Client、Events、GatewayIntentBits の基本
- スラッシュコマンド登録と Interaction 処理
- TypeScript 化と運用前チェック
discord.js は、Node.js で Discord Bot を作るための代表的なライブラリです。イベント、スラッシュコマンド、ボタン、Embed などを JavaScript または TypeScript で扱えます。
discord.js は版による書き方の差が大きいため、古い記事のコードをそのまま利用すると動かないことがあります。この記事では v14 系の考え方で、環境準備から運用前チェックまでを整理します。
開発環境を用意する
Node.js と package.json
まず Node.js のバージョンと package manager を決めます。discord.js の公式ガイドは、環境準備、アプリケーション設定、Bot の追加、コマンド作成へ段階的に進む構成です。
プロジェクトでは package.json を作り、依存関係と起動コマンドを管理します。npm run start で何が起動するのか、開発用と本番用のスクリプトをどう分けるのかも決めておきます。
確認ポイント
node --versionで実行環境を把握したpackage.jsonと lockfile をリポジトリで管理している- CommonJS と ESM のどちらで書くかを決めた
- 起動コマンドを
scriptsにまとめた
Developer Portal と Token
Bot を動かすには、Developer Portal で Application と Bot を用意し、導入URLや権限、Intent を整えます。Portal 側の見方はDiscord Developer Portal 解説で詳しく扱っています。
Token は、環境変数やホスティングサービスのシークレット機能で渡します。学習用の config.json を公開リポジトリへ含めると Token 漏えいにつながるため、.gitignore とデプロイ先の変数設定を早めに整えます。
⚠️ Bot Token、client secret、Webhook URL は公開しません。漏えいした可能性がある場合は、値を伏せるだけでなく再生成して古い値を無効にします。
小さく起動する
Client と GatewayIntentBits
最初の目標は、Client を作成し、必要最小限の Intent を指定してログインし、ready イベントで起動を確認するところです。discord.js v14 では、公式ガイドの Creating the main file で Client、Events、GatewayIntentBits を使う最小構成が紹介されています。
Intent は、Bot が受け取るイベントの範囲を決めます。必要なイベントだけを指定し、動かないときはライブラリ別トラブルシューティングで版、Intent、partials、登録処理を切り分けます。
イベント処理
discord.js では、ready、interactionCreate、messageCreate などのイベントを処理します。最初からすべてを扱わず、目的の機能に必要なイベントだけを追加します。
イベントファイルを分ける場合は、読み込み処理、エラー時のログ、非同期処理の扱いを決めておきます。イベントが届かないときは、コードの関数名だけでなく、Intent、Bot の権限、導入先サーバー、起動ログを合わせて見ます。
コマンドと Interaction
スラッシュコマンド登録
スラッシュコマンドは、登録する処理と、実行された Interaction に応答する処理を分けて考えます。コマンド定義を作るだけでは利用者に表示されず、登録先と反映範囲も関わります。
開発中はテスト用サーバーで挙動を見ながら進めると、反映待ちや権限の切り分けがしやすくなります。公開範囲、管理者専用コマンド、引数の型、失敗時の返信を先に決めておくと、後からコマンドが増えても整理しやすくなります。
reply、defer、表示範囲
Interaction は、利用者の操作に対して Bot が応答する仕組みです。処理に時間がかかる場合、先に応答を保留し、あとから結果を返す設計が必要になることがあります。公開返信にするか、操作した本人だけに見せるかも機能ごとに判断します。
ボタン、セレクトメニュー、モーダルを扱う場合は、custom id、操作できるユーザー、期限切れ後の扱いを決めます。Interaction 周りで詰まったらコマンド・Interaction の逆引きを参照します。
保守しやすくする
TypeScript と分割
discord.js は JavaScript でも利用できますが、機能が増えるほど TypeScript の型が役立つ場面があります。コマンド、イベント、設定を分けると、変更箇所が追いやすくなります。
ただし、最初から複雑なフレームワーク構成にする必要はありません。まず1つのコマンドを安全に動かし、次にイベント分割、コマンド分割、設定管理、テストの順に広げます。
運用前チェック
ローカルで動いた Bot でも、ホスティング先では環境変数、起動コマンド、Node.js のバージョン、ログの見え方が変わります。デプロイ前に、起動方法と復旧手順を運用メモに残します。
公開サーバーへ導入する前に、テストサーバーで権限、Intent、コマンド登録、エラー時の応答を見ます。運用に入る場合は、Bot 運用前チェックとホスティングのトラブルシューティングも参考にしてください。
確認ポイント
- Token を環境変数やシークレットで渡している
- 起動コマンドと Node.js のバージョンを固定した
- guild/global の登録範囲を目的に合わせて選んだ
- エラー時に利用者向け返信と管理者向けログを分けた