Bot プログラミングスキル 環境構築・インフラ 開発ログ

🛠️開発記録#261(2025/7/10)一人開発者が築く“堅実な”暗号資産 Bot 基盤──設計・運用・スケールまとめ

暗号資産のマーケットは、価格も仕様も API も“昨日の正解”がすぐ陳腐化する世界です。
一人開発で勝ち続けるには 「戦略を量産しては捨てる」 を苦なく回せる土台──すなわち 堅実だが可塑性の高い基盤 が欠かせません。本稿では Mac mini でのローカル開発からクラウド移行、そしてコンテナ分離・プラグイン設計まで、実践で得た教訓を 設計・運用・スケール の3軸で整理します。


1. 序章:なぜ“あとから外せる”構造が必須なのか

市場の変化速度と戦略寿命

  • スプレッド縮小・取引所仕様変更・競合 Bot の増加──アルファは短命。
  • 「ダメだ」と分かった戦略を秒速で剝がせる体制が、次の実験コストを劇的に下げる。

500 行警告フックに学ぶ“早期分割”の心得

  • 1 ファイル 500 行超で pre-commit が warning → “規模が臭う”タイミングを可視化。(理想は300行以内)
  • 小さく切るほど単体テストが速く、ロールバックも最小 diff
  • 実装→検証→撤去を 1 日サイクルで回すには、リファクタ容易性が最優先。

アルファ探索フロー

flowchart LR
    idea([アイデア]) --> rec[Recorder<br>データ蓄積]
    rec --> eda[EDA & Backtest]
    eda -->|勝てる| deploy[Feature Flag ON<br>本番へ]
    eda -->|勝てない| trash[Git tag<br>戦略墓場]
    deploy --> monitor[Real-time Monitor]
    monitor -->|劣化| trash
    style trash fill:#ffdcdc,stroke:#ff8080

2. 三層アーキテクチャの基礎

2-1. ロジック層/I-O 層/設定層とは何か

レイヤ主な責務具体例(Bot 開発)
ロジック層戦略・リスク管理・PnL 計算エントリ判定、連続失敗時停止、ポジション制御
I-O 層外部システムとの通信・永続化REST/WS クライアント、DB/Cache、Slack 通知
設定層変わり得る値を集約し Read-Only 提供.env, settings.yaml, Secrets Manager

2-2. 追加で意識すべき Service 層・Interface 層

レイヤ役割
Service 層戦略や I-O の呼び出し順序・状態遷移を調停
Interface(=CLI/API)ユーザ入力・外部システムとサービス層を接続

2-3. DTO&依存方向ルールで守るモジュール境界

  • DTO (Data Transfer Object)dataclass 化し層間通信を固定
  • 依存矢印は 上 → 下 の一方通行。下位層が上位層を import しない
  • 抽象(Protocol / Interface)で注入し、テスト時はスタブで差し替え

層構造の全体像

graph TD
    ui["Interface<br>(CLI / REST)"]
    svc["Service / Orchestrator"]
    logic["Business Logic<br>(Strategy)"]
    infra["Infrastructure<br>(Exchange, DB)"]
    ext[(取引所 API<br>DB, Slack)]
    config[("Settings / Secrets")]

    ui --> svc
    svc --> logic
    logic --> infra
    infra --> ext
    logic -->|Read-only| config
    svc -->|Read-only| config

2-4. Bot 開発のチェックポイント&ヒント

✅ チェック項目なぜ効くか実践例
ロジック層から外部ライブラリ import が無いかI/O や UI の実装が紛れ込むと層の境界が崩れ、テスト困難&再利用不能に。`grep -R "from aiohttp" src/mmbot/core
DTO / dataclass で層間を固定将来の変更が 型エラー として顕在化し、影響範囲を局所化できる。python\n@dataclass\nclass OrderReq:\n side: str\n price: Decimal\n qty: Decimal\n
依存方向は“上→下”のみ下位層が上位層を import すると循環依存や神クラス化を招く。`pydeps src/mmbot --no-show-deps
# .github/workflows/static-check.yml 例
- name: Detect upward dependencies
  run: |
    pip install pydeps
    pydeps src/mmbot --no-show-deps | grep "↖" && exit 1 || echo "No upward deps"

Tip: ここでエラーが出たら “どの import が越境したか” を grep で探し、
① DTO を追加 → ② 依存を下層に寄せる → ③ Facade を削除、の順で修正すると安全です。

次章以降では Recorder ファーストの検証フロー戦略プラグイン化とフィーチャーフラグMac mini 省リソース術 など、具体的な実装&運用テクニックを掘り下げていきます。

3. Recorder ファースト:アルファ検証のワークフロー

3-1. データ取り → EDA → Go/No-Go 判定の高速ループ

sequenceDiagram
    participant R as Recorder
    participant DB as Data Lake
    participant NB as Notebook / EDA
    participant JR as Jenkins / CI
    participant BT as Backtester
    participant Ops as Ops Flag

    R->>DB: ① Raw Tick / Funding / Depth<br>Parquet or Kafka
    NB-->>DB: ② SQL / pandas で探索
    NB->>JR: ③ 仮説パラメータを commit
    JR->>BT: ④ 自動 Backtest Matrix
    BT-->>JR: ⑤ Metrics (PnL, DD, Sharpe…)
    JR->>Ops: ⑥ 成績閾値を満たす?<br>Yes → feature_flag ON<br>No  → tag as trash
  1. Recorder
    • Exchange REST/WS → Kafka or Parquet
    • シンボル・頻度は最小構成(例:BTCUSDT, 1 m)。
  2. EDA (Exploratory Data Analysis)
    • Jupyter/Polars/Pandas で Hypothesis-Driven に可視化。
  3. Backtest 自動化
    • GitHub Actions などで パラメータ行列を全パターン回す
  4. Go/No-Go 判定
    • 指標テンプレ:Win% ≥ 55 && MaxDD ≤ 5%
    • 通過したら Feature Flag を ON し本番で 1 % サイズから試す。
    • 落ちたら git tag failed/2025-07-10-α1 → 墓場フォルダへ移動。

3-2. スキーマ統一と欠損ガードのチェックリスト

チェック項目“PASS” 基準実装ヒント
型統一ts: int64, price: decimal128, size: float64pyarrow.schema に宣言して書込前に validate
タイムゾーン最新レコード − 最古レコード ≒ 取得範囲ts % 1000 == 0 で ms→秒の混入を検知
欠損price 欠損率 < 0.01 %SELECT symbol, COUNT(*) WHERE price IS NULL
異常値Z-score ±8 以内scipy.stats.zscore で自動除外
メタ列exchange, symbol, env を必須SQL PK を (ts, exchange, symbol) に固定

3-3. TTL 設定とコスト最適化の考え方

データレイヤ保持期間 (TTL)圧縮 / パーティションコスト削減策
Raw Tick30–60 日/year=2025/month=07/day=10/S3 Infrequent Access + ZSTD
Aggregated (1 m, 1 h)1 年DeltaLake + VACUUMAthena / BigQuery on demand
Feature Store永続symbol/feature.parquetフィールド選択を最小限

4. 戦略プラグイン化とフィーチャーフラグ

4-1. BaseStrategy インタフェース設計

# core/strategy/base.py
from dataclasses import dataclass
from abc import ABC, abstractmethod
from decimal import Decimal
from typing import Iterable, Dict

@dataclass
class MarketSnapshot:
    ts: int
    bid: Decimal
    ask: Decimal
    position: Decimal

class BaseStrategy(ABC):
    id: str                     # 'mm_v1', 'arb_cex', ...
    version: str                # git sha / semver

    @abstractmethod
    async def warmup(self, snapshots: Iterable[MarketSnapshot]) -> None: ...

    @abstractmethod
    async def generate_signals(
        self, snapshot: MarketSnapshot
    ) -> Dict[str, Decimal]:  # {'buy': qty, 'sell': qty}
        ...

ポイント

  • I/O 依存ゼロ → ユニットテストは DTO を流すだけ。
  • id, version を必ず返し ログ & メトリクスにラベル付け

4-2. entry_points / importlib でホットプラグ

# pyproject.toml
[project.entry-points."mmbot_strategies"]
mm_v1 = "mm_v1.strategy:MMV1"
arb_magic = "arb_magic.strategy:ArbMagic"
# service/loader.py
import importlib.metadata as md
from core.strategy.base import BaseStrategy

def discover(enabled_ids: set[str]) -> list[type[BaseStrategy]]:
    for epi in md.entry_points(group="mmbot_strategies"):
        if epi.name in enabled_ids:
            yield epi.load()
  • pip install -e . でロード完了。
  • bot 再起動せず --enable-strategy arb_magic で即テスト。

4-3. ON/OFF 切替を 1 行にする Feature Flag パターン

# config/flags.yaml  (Central Repo)
enabled_strategies:
  - mm_v1
  - arb_magic
risk_limits:
  mm_v1: {maxPos: 1000}
  arb_magic: {maxPos: 200}
# service/runner.py
import yaml, watchdog.events

class FlagWatcher(watchdog.events.FileSystemEventHandler):
    def on_modified(self, _):
        Runner.reload_flags()

class Runner:
    @classmethod
    def reload_flags(cls):
        flags = yaml.safe_load(open("/mnt/config/flags.yaml"))
        cls.active_ids = set(flags["enabled_strategies"])
  • K8s ConfigMap or Docker bind-mount 更新 → watch → 自動リロード。
  • 緊急停止は vim flags.yaml → save で完了。

フラグ適用フロー

flowchart LR
    ops["Ops<br/>edit flags.yaml"] --> cm["ConfigMap<br/>reload"]
    cm -- inotify --> runner["Runner<br/>reload_flags()"]
    runner --> loader["StrategyLoader"]
    loader -- "Δ enabled_ids" --> orchestrator["Orchestrator"]


次章では コンテナ分離 & リソース制御Mac mini 省エネ運用術クラウド移行の IaC 手順 を解説し、一人開発でも“壊さず速く”成長できる体制を仕上げます。

5. コンテナ分離の実践

5-1. 戦略ごとに分けるメリット & デメリット

観点メリットデメリット / 対策
障害隔離1 Bot が OOM しても他 Bot が生き残る。ログとアラートが散逸 → 共通 Loki ↔ Grafana で統合。
依存衝突回避取引所 SDK のバージョン違い・Rust-Python 混在を吸収。ベース OS がバラける → 共通 base image へ揃える。
CI/CD 柔軟Bot 単位でビルド&ロールバック。Pipeline が乱立 → モノレポ + build-arg STRATEGY で集約も可。
リソース制御limits: で CPU / Mem を明確に。未使用時も重複メモリを喰う → K8s VPA で自動縮退。
セキュリティ境界API キーを Bot 内 Secret に閉じ込め。Secret スプロール → Central Vault + sidecar injector に。

5-2. 「3 Bot + Recorder」構成図

graph TD
    subgraph namespace[ ]
        recorder[Recorder<br>Market Stream]
        mm[FRMM Bot]
        arb[Arb Bot]
        liq[Liquidation Snipe Bot]
        nats[NATS / JetStream]
        psql[(TimescaleDB)]
        vault[HashiCorp Vault]
    end

    recorder -->|Tick| nats
    mm -->|Subscribe| nats
    arb -->|Subscribe| nats
    liq -->|Subscribe| nats

    mm --> psql
    arb --> psql
    liq --> psql
    recorder --> psql

    vault --> mm
    vault --> arb
    vault --> liq

5-3. Helm/Compose 最小サンプル

docker-compose.yml(抜粋)

version: "3.9"
services:
  nats:
    image: nats:2.10
    command: ["-js", "-sd", "/data"]
    ports: ["4222:4222"]
    volumes: ["./data/nats:/data"]

  recorder:
    build: ./recorder
    env_file: .env.recorder
    deploy:
      resources:
        limits: {cpus: "1.0", memory: "512M"}
    depends_on: [nats]

  frmmbot:
    build: ./frmmbot
    env_file: .env.frmm
    deploy:
      resources:
        limits: {cpus: "1.5", memory: "1G"}
    depends_on: [nats]

  arbbot:
    build: ./arbbot
    env_file: .env.arb
    deploy:
      resources:
        limits: {cpus: "1.0", memory: "1G"}
    depends_on: [nats]

  snipebot:
    build: ./liqbot
    env_file: .env.liq
    deploy:
      resources:
        limits: {cpus: "1.0", memory: "1G"}
    depends_on: [nats]

Helm values.yaml

global:
  imagePullPolicy: IfNotPresent
  vaultAddr: "http://vault.vault:8200"

recorder:
  resources:
    limits:
      cpu: 500m
      memory: 512Mi
  env:
    NATS_URL: "nats://nats:4222"

strategies:
  - name: frmm
    replicas: 1
    resources:
      limits: {cpu: "1", memory: "1Gi"}
    env:
      STRATEGY_ID: "frmm_v1"
  - name: arb
    replicas: 1
    resources:
      limits: {cpu: "1", memory: "1Gi"}
    env:
      STRATEGY_ID: "arb_cex"
  - name: liq
    replicas: 1
    resources:
      limits: {cpu: "1", memory: "1Gi"}
    env:
      STRATEGY_ID: "hyperliq_snipe"

5-4. Secrets / 資金 / API レートリミットの中央ガード

トピック実装アイディア
SecretsVault → AppRole + sidecar で Pod 起動時に /vault/secrets/api_key へマウント。
資金管理取引所サブアカ or 内製 Balance-Guard Service。Bot は reserve(amount) API 経由でしか資金確保不可。
Rate-LimitEnvoy Proxy or nginx lua で token-bucket。コンテナからは localhost:8080 → Proxy → Exchange。

6. Mac mini 開発環境を守る 6 つの Tips

#テクニックコマンド / ツール効果
1Docker CPU / Mem CapDocker Desktop → Settings > Resources
cpus: 6, memory: 8 GB
ホスト OS が奪われず VS Code が落ちない
2軽量イメージ + multi-stagepython:3.12-alpine → final サイズ <200 MBPull / Build / RAM 使用を 40-60 % 削減
3Swap 圧縮 & purgesudo launchctl limit maxfiles 10240 10240
sudo purge を cron.daily
スワップ膨張で Beachball…を防ぐ
4バインドマウント最適化:delegated オプション or docker syncI/O wait を半分以下に
5温度監視 & ファン強化brew install osx-cpu-temp
外付けUSB-Cファン+縦置き
80℃→65℃、クロックダウン回避
6htop + ctop ダッシュボードbrew install htop ctop
F6→MEM% で並替
メモリ肥大プロセスを即 kill

multi-stage Dockerfile 雛形

# builder
FROM python:3.12-alpine AS builder
WORKDIR /app
RUN apk add --no-cache build-base
COPY pyproject.toml poetry.lock ./
RUN pip install poetry && poetry export -f requirements.txt --output reqs.txt

# runtime
FROM python:3.12-alpine
WORKDIR /app
COPY --from=builder /app/reqs.txt .
RUN pip install -r reqs.txt --no-cache-dir
COPY src/ ./src
ENTRYPOINT ["python", "-m", "src.cli"]

運用ヒント

  • docker stats で CONTAINER 内 MEM%>90 が続けば restart: on-failure + back-off を設定。
  • 冷却ファンは吸気↔排気を意識して配置すると 5 ℃ 以上差が出る。

次章は クラウド移行ロードマップCI/CD・セキュリティ自動化。これで “小さく作って速く回す” 基盤が完成します。

7. クラウド移行ロードマップ

7-1. 最小 VPS スペックと月額試算

用途最小スペック (推奨)参考サービス & 価格*想定 Bot 数
Recorder 専用2 vCPU / 4 GB RAM / 80 GB NVMeOracle Cloud Ampere A1 (Free) or Hetzner CX22 (€ 4.15/月)1
MM / FR Bot4 vCPU / 8 GB RAM / 100 GB NVMeHetzner CPX31 (€ 8.30/月)1 – 2
Arb / Liquidation4 vCPU / 8 GB RAM / 100 GB NVMeVultr High-Freq ($ 10/月)2 – 3
Monitoring / CI2 vCPU / 4 GB RAM / 40 GB SSDOracle Free / DigitalOcean Basic ($ 6/月)

*2025-07 時点の税込み目安。円換算 ≒€ 1 = ¥160 / $ 1 = ¥155

7-2. IaC 化(Terraform + Ansible)4ステップ

  • 1,Terraform で箱だけ作る
resource "hcloud_server" "mm_main" {
  name        = "mm-main"
  image       = "ubuntu-22.04"
  server_type = "cpx31"
  ssh_keys    = [hcloud_ssh_key.default.id]
}
  • 2,Ansible で共通ロール
    • roles/docker, roles/vault_agent, roles/promtail
    • 変数は group_vars/{recorder,bot,infra}.yml
  • 3,CI で terraform applyansible-playbook の2段ジョブ
    • PR マージで自動デプロイ。
  • 4,State 管理:Back-end S3 + DynamoDB lock(or Hetzner Storage Box)

7-3. Prometheus + Grafana Cloud で統合監視

flowchart LR
    node_exporter[Node Exporter]
    python_exporter[Python / Custom Metrics]
    promtail[Promtail]
    prometheus[Prometheus<br>Docker]
    loki[Loki<br>Docker]
    grafana[(Grafana Cloud)]

    node_exporter --> prometheus
    python_exporter --> prometheus
    promtail --> loki
    prometheus --> grafana
    loki --> grafana

設定ハイライト

# prometheus.yml
scrape_configs:
  - job_name: 'bots'
    static_configs:
      - targets: ['localhost:9100','localhost:8000']   # Node & Python
remote_write:
  - url: https://prometheus-blocks-prod-us-central1.grafana.net/api/prom/push
    basic_auth:
      username: <instance_id>
      password: <api_key>

7-4. バンド幅・レイテンシチェックの落とし穴

チェック方法罠と対策
Ping → Exchangemtr -rw bybit.com時間帯依存 > 夜間に ±70 ms 変動
WS リアル RTTping ws://... inside bot logVPS→SGDC 200 ms超であれば MM 戦略アウト
帯域上限Provider spec vs iperf3“1 Gbit”表記でも Burst → 継続 200 Mbit

8. CI/CD・セキュリティ・運用自動化

8-1. GitHub Actions → self-host runner 連携

name: Build & Deploy
on:
  push:
    branches: [main]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: docker build -t bot:${{ github.sha }} .
      - run: docker save bot:${{ github.sha }} | gzip > bot.tar.gz
      - uses: actions/upload-artifact@v4
        with: {name: image, path: bot.tar.gz}

  deploy:
    runs-on: self-hosted   # VPS 内に runner
    needs: build
    steps:
      - uses: actions/download-artifact@v4
      - run: gunzip -c image/bot.tar.gz | docker load
      - run: docker compose up -d --no-deps bot

8-2. SBOM と脆弱性スキャンを bot 横断で共有

ツール役割実行例
SyftSBOM 生成 (CycloneDX)syft . -o cyclonedx-json > sbom.json
Grypeイメージ CVE スキャンgrype podman:bot:${SHA}
TrivyIaC + Image + Secret scantrivy fs --scanners config,secret .

成果物を GitHub Security タブで集中管理 → 週次 Dependabot レポート

8-3. Incident Runbook & Slack アラート設計

sequenceDiagram
    Bot ->> Prometheus: metric{position_dd, high_temp}
    Prometheus ->> Alertmanager: firing rule
    Alertmanager ->> Slack: webhook (ops-alerts)
    Slack ->> On-call: mention + runbook link
    On-call ->> Vault: fetch keys
    On-call ->> Bot: manual throttle / restart
アラート例ExprThreshold
Drawdownpnl_unrealized < -0.05 * account_equity5 %
Rate-limitapi_http_429_total > 20 (5 m)20 req
Temperaturenode_hwmon_temp_celsius > 8080 ℃

Runbook checklist

  1. Slack 通知受信 → 異常メトリクスを Grafana で確認
  2. kubectl exec -it bot -- python tools/pause.py で緊急停止
  3. 原因別フロー:Rate-limit / Liquidity 欠損 / ポジション競合
  4. Jira ticket 作成 → Post-mortem 24 h 内提出

まとめ

  • 最小コスト → 収益拡大に応じてスケールするクラウド設計で、マシン・人・学習コストを最適化。
  • IaC, モニタリング, セキュリティを最初から仕組みに落とし、“壊れても 1 コマンドで復旧” を担保。
  • Incident Runbook とフィーチャーフラグで トラブルを局所化し、25 分以内に緊急停止を徹底――これが個人でも戦える運用体制の鍵です。

9. 収益とコストのバランスシート

9-1. サーバー費用と期待 PnL シミュレーション表

フェーズ稼働 Bot月額インフラ費†想定月次 PnL*キャッシュフローコメント
P0 : 検証Recorder + 1 Bot (低レバ)¥0 – ¥1,500
(Oracle Free / Hetzner CX11)
¥5,000+¥3,500ローカル中心。実運用は 0.1 – 0.5 BTC 相当で試運転
P1 : 初期黒字ライン2 Bot(MM + Arb)¥3,000¥25,000+¥22,000VPS を 1 台追加。資金 200 k JPY
P2 : スケール3 Bot + Recorder 専用¥6,000¥60,000+¥54,000TimescaleDB 別ノード / Grafana Cloud
P3 : 自走5 Bot + 冗長ノード¥15,000¥200,000+¥185,000K8s クラスタ 3 × CPX31・CI Runner 内蔵

†税込み概算(2025-07 現在)。*PnL はバックテスト中央値 –20 % を安全係数として採用。

9-2. “黒字ライン” に乗るまでのフェーズ分け

flowchart LR
    classDef phase fill:#e0f0ff,stroke:#007acc,stroke-width:1px,rx:6,ry:6

    p0(["Phase 0<br/>検証<br/>2025-07-01 → 07-14"]):::phase
    p1(["Phase 1<br/>初期黒字<br/>after p0 21d"]):::phase
    p2(["Phase 2<br/>スケール<br/>after p1 30d"]):::phase
    p3(["Phase 3<br/>自走<br/>after p2 45d"]):::phase

    p0 --> p1 --> p2 --> p3

10. まとめと次の一手

10-1. 「高速に試し、失敗を安く捨てる」文化

  1. Recorder ファーストで “市場を観測してから動く”
  2. プラグイン戦略 + フィーチャーフラグでホットスワップ
  3. 三層+サービス層でテストと撤去を 1 日以内に
  4. IaC & 監視の自動化で「壊れても 1 コマンド復旧」
  5. 収益↔コスト可視化で“黒字ライン”を常に把握

10-2. 今後の拡張ロードマップ

新領域なぜ効くか 先行タスク
MEV / アトミック arb CEX-DEX MEV は寡占化が進み “大手 2–3 社集中” 状態。効率的 Gas SDK や Flashbots RPC が整備されつつあり、参入障壁は高いがチャンスは残る。Flashbots RPC 対応・カスタム Bundle 生成、Sandwich 防御実装
NFT ミント SniperL2 活性は上昇も NFT 流通は低調。ミントスナイプは ゲーム / 低 Gas L2 に限定した“小口・高速”狙いが現実的。ERC-721c 対応、Mint Guard bypass リサーチ、ガス上限最適化
Liquidation Bot (Hyperliquid)Hyperliquid は既存オンチェーン清算を改良中。正式 “v3” 発表待ちで要観測。Keeper ネットワーク参加、SDK 追随、ドキュメント監視
ポイントファーミング取引・決済・ステーキングが 共通ポイント化する動きが顕著。APR 最適化アルゴに優位性。各取引所 API でポイント残高取得 → ポートフォリオ最適化アルゴ

アクションプラン(ざっくり版)

フェーズ期間目安主要テーマゴール/成果物
Phase A:情報収集 & ミニ PoC1 – 2 週- MEV/CEX-DEX 寡占状況の詳細調査
- Hyperliquid 清算 v3 の公式動向ウォッチ
- L2 NFT ミント市場のスナップショット取得
• 主要プロジェクトの API / ドキュメント整理(Notion)
• Gas 最適化 SDK/Flashbots RPC のサンプル bundle 送信成功
• 各取引所ポイント API の仕様表
Phase B:低リスク・低コスト試作2 – 4 週- MEV アトミックアービトラージの“ペーパーシミュレーション”
- NFT Sniper の L2 限定 prototype(testnet ミント)
- Hyperliquid Keeper クライアント stub
• Jupyter notebook で損益計算 + シュミレーション結果
• 失敗時ロールバック用 Feature Flag 用意
• PoC 用 Vault Secret 登録済み
Phase C:小規模本番 & 観測4 – 6 週- MEV bot を 0.1 ETH 限度で mainnet dry-run
- NFT Sniper を “低 Gas / 限定ペア” で運用
- 清算 bot を testnet Keeper へ登録
• Prometheus メトリクスラベル: strategy_id, alpha_id
• Slack アラート閾値:PnL < −0.01 ETH / 4 h
Phase D:評価 & 拡張判断1 週- 週間 PnL / コスト表と比較
- 競合&寡占度モニタリング
• “続行 / 改修 / 廃止” レポート
• 続行が決まった bot は Container 化 → IaC へ統合

横断タスク(Phase A–D で逐次実施)

  1. Secrets 統合 ― Vault に mev_bot, nft_sniper, liq_bot の AppRole を発行。
  2. Rate-limit Guard ― Envoy Lua で token-bucket、上限超過時は自動 back-off。
  3. Cost Tracker ― Google Sheet 自動更新(Cloud Functions で Prometheus → Sheet)。
  4. 依存チェック CIpydeps 逆依存ルールを新 bot にも追加。

次の“一歩”チェックリスト

  • Flashbots RPC で自アカウントから 1 件 bundle 成功 → TxHash ログ保存
  • ERC-721c ミントコントラクトを Hardhat テストネットでリプレイ・bypass ケース検証
  • Hyperliquid Keeper テストジョブを登録し、job_status Polling が動くことを確認
  • ポイント API で Bybit / Backpack のポイント残高取得スクリプトを Cron 登録

原則:「小さく作って速く試す、ダメなら安く捨てる」――このサイクルが維持できるかどうかが、次の拡張フェーズで資金と時間を溶かさない最大の鍵です。

10-3. 今後のアクション:自分の開発フロー点検チェックリスト

  • ファイル行数警告フックは設定していますか?
  • Recorder → EDA → Go/No-Go のパイプラインは 30 分で回せますか?
  • Secrets / Rate-limit を中央で制御できていますか?
  • クラウド費用と期待 PnL を Spreadsheet で即更新できる仕組みは?

まずは 1 日で「Recorder 専用 VPS を IaC で立ち上げ、Prometheus にメトリクスが流れる」までをやってみましょう。これが速く出来れば、Bot 開発のチューニングも必ず加速します。

-Bot, プログラミングスキル, 環境構築・インフラ, 開発ログ