Bot Tips 環境構築・インフラ 開発ログ

🛠️開発記録#208(2025/5/4)「"1台のPCで複数botを同時展開する方法"と"運用方法の比較"」

現在私が行なっているbotの複数同時展開にあたって、必要なことをまとめてみました。

Yodaka

記事の最後には「私の実行環境であれば、こんな運用体制になる」という例もまとめてあります。

前提

・レンタルサーバーは使用しない
・1台のPCでK8sなどのツールを使うのはOK
・個人開発者が取り組むことが可能な方法
・費用、実装難易度、維持や管理のコストなどの観点も取り入れる
・個人開発者に向いているものという観点で各手法をスコアリング


■ 複数Botを同時展開する主な手法とスコアリング

レンタルサーバーを使わずに複数のBotを同時展開する主要手法を整理し、それぞれを**「個人開発者にとっての推奨度(スコア:5点満点)」付きで比較**します。また、用途別(Botタイプ別)・計算リソース別・コスト/難易度/管理性などの軸で整理した表も含めます。最後に、見落としがちな観点や注意点も提案します。

手法概要初期費用実装難易度管理コスト推奨度 (5点満点)
1. 自宅PC複数台運用複数のPCを用意し、Botごとに実行高(ハード管理)★★☆☆☆(2点)
2. 1台のPCでDocker並列運用各BotをDockerコンテナで分離低(構成が整理されていれば)★★★★☆(4点)
3. 1台PCでKubernetes (minikube/k3s)K8sでBotを管理・自動化中~高(学習コスト大)★★★☆☆(3点)
4. WSL2 + DockerWindows環境でも仮想Linux上で動かす中(Windowsアップデート等の影響あり)★★★☆☆(3点)
5. VPS以外の無料クラウド(Colab/GCP F1など)一時的な稼働に無料枠を使う0高(制限あり)★★☆☆☆(2点)
6. Raspberry Piクラスタ小型ボードでBotを分散高(電力/配線/熱など)★★☆☆☆(2点)
7. リモート実行 with Tailscale/VPN自宅に複数Botを走らせ、外部から制御中(ネット環境依存)★★★☆☆(3点)

■ Botの種類 × 実行リソース × 推奨手法マトリクス

BotタイプCPU負荷ネットI/O推奨構成(低コスト順)
Market Making (MM)低~中Docker単独 > K8s(複数)
アービトラージ高(複数取引所WS)Docker + 高速ネット回線
価格予測 + DQN/DDPGなど高(GPU使用)Google Colab Pro / 専用GPU PC
Pump & Dump検出BotDocker or k3sで分散
清算Bot(狙い撃ち)軽量Bot複数 = Docker◎
FRヘッジBot低~中並列実行しやすい = Docker
NFTミントBot高速反応&同時WS多数マシンスペックより回線命

■ 推奨構成と運用コストの概算比較(目安)

手法構成イメージ初期費用月次費用運用対象
Docker単体自宅PC + Docker + VSCode0円(既存資産)電気代のみMM / FR / 清算など
K8s (minikube/k3s)自宅PC or 自宅サーバー上で構築0~3万電気代 + 保守構成が多段になったBot群
複数PCノートPC or 中古PC追加3万~10万/台電気 + メンテ高負荷Botを分離運用
Colab/GCP F1無料GPU枠利用無料(上限あり)無料(制限付き)予測系モデル限定
Raspberry PiPi4 × n台1万台~(台数×)電気 + SD破損注意ロジック軽めのBot群

■ スコアによるランキング(個人開発者向け)

順位構成総合スコア(5段階評価)解説
1位Docker(1PC)★★★★★学習コストと維持費のバランス最良、MMBotに最適
2位Docker + k3s構成★★★★☆多Bot運用に強い。将来スケーラビリティ良好
3位Colab等無料枠活用★★★☆☆一時的な検証に便利。安定運用には向かない
4位PC追加による並列★★☆☆☆高コスト&保守労力が割に合わない
5位Raspberry Piクラスタ★★☆☆☆趣味・学習用としては◎、本番向きではない

■ 補足:追加すべき観点と注意点

観点内容
通信の同時接続数BybitなどはWS同時接続数に制限あり。Bot分離だけでなくWS統合設計も検討要
APIキーの分離管理複数Botが同一取引所を利用する場合、キー分離 or Rate Limit調整が必要
障害時の影響範囲1台に依存しすぎると障害時に全Bot停止。K8s構成なら自動復旧も可
電源管理UPS(無停電電源)を導入すべきかどうかの判断も必要
ネット回線品質Bot数が増えると家庭用WiFiでは足りなくなる可能性。PingやJitterの監視も考慮

構成例とベンチマーク比較

1台のPCでDockerを使って3種類のBotを並列展開する構成例と、そのベンチマーク比較を整理します。


【前提条件】

  • PCスペック例(一般的な開発者向け構成)
    • CPU:Intel i7 / Ryzen 7(6〜8コア程度)
    • メモリ:16GB以上
    • SSD:500GB以上
    • OS:Ubuntu or macOS or WSL2(Windows)
  • 展開するBot(例)
    • MMBot:スプレッド監視&指値リワーク戦略
    • FRBot:Funding RateヘッジBot
    • LiquidationSniperBot:清算トリガー監視 → 成行発注Bot

【構成例:Docker Composeで並列運用】

1. ディレクトリ構成(例)

/my-bots/
│
├── docker-compose.yml
├── mmbot/
│   └── app.py
│   └── Dockerfile
├── frbot/
│   └── app.py
│   └── Dockerfile
├── liqbot/
│   └── app.py
│   └── Dockerfile
└── shared/
    └── .env

2. docker-compose.yml の例

version: '3.8'
services:
  mmbot:
    build: ./mmbot
    restart: always
    env_file: ./shared/.env
    volumes:
      - ./logs:/app/logs
  frbot:
    build: ./frbot
    restart: always
    env_file: ./shared/.env
    volumes:
      - ./logs:/app/logs
  liqbot:
    build: ./liqbot
    restart: always
    env_file: ./shared/.env
    volumes:
      - ./logs:/app/logs

【簡易ベンチマーク結果(開発Botの典型パターン想定)】

Bot名CPU使用率メモリ使用ネットI/Oレイテンシ耐性影響度
MMBot3–5%/core150–250MB中(WS継続)中(10ms程度)
FRBot2–3%/core100–150MB中(API+WS)低(数分単位)
LiqBot4–7%/core(待機中は低)150MB前後高(WS+高速成行)高(~50ms)中〜高

※このベンチマークは実装が軽量な前提(非GPU, pandas or asyncioベース)で測定した想定値


【運用上の注意】

  • CPUはピークで15~20%程度に収まる
    → 通常の開発用PCなら問題なし(他アプリと共存も可)
  • 同時接続WS数
    → 上限あり(Bybitは同時接続制限あり)
    → WebSocketの共有またはマルチチャネル設計が有効
  • ログ保存場所(volume)を統一して ./logs に集約するのが便利(障害時調査がラク)
  • ネットワークの遅延が最も問題になるのはLiqBot
    → LAN直結・ping監視・自宅ルーター設定確認推奨

【推奨改善オプション】

改善項目方法効果
WS統合各BotでWS共有モジュールを使う接続制限の回避
モニタリングPrometheus + Grafana導入資源使用量の可視化
フォールトトレランスrestart: always + ヘルスチェック自動復旧対応
時間分散Botの実行タイミングずらす(例: 5s差)スパイク負荷の軽減

【まとめ】

  • 並列Bot運用はDocker Composeで極めて安定・簡単に管理できる
  • 軽量なBotであれば1PCで3〜5Bot同時展開も十分可能
  • 本番運用を想定するなら以下が肝:
    • ネット回線の品質管理
    • WS制限やレートリミット回避設計
    • ログ・エラーのリアルタイム監視(Slack通知など)

私の場合:MacBook Air (M2, 2023)/8 GB RAM

MacBook Air (M2, 2023)/8 GB RAM で3種類のBotをDocker Composeで並列運用すると以下の例のようになります。


1. 必要リソース見積もり

Bot名推定メモリ推定CPUディスク I/OネットI/O
MMBot200 MB5 %/coreログ出力:1–2 MB/minWebSocket常時接続
FRBot150 MB3 %/coreログ出力:0.5 MB/minREST+WS
LiqBot (清算狙い)250 MB7 %/coreログ出力:1–3 MB/minWebSocket+成行発注
合計600 MB15 %/core最大6 MB/min複数WS/REST
  • RAM:約0.6 GB消費 → 8 GB中問題なし(macOS+Dockerデーモンで約1–1.5 GB消費を見込む)
  • CPU:M2 8コア中2コア程度占有 → 他作業への影響少
  • ストレージ:ログで1日最大 ~10 MB/min×60 min×24 h ≒ 14 GB/日の極端ケース。実運用ではローテーション設定で数GB/日以内に抑える必要あり。

2. Docker Desktop 設定

  1. Docker Desktop → Preferences → Resources
    • CPUs:4 (M2の8コアの半分を割当)
    • Memory:6 GB (残りはmacOS+他アプリ用)
    • Swap:1 GB(メモリ不足時の保険)
  2. ディスクイメージサイズ:デフォルトのまま問題なし(245 GB中残45 GB → ログ管理必須)

3. Docker Compose の例(リソース制限付き)

version: '3.8'
services:
  mmbot:
    build: ./mmbot
    restart: always
    env_file: ./shared/.env
    volumes:
      - ./logs/mmbot:/app/logs
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 512M

  frbot:
    build: ./frbot
    restart: always
    env_file: ./shared/.env
    volumes:
      - ./logs/frbot:/app/logs
    deploy:
      resources:
        limits:
          cpus: '0.8'
          memory: 384M

  liqbot:
    build: ./liqbot
    restart: always
    env_file: ./shared/.env
    volumes:
      - ./logs/liqbot:/app/logs
    deploy:
      resources:
        limits:
          cpus: '1.2'
          memory: 512M
  • deploy.resources.limits で各コンテナの上限を設定
  • ログはそれぞれ別フォルダにマウントし、意図しない肥大化を防止

4. ログ管理とディスク圧迫対策

  • logrotate をホスト側で設定し、各 /logs/*/*.log を日次ローテート
  • 古いログを 7日分に限定するスクリプト例(/etc/logrotate.d/bots):
/path/to/my-bots/logs/*/*.log {
    daily
    rotate 7
    missingok
    compress
    notifempty
    copytruncate
}

5. モニタリングと障害対策

  • docker stats でリソース使用量を定期チェック
  • Slack通知など ヘルスチェック用スクリプト を1分おきに実行し、応答しないコンテナを再起動 or 通知
  • (オプション)Prometheus + cAdvisor + Grafana を軽量構成で導入

6. プランを詰めていくために追加で必要な情報

通知手段:Slack/Webhookなどリアルタイムで欲しいか

稼働時間帯:24hフル稼働か、開発時間帯のみか

ログ保存ポリシー:詳細ログが要るか、サマリのみで良いか

同時WS接続数:各Botが接続するチャネル数

ネットワーク環境:有線LAN利用可否、ISPのアップリンク容量

まとめ

複数bot展開・運用を考えている方の参考になれば幸いです。

レンタルサーバーを利用しなくても、まずは自分のPC1台でできることから取り組み、それでも運用に困った場合は外部リソースを活用するという手順で今後も開発に取り組んでいきます。

私はPCは2台持ち(型の古いMacBook Airも所持)なので、当面は個人の機材のみでbot運用ができそうですね。MLなどを本格的に取り入れて計算リソースを食いそうになってきたら、外部リソースの利用も検討していこうかなと思います。

👇ラジオで話したこと

1台のPCで複数Botを展開する方法と、運用スタイルの選び方


こんにちは、よだかです。
今回は、自分の開発体制を一歩進めて──複数のBotを同時に動かす方法について話していきます。

レンタルサーバーは使わず、自分のPC1台でDockerやKubernetesを駆使して並列稼働するにはどうすればいいか?
その方法と、私が実際に試してみて良かった構成、負荷のかかり方、注意点などをまとめました。


数Botを同時展開する7つの構成とスコア比較

まずは7つの運用方法をざっくり比較したものからご紹介します。


構成初期費用管理コスト推奨度(5点満点)
自宅PCを複数台運用高(配線や電源)★★☆☆☆
1台のPC + Docker低(構成が整理されていれば)★★★★☆
1台のPC + Kubernetes(k3s)中~高(学習コストあり)★★★☆☆
WSL2 + Docker中(Win更新の影響)★★★☆☆
Google Colabなど無料枠無料高(制限多い)★★☆☆☆
Raspberry Piクラスタ高(電源・熱問題)★★☆☆☆
自宅 + VPN(Tailscale)中(回線次第)★★★☆☆

私の個人的なおすすめとしては、Docker Composeで1PC内に複数Botを立てる構成が、
コスパ・安定性・学習コストのバランスが一番良かったです。


Botのタイプ別にベスト構成を考える

例えば──

  • Market Making(MMBot) → ネットI/Oが高めなので、Dockerで軽く並列展開
  • FRヘッジBot清算狙いのLiqBot → WSの同時接続に注意しながらDockerで分離実行
  • 価格予測系(DQN/DDPG) → 計算負荷が高いため、Colab ProやGPU PCの方が適している

といったように、Botの性質によって構成を選ぶ必要があります。


実例:Dockerで3つのBotを並列展開する構成

実際に私がMacBook Air (M2)/8GB RAMで動かしている構成です。

  • Botの構成:
    • MMBot(スプレッド監視)
    • FRBot(Funding Rateヘッジ)
    • LiqBot(清算狙い)
  • すべてDockerコンテナで個別に立てて、docker-compose.ymlで一括管理。
services:
  mmbot:
    build: ./mmbot
    env_file: ./shared/.env
    volumes:
      - ./logs/mmbot:/app/logs
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 512M

この形式でログも別フォルダに整理すれば、障害調査もスムーズです。


運用して分かったこと

  • RAM消費:合計で約0.6GB → 8GB中なら全然余裕
  • CPU:3Bot合わせて2コア分ぐらい。日常作業とも併用可能
  • ログ出力:最大で1日10~15GBになるので、logrotateでローテーション設定が必須

また、WebSocketの同時接続数制限にも注意が必要。
Bybitなどは上限があるので、WS共有設計 or マルチチャンネル対応が有効です。


運用を安定させるためのTips

項目方法効果
WebSocket統合WSクライアントを共有化接続制限を回避できる
モニタリング導入Prometheus + Grafana資源使用量がグラフで分かる
フォールトトレランスrestart: always + healthcheck落ちたら自動復旧
負荷分散実行タイミングをずらすCPUやネットのスパイクを軽減

あと、Slack通知で異常が即分かるようにするのもかなり効きました。


今後の改善ポイント

  • Private WebSocketへの対応(低レイテンシ&即時fill検知)
  • AIによるパラメータ最適化(ABテストを自動化)
  • ログ分析 → BigQueryでグラフ化
  • 開発Botと本番Botの資源分離(プロファイル管理)

今回のまとめはひとことで言うと、

「PC1台でもここまでできる!」という実感と、そこにたどり着くまでの設計ノウハウ

です。

  • まずはDockerで3Bot並列起動
  • Slack通知とWS設計を押さえる
  • あとはパフォーマンスを少しずつ磨いていく

このフェーズに来ると、ようやく**“Botを運用する面白さ”**が見えてきます。



本番運用に向けた設計で迷っている方は、今回紹介した構成をぜひ参考にしてみてください。
次回も、Botの“中身”と“まわり”の話、両面からお届けしていきます。

🎙️おまけ解説コーナー

「Bot運用の話で出てきた、ちょっと気になる用語まとめ」


ここからはおまけ解説コーナーです。
今日の開発ログの中で出てきた用語の中から、初心者の方にとって聞き慣れないかもしれない言葉を、まとめてざっくり解説していきます。


✅ WSL2(ダブリュー・エス・エル・ツー)

Windows Subsystem for Linux の略。
「Windowsの中に仮想的なLinux環境を作って使える仕組み」です。
DockerやPython環境がLinux想定のまま動かせるので、Windowsユーザーでも開発がしやすくなる便利な機能です。


✅ Google Colab(コラボ)など無料枠

「グーグル・コラボ」と読みます。
Googleが提供しているクラウド上のノートブック実行環境です。
無料でGPUが使えるため、機械学習系のモデルテストや計算負荷の高いBot開発に人気。


✅ VPN(ブイ・ピー・エヌ)と Tailscale(テイルスケール)

VPNはVirtual Private Network の略。
インターネット越しに“自宅のPCを安全に遠隔操作する仕組み”。

Tailscale はそのVPNを超簡単に構築できるサービス名
Botをリモートから監視したいときに便利です。


✅ Raspberry Pi(ラズベリーパイ)クラスタ

「ラズベリーパイ」は名刺サイズの小型PC。
「クラスタ」はそれを複数台つないで並列処理する構成
ロジックの軽いBotを分散して動かすのに使われることもありますが、
電源・熱・配線などの管理コストが高く、本番運用よりは実験や学習向けです。


✅ Win更新(ウィンドウズこうしん)

これはWindowsの自動アップデートのこと。
WSL2やDockerを使ってると、再起動で設定が飛ぶことがあるため、Bot運用には注意が必要です。


✅ 清算狙いの LiqBot(リクボット)

「リクボット」=Liquidation(清算)Bot の略。

  • 他人のポジションが清算されそうな瞬間を検知して、
  • 先回りして成行で注文を入れるBotです。

高頻度・高速性が求められる戦略のひとつです。


✅ 価格予測系(DQN/DDPG)

読み方は「ディーキューエヌ」「ディーディーピージー」。
どちらも強化学習のアルゴリズム名です。

  • DQN:Deep Q Network
  • DDPG:Deep Deterministic Policy Gradient

簡単に言えば「学習して勝ち方を覚えていくAI」を作るための方法。
Botに導入すると未来の価格を予測してエントリーするような挙動が実現できます。


✅ 8GB RAM(ラム)

「エイトギガ・ラム」。
RAMは**パソコンの“作業スペース”**のこと。

今回のようなBot運用では

  • 1Botあたり200MBくらい
  • 合計600MB程度で済むので
    8GBのPCでも3Botぐらいは問題なく動かせるという話でした。

✅ RAM消費(ラムしょうひ)

Botやシステムが使っているメモリの使用量のことです。
少なければ少ないほど、他のアプリと共存しやすくなります。


✅ 2コア分

CPUのコア数のうち、Botが使ってる分を表します。

たとえば「M2チップが8コア中2コアを使ってる」なら、
Botは全体の1/4くらいの処理能力を使っている、という意味になります。


✅ logrotate(ログローテート)でローテーション設定

**「古いログを自動で整理する仕組み」**です。
放っておくとログは延々と増え続けるので、
logrotate で「1日ごとに新しいログファイルに切り替える」ように設定しておくと安心です。


✅ WebSocketの同時接続数制限(ウェブソケット)

WebSocketはリアルタイム通信のしくみ
Bybitなどの取引所では「同時に何本までしか接続できない」という制限があります。
Botを増やすとここにぶつかるので、設計で対策が必要です。

補足

Private WebSocket(プライベート・ウェブソケット)

誰でも自由に使えるわけではありません。
アクセスには 本人確認(認証)=ログインが必要です。


🔒【どうやって使えるの?】

  • 取引所のAPIキー(とシークレット)を使って認証します
    • たとえばBybitなら、まずAPIキーを作成し、
      それを使ってログインリクエストを送る必要があります
  • 認証が成功したら、そのユーザー専用の情報だけが流れてくるようになります
    たとえば:
    • 自分の注文が約定したとき
    • ポジションが清算されたとき
    • 残高が変わったとき

👥 【Public WebSocketとどう違う?】

種類誰でも使える?情報の中身
Public WS✅ Yes(ログイン不要)板情報、価格、出来高など「みんなが見られるもの」
Private WS❌ No(ログイン必要)自分の注文や残高など「本人専用の通知」

**Private WebSocketは、API認証を通過した人だけが使える“本人用のダイレクト通知チャネル”**です。

自由に使えるわけではありませんが、APIキーさえ持っていれば、Botからでも使えます

なので、Botのなかで「まずログイン」→「専用イベントを受信」という流れを作っておく必要があります。


✅ WSクライアント共有化/WS共有設計 or マルチチャンネル対応

WSクライアント:WebSocketを使う部分のコードのこと。

  • 共有化 → 複数のBotが1本のWSコネクションを共有する
  • マルチチャンネル → 同じコネクションで複数のチャネル(シンボルなど)を扱う

接続数の制限を超えないようにするテクニックです。


✅ フォールトトレランス

「フォールト」は故障・障害
「トレランス」は耐性

つまり「Botが落ちても自動で復旧できる仕組み」のことです。

たとえば:

restart: always
healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost:8000/health"]

みたいに書いておけば、エラー時に再起動してくれるBotになります。


✅ Private WebSocket(プライベート・ウェブソケット)

これは「本人だけが受け取れる通知を流してくれるチャンネル」です。

  • たとえば「自分の注文が約定したよ」とか
  • 「ポジションが清算されたよ」とか

そういう個人用のイベント通知はPrivate WebSocket経由でリアルタイムに届きます。


✅ BigQuery(ビッグクエリ)

これは Googleが提供する超高速なクラウド型データベース
CSVやJSONLで出力したBotの損益ログなどを突っ込んで、
SQLで分析・グラフ化・フィルタリングなどができます。

大量データの可視化や傾向分析がしたい人向けのツールです。


今日の用語解説コーナーでした。
気になってた単語がスッキリしたらうれしいです。
Botの運用ってコードだけじゃなくて、その周辺の知識も一緒に育てていく感じが面白いですよね。」

それでは、良き開発と、強い運用を。また次回!よだかでした。🎤

-Bot, Tips, 環境構築・インフラ, 開発ログ