追記: 2022/03/01にサービス提供終了します
とても悲しいですが、2022年3月1日(火)にサービスが終了するみたいです
この記事からHacobuneを使われた方には大変申し訳ないですが、他サービスへの移行をお願いします。
Discord Botについて紹介もしてるため記事は残して置きますが、Hacobuneではなく他のコンテナサービスで起動をお願いします。
他サービスで起動する方法について今後作成します。
概要
さくらインターネットのHacobuneというサービスでDiscordのBotを運用しています。この起動手順についてまとめます。
Hacobuneは今はβ版のお試し期間なので無料で使えます。すごく簡単なのでお試しください。
Node.jsとTypeScript、Dockerで作成した私のGithubレポジトリで環境を構築していきます。
できるようになること
- DiscordのBotをHacobuneで起動できる
- node, typescriptのDiscordBot開発のベースを作ることができる
必要なもの
- Hacobuneのアカウント
- 以下のマニュアルを参考にアカウントを作成してください
- Dockerで動作するDiscord BotのGithub Repository
- 今回はサンプルとして私のレポジトリを使用します。Node.jsとTypeScriptで開発しましたので参考にしてください。
- Discord Botアカウント、およびそのトークン
- 作成の方法と自分のサーバーへの追加方法は以下を参考にしてください。
サンプルプロジェクト・ソース
今回は私のDiscord Botテンプレートで説明します。
テストされる際はこちらをforkやcloneしてお試しください。
Discord Bot開発の記事ではないので深くは説明しないですが、discord.jsというnpmライブラリで開発をしています。
├ src/
| └ index.ts // DiscordBotの動作を記載するファイル。
|
├ .dockerignore // 軽量なDockerImageを作成するときに使うファイル。node_moduleと.gitが書いてあれば良いと思います。
├ .Dockerfile // DiscordBotのDockerImageを作成するために使うファイル。Hacobuneを使うにはこれが必須です。
├ .package.json // nodeを使うためのファイル
└ .tsconfig.json // TypeScriptを書くためのファイル
// .gitignore, README.md, package-lock.json は説明不要と思い省略しています
ソース説明
index.ts
とDockerfile
だけ記載します。他のファイルは私のレポジトリリンクから参照できます。
特に説明することもないですね。
この書き方であればTSでなくても良いと思いますがTemplateなのでとりあえずTSにしてます。
Botの動作は!ping
がチャンネルで入力されたときにpong
を返すようにしました。
import { Client } from 'discord.js';
import { config } from 'dotenv';
config();
(function main() {
const client = new Client();
client.on('message', async (message) => {
if (message.author.bot) return;
if (message.content === '!ping') {
message.channel.send('pong');
}
});
client.once('ready', () => {
console.log('Connected to Discord successfully!');
});
client.login(process.env.DISCORD_TOKEN);
})();
カッコつけてbuildとruntime用を分けてImageを作成してます。特に意味はないですが軽量化されている気がします。
Botのための特別なことはしておらず、ビルドして実行しているだけなのでご自由に変更してください。
# ----------
# build(tscを実行してjsを作る)用のstage
# ----------
FROM node:14 AS build
WORKDIR /build
COPY . .
RUN npm install
RUN npm run build
# ----------
# runtime用のstage
# 必要なファイルは dist/, node_modules/, package.json, package-lock.json のみ
# ----------
FROM node:14
WORKDIR /usr/src/app
COPY package*.json ./
# ランタイムに必要な依存パッケージのみインストールし、同時にnpmのcacheファイルを削除する
RUN npm install --production --cache /tmp/empty-cache && rm -rf /tmp/empty-cache
ENV TZ=Asia/Tokyo
# --fromで前半で記述したAS buildと命名した中間イメージから必要なファイルのみ抽出する事ができる(distディレクトリにtsコンパイル結果であるjsファイルが出力されている)
COPY --from=build /build/dist ./dist
CMD [ "npm", "start" ]
Github連携でHacobuneにDiscord Bot導入
-
プロジェクトからDiscord Bot用プロジェクトを新規作成する。
今回はテストなのでDiscord Botという名前と適当な説明を入力し、作成ボタンをクリックします。
-
アプリケーションからDiscord Botのアプリケーションを新規作成する。
今回はGithub連携でソースを取得するので、必要な情報を入力し、GithubをクリックしてDiscord Bot用のRepositoryを選択します。
-
Botの起動に**.envファイルが必要なので設定ファイルから追加します。
設定ファイルのモーダルに事前に用意したDiscord BotのTokenを入力し、作成ボタンをクリック。
入力する内容は以下の形式で入力します。もしご自身のプロジェクトで他にも環境変数があるのであればこちらから追加してください。
DISCORD_TOKEN=コピーしたDiscordのBot Token
作成ボタンをクリックすると、入力したファイルが追加されていることがわかります。もしTokenを変更したい場合は、編集から変更**できます。
-
その他は変更せずに作成ボタンをクリック。
今回はリソースプランをフリーで作成していますが、もしBotからのレスポンスが遅いと感じた場合は上位のプランに変更することをおすすめします。
-
追加したbotのアプリケーションからログをクリックし、ビルドとアプリケーションのログを確認します。。
Dockerのビルドをリアルタイムで確認できますので、何かエラーがあればここから確認してください。
Successfully
とビルドが成功したら、アプリケーションログをクリックしてブラウザをリロードしてください。
Connected to Discord successfully!
と表示されて、ビルド完了しステータスが稼働中になっているはずです。
-
Botを招待したDiscordチャンネルのオンラインステータスを確認し、追加したBotアカウントがオンラインになっていれば成功です。
起動確認
オンラインが確認できるチャンネルで!ping
とメッセージを入力するとボットからpong
と返信があることがわかります。
これでHacobuneでのDiscord Botの起動が成功しました。
まとめ
Dockerで動くBot環境があれば簡単にHacobuneで環境を用意できます。
今なら無料で試すことができるのでDiscord Bot開発をしている人はぜひ試してください。