Contents
無料で Discord Bot を常時稼働させるための実践ガイド(2024‑2025 年版)
本稿は、2024 年 4 月現在に公式情報や公開されているドキュメントを元に作成しています。
将来的なプラン変更やサービス停止のリスクは各プロバイダーの利用規約をご確認ください。
1. 無料ホスティング市場の現状
- 無料枠は多くのクラウドプロバイダーで提供されているが、CPU・メモリ・ストレージに明確な上限が設定されています。
- Discord Bot のように 常時稼働かつ軽量(数十 MB のコードと少量のネットワーク I/O)であれば、無料枠でも十分に運用可能です。
- 2024 年現在、特に以下の 5 社が日本からも比較的利用しやすいと評価されています。
| サービス | 無料枠の概要(2024‑04 時点) |
|---|---|
| Oracle Cloud Always Free | Arm Ampere A1 マイクロインスタンスを最大 2 台まで提供。合計 0.5 vCPU + 1 GB RAM、ブロックストレージは 100 GB(※常時稼働は可能だがリソース上限あり)【[Oracle Docs]】 |
| Railway | 月間 750 時間 のコンピューティング時間と 512 MB RAM、ディスクは 500 MB SSD。利用量が上限に達すると自動スリープ【[Railway Pricing]】 |
| Render (Free) | 0.5 vCPU(共有)+ 256 MB RAM、ストレージ 1 GB SSD、月間 100 時間 の実行時間(スリープ除く)【[Render Docs]】 |
| Fly.io (Free Credit) | 無料クレジット $20(約 30 日分)で 2 vCPU + 512 MB RAM を利用可能。クレジット消化後は有料へ移行【[Fly.io Pricing]】 |
| Replit (Free) | 1 vCPU(共有)+ 500 MB RAM、プロジェクト単位で 1 GB のストレージを提供。15 分のアイドルでスリープし、常時稼働は不可【[Replit Docs]】 |
ポイント:
常時稼働が絶対条件なら、Oracle Cloud Always Free が唯一「スリープしない」プランです(ただし CPU・メモリは最小)。
デプロイの手軽さを重視するなら Railway と Replit が UI/CLI 共にシンプル。
エッジロケーションで低遅延が必要な場合は Fly.io* が有利です。
2. 主要サービス比較表とポイント解説
| サービス | CPU / コア* | メモリ | ストレージ | 月間無料上限 | 主なリージョン | デプロイ手段 | 対応言語 (代表) |
|---|---|---|---|---|---|---|---|
| Oracle Cloud Always Free | 0.25 vCPU ×2(合計 0.5) | 1 GB | 100 GB Block Storage | 常時稼働可能(リソース上限あり) | US East、Europe West など 6 カ所 | OCI CLI / Terraform / Docker | Node.js, Python, Java |
| Railway | 1 vCPU (共有) | 512 MB | 500 MB SSD | 750 h/月(約 31 日分) | グローバル (AWS CloudFront) | Railway CLI / GitHub Actions | Node.js, Python |
| Render Free | 0.5 vCPU (共有) | 256 MB | 1 GB SSD | 100 h/月(スリープ除く) | US East、Europe North | Render Dashboard / Docker | Node.js, Python |
| Fly.io (Free Credit) | 2 vCPU (Shared) | 512 MB | 160 GB Persistent Volume | $20 クレジット ≈ 30 日間 | グローバル(エッジ) | flyctl CLI / Docker | Node.js, Python |
| Replit Free | 1 vCPU (共有) | 500 MB | 1 GB プロジェクト単位 | スリープあり、15 分アイドルで停止 | US West | Replit IDE / repl.it CLI | Node.js, Python |
*「CPU / コア」は無料枠で割り当てられる概算値です。実際のパフォーマンスは共有リソースに依存します。
各サービスの選び方
| 条件 | 推奨サービス |
|---|---|
| 常時稼働が必須(スリープ不可) | Oracle Cloud Always Free |
| 最も簡単にデプロイしたい | Railway、Replit |
| エッジで低遅延を狙う | Fly.io |
| 無料枠のリソースを最大限活用したい | Railway(750 h)+ Render(100 h)を組み合わせる手も可 |
3. アカウント作成時に注意すべき点
必要な情報と共通のハードル
| サービス | 必須項目 | 主な壁・対策 |
|---|---|---|
| Oracle Cloud | メールアドレス、クレジットカード(VISA/MC) | 住所入力でエラーが出やすい → 正確な郵便番号と英字表記の住所を使用 |
| Railway | GitHub アカウント、電話番号(SMS) | 国内 SMS が届かないことがある → Google Voice や海外電話番号で代替 |
| Render | メールアドレス、クレジットカード(テスト課金あり) | 初回課金失敗で利用停止 → カード残高と有効期限を事前に確認 |
| Fly.io | メールアドレス、GitHub アカウント、クレジットカード | プロジェクト作成時にクレジットチェックが走る → 無料クレジット取得後すぐデプロイ |
| Replit | メールアドレス、OAuth(Google/Discord)※電話認証は任意 | 電話認証が必須になるケースは稀。必要なら予備で設定しておく |
まとめ:メール・電話番号・クレジットカードの 3 要素を揃えておけば、ほとんどのサービスでスムーズにアカウント作成できます。
4. 代表的なデプロイ手順(GitHub Actions・Docker・CLI・Replit)
以下は Discord.js v14(Node.js)または discord.py 2.x(Python)を想定したサンプルです。実際のコードは公式ドキュメントに合わせて調整してください。
4.1 GitHub Actions + Railway
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# .github/workflows/deploy.yml name: Deploy to Railway on: push: branches: [ main ] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Node.js 設定 uses: actions/setup-node@v3 with: node-version: '20' - run: npm ci - name: Railway へデプロイ env: RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }} run: railway up |
- メリット:コードを push するだけで自動デプロイ。
- 注意点:Railway の無料枠はビルド時間に制限があるため、依存パッケージはできるだけ軽量化。
4.2 Docker コンテナ + Fly.io
|
1 2 3 4 5 6 7 8 9 |
# Dockerfile (Node.js) FROM node:20-alpine AS build WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . CMD ["node", "bot.js"] |
|
1 2 3 4 |
# デプロイ手順(ローカル端末) flyctl launch # プロジェクト作成(対話式でリージョン選択) flyctl deploy --remote-only # ビルド・デプロイを一括実行 |
- メリット:環境が完全に分離され、依存関係の衝突リスクが低い。
- 注意点:Docker の基礎知識が必要。
flyctl launch時に無料クレジットを有効化しておく。
4.3 OCI CLI(Oracle Cloud)で直接インスタンス起動
|
1 2 3 4 5 6 7 8 9 |
# OCI CLI インストール後の例 oci compute instance launch \ --availability-domain <AD> \ --compartment-id <COMPARTMENT_OCID> \ --shape VM.Standard.A1.Flex \ --display-name discord-bot \ --image-id <IMAGE_OCID> \ --subnet-id <SUBNET_OCID> |
- メリット:インフラを細かく制御でき、VPC(VCN)設定やファイアウォールも CLI で管理可能。
- 注意点:初回セットアップは手順が多いため、公式チュートリアル([OCI Getting Started])を参照。
4.4 Replit IDE からのワンクリックデプロイ
- 「Create repl」 → 言語「Node.js」または「Python」を選択。
index.js(Node)/bot.py(Python)にコードを貼り付け。- 左メニュー Secrets に
DISCORD_TOKENを登録。 - 画面右上の Run ボタンで即時起動。
Node.js(Discord.js v14)の最小サンプル
|
1 2 3 4 5 6 |
const { Client, GatewayIntentBits } = require('discord.js'); const client = new Client({ intents: [GatewayIntentBits.Guilds] }); client.once('ready', () => console.log(`Logged in as ${client.user.tag}`)); client.login(process.env.DISCORD_TOKEN); |
Python(discord.py 2.x)の最小サンプル
|
1 2 3 4 5 6 7 8 9 10 11 |
import os, discord intents = discord.Intents.default() client = discord.Client(intents=intents) @client.event async def on_ready(): print(f'Logged in as {client.user}') client.run(os.getenv('DISCORD_TOKEN')) |
- メリット:IDE がブラウザ上に統合され、環境構築が不要。
- 注意点:15 分アイドルでスリープするため、外部からの定期 ping(後述)で自動復帰させる必要があります。
5. 24 時間稼働を実現するベストプラクティス
5.1 スリープ防止テクニック
| 手法 | 設定例 |
|---|---|
| UptimeRobot(外部 ping) | 5 分ごとに https://<YOUR_BOT_URL>/health に GET リクエストを送信。無料プランで最大 3 件まで設定可能【[UptimeRobot Docs]】 |
| GitHub Actions の定期ジョブ | yaml<br>schedule:<br> - cron: '*/10 * * * *' # 10 分ごとに実行<br> として軽い HTTP GET を実行 |
| Prevent Sleep スクリプト(Node.js) | js<br>setInterval(() => { fetch(process.env.HEALTH_URL).catch(()=>{}); }, 4*60*1000); // 4 分ごとに自己 ping<br> |
5.2 セキュリティ基本方針
- トークンは環境変数で管理 – 各プロバイダーの「Secrets」や「Environment Variables」に保存し、コード内にハードコーディングしない。
- 最小権限で Bot を作成 – Discord Developer Portal で必要なスコープだけを付与(例:
Bot+Send Messages)。 - IP 制限(可能なら) – Oracle Cloud の VCN や Fly.io の Firewall で外部からの SSH/SSH 以外のアクセスをブロック。
5.3 モニタリング・障害対応
| ツール | 主な用途 |
|---|---|
| Oracle Cloud Monitoring / Railway Metrics | CPU、メモリ、ネットワークトラフィックの可視化 |
| LogDNA(Render) / Fly.io Logs | 標準出力・エラーをリアルタイムで確認 |
| Discord エラーログチャンネル | Bot が例外を捕捉したら自動通知する仕組みを実装(process.on('unhandledRejection', ...)) |
再起動スクリプト例(Node.js)
|
1 2 3 4 5 6 7 |
// process.on で未処理例外をキャッチし、UptimeRobot に Webhook を送信 process.on('uncaughtException', err => { console.error(err); fetch('https://uptimerobot.com/api/v2/reboot?api_key=YOUR_KEY') .catch(() => {}); }); |
5.4 サービス変更リスクへの備え
- 無料クレジットやリソース上限は 公式ドキュメントの「Pricing」ページ が最も信頼できる情報源です。
- 重要な変更があった場合に備えて、月次で「プラン・料金」ページをチェックし、必要なら代替プロバイダーへ移行計画を立てましょう。
6. 参考情報(公式ドキュメント)
| 番号 | タイトル | URL |
|---|---|---|
| [1] | Oracle Cloud Always Free の概要 | https://www.oracle.com/cloud/free/ |
| [2] | Railway Pricing – Free Plan | https://railway.app/pricing |
| [3] | Render Free Tier 仕様 | https://render.com/docs/free-tier |
| [4] | Fly.io Free Credits と利用制限 | https://fly.io/docs/about/pricing/ |
| [5] | Replit Docs – Free Plan の特徴 | https://docs.replit.com/repls/using-repl-it |
| [6] | UptimeRobot 公式ドキュメント | https://uptimerobot.com/docs/ |
| [7] | OCI Getting Started (CLI) | https://docs.oracle.com/en-us/iaas/Content/API/Concepts/gettingstarted.htm |
最後に
- 無料枠は「リソースが限られている」ことを前提 に設計し、スリープ防止やモニタリングの仕組みを必ず組み込みましょう。
- それぞれのプラットフォームには独自の強みと制約があります。目的(常時稼働か・デプロイの簡便さか)に合わせて最適なサービスを選択 してください。
本ガイドは執筆時点の情報に基づいていますが、クラウドサービスは頻繁にプラン改訂や機能追加が行われます。最新情報は必ず公式サイトで確認しましょう。