技術選定はとても大切です。一度運用を始めてしまえばなかなか切替えの効かないものだからです。とは言っても最初はとりあえず難しいことは考えずに始めてみたい、という意見も否定できません。ボットを作ることほど面白そうなこともないからです。
そのため、ここではまず簡単に始めてみることを前提に話を進めますが、それだけでなく、そのうち感じてくるであろう課題や、よくある落とし穴についても解説していきます。
プログラミング言語
どんなプログラミング言語でも長所と短所があります。ある言語では簡単にできたことが別の言語ではちょっと難しかったり、自分で仕組みを作らないといけなかったりします。
ですが、ほんのちょっとの手間を惜しんで目先の利益を得ることは、長い目で見ると保守や改修の手間が増えて負債に変わることもありますし、運用にあたっての費用がかさむこともあるでしょう。
ボットはその性質として一度作って終わりではなく、ある程度長い期間を想定して使われるものなので、はじめに十分検討することは後々生まれるコストを下げることにも繋がります。
何がオススメですか?
よくあるこの手の質問に答えるのは少々難しいです。あなたの理解度やスキルレベル、やる気がどれくらいあるのかわかりませんし、時間や金銭、開発環境の制約等も検討にあたっては必要になります。
長いものに巻かれよう
ソフトウェア開発において長いものに巻かれることは悪いことではありません。斜に構えた人は今流行りのプログラミング言語や技術に対して穿った視点を持つことがありますが、ユーザー数が多く、いろんな問題に対してノウハウが蓄積している状況ほど喜ばしいこともありません。
流行に乗っかることに対してありきたりさを感じなくもないですが、最初はそれでいいのです。近年は生成AIの進化も相まって、多く使われる言語ほど支援を受けやすく、開発の手助けにもなるでしょう。
だんだんと慣れてきて、使っているプログラミング言語に不満を感じてきたら自分が求める新天地を探す旅に出ましょう。星の数ほどはありませんが、自分の目的や思想により合致するプログラミング言語は見つけられるはずです。
- 人気のプログラミング言語で始めてみよう
- 蓄積されたノウハウを活用しよう
手軽に始めるなら
JavaScriptやPythonがおすすめです。巷の書店では入門書がたくさん並べられていますし、ウェブ上にもドキュメントが多数用意されています。スクリプト言語の特性を活かして少し書いては実行といった開発の反復もしやすいですし、プログラムの実行時に型が決まる動的型付け言語なので、データの型を強く意識する必要がなく見通しのよいコードになります。
人気の言語はライブラリも豊富で、Discordのボットを作るときにもほぼライブラリ任せにできます。作ったアプリケーションをデプロイするときも、今やクラウドアプリケーションプラットフォームなるものが存在し、制限枠内で無料で利用できるものもあります。
そのためプロトタイピング(試作)用途にはうってつけと言えます。第2回 提供価値を考えるでは提供価値を考えるという話をしたところではありますが、正直まだやりたいことがまだ明確に決まっていないことがあるかもしれません。そういったときにとりあえず始めて、ああでもないこうでもないとこねくり回すことで、やりたいことを徐々に形にしていくこともできます。まずは飛び込んでみるのもひとつのやりかたです。
もちろん便利な部分だけではなく、こうした言語にも弱点はあります。スクリプト言語は実行時にはじめてコードの正しさを検証して、コンピュータが理解できる形式に変換されて実行されるので初回起動が遅い傾向にあります。
また、静的型付け言語と比較して、実行速度は遅く、メモリの使用量が増えます。手軽に始めることはできるものの、実行時にその皺寄せがやってきます。処理に時間がかかり、メモリが多く必要であれば、それだけ計算能力が必要になるので、アプリケーションを実行するための費用が増えることにも繋がります。
- 初めてならJavaScriptやPythonを試してみよう
- 実行速度やメモリ消費量の面で不利であることを意識しよう
堅牢な言語への移行
コードの規模が大きくなってくると、動的型付け言語の性質が牙をむくこともあるでしょう。最初は型をそれほど意識しなくてよかったはずが、エラーを意識して堅牢なコードを書くために型や値のチェックをいくつも入れたり、入力値を検査したり、型ヒントや静的解析ツールを活用したりと、最初から静的型付け言語で開発していればよかったのではないか?と思えるような事態が起きます。
あるいは実行速度やメモリの面で、思ったよりも処理性能がなく、増えるユーザー数に対応できず頻繁にアプリケーションがクラッシュするとか、サーバーを増強するための費用がかかるといった問題にぶち当たるかもしれません。
そうなったら静的型付け言語への移行を検討するときかもしれません。JavaやC#は古くからある静的型付け言語の老舗ですし、近年ではGoやRustといった比較的新しいものもあります。動的型付け言語ほど簡単な記述はできなくなりますが、実行前に型が検査されますし、あらかじめコンピュータが解釈しやすい形に変換された上で実行されるので(コンパイルといいます)、品質や速度の面で得られるものは大きいと言えるでしょう。
最初から性能面に対して強い不安を抱く必要はありません。現代のコンピュータはJavaScriptやPythonを動かすだけであれば十分な性能を持っていますし、やっていくうちにこういった課題が生まれることは嬉しい悲鳴でもあるからです。
- 動的型付けのコードに限界を感じるときが来るかもしれない
- 堅牢さや性能が必要になったら静的型付け言語に入門してみよう
ライブラリ
ライブラリは特定の処理を一般化して使いやすいように機能をまとめたプログラムのことです。通常プログラミング言語が提供するのは言語機能と標準ライブラリだけなので、それ以上は自分で作るか、誰かが作ってライブラリとして提供しているものを使うことになります。
現代のアプリケーションは高度で複雑に進化しているため、よほど簡単か特定の分野に特化したアプリケーションでない限り、ライブラリを使わないことはまずあり得ません。なので、ライブラリの恩恵にあやかるわけですが、使いどころを見極めないと、思わぬ落とし穴や望まない事態を引き起こすことになります。
ライブラリが最善策とは限らない
ライブラリは便利なものですが、それを使うことが常にいいこととは限りません。まずライブラリは機能を一般化したものなので、あなたの課題をそのままに解決するものではありません。ライブラリの持つ便利な部分を拝借しつつも、自分が解決しなければならない課題については自分で対処しましょう。
ライブラリに依存しすぎることは避けねばなりません。例えばあなたの課題をズバリ解決するライブラリを見つけたとしましょう。そのライブラリ自体がアプリケーションのコアロジックとなってしまうのであれば、ライブラリが更新停止や開発中止の憂き目にあったときに、互換性のある別のライブラリを探してくるか、自分で開発しなければなりません。どちらもできないのであれば、あなたのアプリケーションはそこでおしまいになってしまいます。
長いものに巻かれようはライブラリにも当てはまります。数名のコントリビュータやメンテナーによって支えられている素晴らしいプロジェクトもありますが、一般的に人数規模の小さいプロジェクトはいつの間にか活動を停止している様子がしばしば見受けられます。単純に便利だからといって手出しをすると手痛いしっぺ返しを喰らうこともあるでしょう。
- ライブラリに依存しすぎないようにしよう
- ライブラリの持続性を判断しよう
コアロジックはあなたの課題です
コアロジックとは、アプリケーションが解決する問題のことです。例えば「お手」という入力に対して「ワン!」と返答することもそうですし、「X面ダイスをY個振った合計値を返す」もコアロジックと言えるでしょう。これらは第三者のライブラリで解決できるものではありませんし、あなたが責任を持って提供するべきものです。
いや、もしかしたらライブラリで同じ動作をするものがあるかもしれませんが、アップデートによって挙動が変わるかもしれません。しかしそれでは困るのです。あくまでライブラリは便利に利用しつつも、ライブラリに期待することとコアロジックを分離して責任範囲を明確にすることで、あなたのアプリケーションが思い通り動くことを保証して破壊的変更から守らなければなりません。
偉そうなことを言うけど、じゃあどうすればいいの?については、ちゃんと答えがあり、近年ではよく知られている階層型アーキテクチャやインタフェースという考え方を導入することで解決できます。これは今後この連載で扱います。
- ライブラリとコアロジックの責任範囲を明確にしよう
- ライブラリを変更することになっても移行しやすい作りにしよう
デプロイ先を検討しよう
作ったアプリケーションを実行環境に配置することをデプロイ(Deploy)と呼びます。デプロイ先は個人向けから企業向け、費用も安いものから高いものまで様々です。状況にあったデプロイ先を選ばないと、性能が低くてまともにアプリケーションが動かないこともありますし、逆に必要以上に費用が発生することもあります。
必要なもの
Discordのボットを動かすには、少なくとも作ったアプリケーションを動かす場所(デプロイ先)と、WebSocketまたはHTTPS接続できるエンドポイント(URL)が必要になります。この連載ではdiscord.jsを使ったWebSocketによるリアルタイム通信を採用するので、難しいことは知らなくても、デプロイ先だけ用意できれば大丈夫です。
事情によってライブラリによるWebSocketを使わずにHTTPSによるWebhookを採用するときには、追加でドメインの取得とそれに対するSSL/TLS証明書の取得が必要なことがありますが、証明書を取得するとなると個人としてはそこそこの費用がかかります。
しかしウェブにおいてセキュア通信が一般的となっている中で、お金を積まないと安全な通信ができないことは、誰の利益にもならないことは明白です。そのため無償TLS証明書発行サービスのLet’s Encryptがあり、個人向け開発ではデファクトスタンダードとなっています。証明書の有効期限は3ヶ月と短く設定されていますが、certbotを導入することで自動的に更新を行なってくれます。
- discord.jsをはじめとしたライブラリで簡単にボット開発を開始しよう
- HTTPSによるWebhookといった代替手段もあることを覚えておこう
クラウドプラットフォームへのデプロイ
Replitに代表されるアプリケーション実行プラットフォームには無料プランが存在します。制限はありますが、無料でアプリケーションの実行を試すことができます。まずはこういったサービスで感触を得てから、目的ごと段階的に別のサービスへの乗り換えを検討してもいいでしょう。
この連載では簡単のために、Replitへのデプロイを前提に話を進めていきます。
VPSへのデプロイ
仮想サーバーをレンタルするもので、国内ではさくらのVPSやConoHaが有名です。費用は最低でも月額600円程度です。
VPSでは管理者権限をもらえるので、自分のアプリケーションを動かすための環境構築に自由度がありますが、ほとんどのケースでLinuxを扱うことになるので、Linux OSに対する理解とUNIXコマンドをある程度扱えることと、基本的なセキュリティ対策が求められます。
2025年7月現在、無料のVPSサーバーがあります
XServer VPSは無料で試せるVPS環境です。無料の環境を維持するにはプランに応じて2日または4日ごとの手動契約更新が必要になりますが、VPSの感触を試してみたい人にとってはうってつけです。
クラウドサーバーへのデプロイ
Amazon Web Services, Google Cloud PlatformやMicrosoft Azureといったサービスのほか、国内でもさくらのクラウドがあります。
従量課金制といったこともあり、業務等である程度の経験がないと費用感を掴みにくく、クラウド破産も起きえるので、採用に際して慎重さが求められます。独自にリソース管理されたフルマネージド環境を扱うことになるので、サービスに対する知見も求められますが、使いこなせばVPSや自宅サーバーよりも費用を抑えることもできます。
自宅サーバーへのデプロイ
今や完全に物好きのための選択肢となりましたが、自分でサーバーを用意して環境構築を行い、インターネットに公開する方法です。サーバーを常に稼働させる必要があることと、HTTPSで利用する場合には、インターネット側からアクセスするための固定IPアドレスの契約またはDDNSサービスの利用が前提となります。
主な費用はサーバー機と電気代になりますが、Raspberry Piのような小型PCで費用を抑えることもできます。費用を固定費化できるという利点はありますが、機材的にスケールしにくいといった弱点がありますし、サービスが大きくなり、蓄積したデータに重要性が増してくるとバックアップはもちろん、停電や落雷といった災害に対する備えも重要になります。