Herokuの無料枠が無くなった今、どのホスティングサービスを使う?
Discordボットなど、Herokuの無料枠を利用して公開していた方は多いと思います。
そんな中、2022年の8月25日にHeroku DynosやHeroku Postgresなどの無料プランの廃止がアナウンスされました。
私は当時Discordボットなどを公開していなかったので影響はなかったのですが、動的サイトなどを公開したいと考えていたので、どうしようかと考えていました。いろいろ探したサービスなどあまりピンとこず、導入も大変そうだなぁと諦めていました。
それから月日が経ち、最近Deno Deployに出会いました。
そもそもDeno Deployとは?
Hassle-free platform for serverless JavaScript applications
引用: Deno Deploy公式サイト
翻訳すると
サーバーレスJavaScriptアプリケーションのための手間いらずのプラットフォーム
となります。
つまり、JavaScriptアプリケーションを簡単に公開できるプラットフォームとなっています。
DenoでDiscordボットの作成
DenoでDiscordのボットを作成するために、今回はDiscordenoを使っていきます。
開発環境
開発環境は以下のとおりです。
名前 | バージョン |
---|---|
Deno | 2.0.2 |
TypeScript | 5.6.2 |
Discordeno | 18.0.1 |
Discordボットの準備
実際にコードを書いていく前に、ボットの準備しましょう。
Discord Developer Portalにアクセスします。
アクセスしたら、画面右上にあるNew Applicationを押してボットの準備をしましょう。
そうしたら、出てきたフォームに名前を入力し、
By clicking Create, you agree...
にチェックを入れて利用規約と開発者ポリシーに同意して、
Createをクリックし、ボットを作成しましょう!
Discordボットのトークンの取得
ボットの作成ができたら、左のサイドメニューからBotを選択し、Reset Tokenを押してください。
Reset Bot's Token?
Your bot will stop working until you update the token in your bot's code.
とでてきますが、本当にリセットするの?と言われているだけなので、Yes, do it! を押しましょう。
そしたらトークンが表示され、コピーできるのでコピーしましょう。
ボットのトークンは第三者に知られないようしてください。
Botが乗っ取られます。
また、この画面を更新するとトークンが見えなくなってしまうので、どこかにメモしていてください。
同じ画面で少し下に下がると、ボットの権限を設定する項目があるので、必要に応じて設定しましょう。
今回は管理者権限、Administratorを設定しています。
Discordボットをサーバーに招待しよう!
はじめに、招待リンクの準備をしましょう!
左のメニューからInstallatioを選択しGuild Installの項目まで移動してください。
そしたら、SCOPESにbot
を追加し、PERMISSIONSにはAdministrator
Bot Permissionと同じものに設定し、Saveしましょう!
サンプルコードの実行
以下のリポジトリのコードをダウンロードし、実行してみましょう!
ダウンロードしたコードで、先ほど取得したトークンを設定しましょう。
.env
内の、<YOUR_TOKEN_HERE>
の箇所を取得したトークンに設定してください。
BOT_TOKEN = <YOUR_TOKEN_HERE>
そしたら、次のコマンド
deno task start
で実行してください。
ボットがオンラインになっていたら成功です!
簡単なスラッシュコマンドの実装
こちらもサンプルを用意しております。
実装したhello_world
コマンドを実行すると、こんにちはと表示されるはずです。
Deno Deployにデプロイ
まずデプロイするために、DiscordボットのコードをGithubリポジトリにアップロードしてください。
次に、Deno Deployにアクセスし、New Projectから先ほどアップロードしたリポジトリを選択します。
次に、少し下のほうにある、Project Configurationから
Project Name
からプロジェクト名を設定し、
Entrypoint
をmain.ts
に設定してください。
(ボットの起動をindex.ts
などに設定している方はそちらにしてください)
それらが済みましたら、Deploy Projectでプロジェクトのデプロイが完了します!
BOT_TOKENの設定
そのままデプロイすると、以下のようにエラーが発生します。
これはmain.ts
の11行目、
const BotToken: string = Deno.env.get("BOT_TOKEN")!;
の部分で取得している環境変数のBOT_TOKEN
がDeno Deployでは設定されていないからです。
この画面のままですと、環境変数を設定できないので、Account Overviewに戻り当該のプロジェクトを選択します。
そうしてでてきた画面の右上、Settingsを選択してください。
少し下にスクロールすると、Environment Variablesがあるので、Add Variableを押し、
Key
にBOT_TOKEN
、VALUE
には.env
に設定していた自身のトークンを設定してください。
その後、Save (1 new) を押して環境変数の設定は完了です!
デプロイが成功すると、Botがオンラインになるのを確認してください!
Discordボットの常時起動
Deno Deployは、双方向通信を維持できないため、5分ほどでボットがオフラインになります。
なので、ボットがオフラインになるまでに継続的にリクエストを送り続けます。
Deno Cronの使用
そもそもDeno Cronは、スケジュールされたジョブを簡単に作成できるものです。
main.ts
の一番下の行に次のコードを追加します。
Deno.cron("Continuous Request", "*/2 * * * *", () => {
console.log("running...");
});
このコードは2分毎にコンソールにrunning...
と出力するだけのものですが、これを実行するだけで、Discordボットはオフラインにならなくなります。
コードを追加したら、リポジトリを更新しておいてください。
更新すると、プロジェクトのLatest Deploymentsに最新の状態に更新されているはずです。
おめでとうございます!これで、Discordボットの常時稼働ができました!
(今の所2分毎でオフラインになりませんが、もう少し間隔を空けることも可能かもしれません。)
参考にさせていただいた記事