前回の記事に引き続き、今回も仮想通貨botの開発状況をまとめていきます。
突然ですが──コードを書くたびに 「実行コマンドは何だっけ?」「APIキーがうっかり Git に…」 などで足止めを食らっていませんか?
きょうはそんな「開発あるある」を一掃すべく、仮想通貨マーケットメイク Bot “MMbot” のリポジトリを ゼロから安全に Git 管理へ移行し、
ワンコマンドでビルド&実行、INFO と WARNING のログを自動分離、Mermaid 図でシステム全体を即共有──という 開発基盤フルセット をわずか半日で整えました。
この記事では、その手順とハマりポイントを “コピペ OK” な形で公開。
.gitignore
でシークレットを守る極意- Makefile × Docker Compose で「書く→動かす→見る」を 30 秒ループ化
- loguru で WARNING だけを
warn.log
に隔離し、運用トラブルを即検知
…など、明日から ロジック実装に 100% 時間を割ける 下地づくりを解説します。
「まず環境整備でつまずく」すべての Botter / Pythonista に贈る、実践的インフラ整備ログです。
1. ゴールと全体像
カテゴリ | 成果 |
---|---|
ソース管理 | 既存コードを Git で初期化し、GitHub に安全に公開プッシュ |
自動化 | make run & make logs でローカルからワンコマンド実行/ログ監視 |
ドキュメント | docs/README.md と Mermaid の簡易システム図を用意 |
運用ログ | loguru で INFO/DEBUG は日次ログ、WARNING 以上は warn.log へ分離 |
図(Mermaid)
flowchart LR subgraph DEV["Dev Laptop"] A[Makefile] --> B{{docker compose}} end subgraph CONTAINER["Container: mmbot service"] B --> C[MMbotbybit.py] C -- REST/WS --> D[(Exchange API)] C -- Webhook --> E[(Slack)] C --> F[(SQLite)] C --> G[(logs/*)] end
flowchart LR subgraph DEV["Dev Laptop"] A[Makefile] --> B{{docker compose}} end subgraph CONTAINER["Container: mmbot service"] B --> C[MMbotbybit.py] C -- REST/WS --> D[(Exchange API)] C -- Webhook --> E[(Slack)] C --> F[(SQLite)] C --> G[(logs/*)] end
2. Git リポジトリを安全に公開する
- 1:
git init
でローカル初期化 - 2:
.gitignore
で シークレット/重いファイル を除外
cat <<'EOF' > .gitignore *.db logs/ .env* config_*secret.json warn.log __pycache__/ EOF
- 3:GitHub に空リポジトリを作成し、
git remote add origin https://github.com/<user>/<repo>.git git branch -M main # ← master でも可。今回 main 採用 git push -u origin main
- 4:ポリシーポイント
.env.prod
は絶対にコミットしない- テンプレート
config_mainnet.tpl
に${MY_API_KEY}
形式で置換変数を残す
3. Makefile で “run / logs” を 1 行に
# -------- MMbot Dev Toolkit --------------------------------- SHELL := /bin/bash ENV ?= .env.prod include $(ENV) SERVICE ?= mmbot CONFIG := config_mainnet.json $(CONFIG): config_mainnet.tpl $(ENV) @echo ">>> generating $(CONFIG) from $< using $(ENV)" @envsubst < $< > $@ # ───────── ランタイム ───────── run: $(CONFIG) # 必要変数をシェル環境にもエクスポート @set -a && source $(ENV) && set +a && \ docker compose run --rm --entrypoint "" $(SERVICE) \ python MMbotbybit/MMbotbybit.py \ --mode $(MMBOT_MODE) \ --config /app/$(CONFIG) \ --s_entry $(S_ENTRY) \ --max_loss_usd $(LOSS) \ --lot $(LOT) \ --max_cycles $(CYCLES) logs: @tail -F logs/mm_bot_*.log logs/warn.log .PHONY: run logs
Tips
失敗例 | 解決策 |
---|---|
no such service: bot | compose サービス名を mmbot に合わせる |
エントリポイントの entrypoint.sh が邪魔 | --entrypoint "" で上書き |
.env の変数が渡らない | set -a && source .env.prod && set +a でシェルにもエクスポート |
4. Loguru で WARNING だけを別ファイルへ
logger.remove() # 既存ハンドラ削除 logger.add(lambda m: print(m, end="")) # コンソール logger.add( LOG_DIR / LOG_FILE, level="INFO", enqueue=True, rotation="00:00", retention="7 days", compression="zip", format="{time:YYYY-MM-DD HH:mm:ss,Asia/Tokyo} | {level} | {message}", ) logger.add(LOG_DIR / "warn.log", level="WARNING", enqueue=True)
確認手順
make run CYCLES=0 # 手動で Ctrl-C ls -l logs/ # → warn.log が生成
5. ドキュメントは “開発者体験” に課金する
docs/README.md
… 起動・停止・環境構築メモdocs/ARCHITECTURE.md
… Mermaid 図を GitHub で 直接 プレビューできる- 迷ったら「図+コマンド+リンク」の 3 点セットで将来の自分を救う
6. 今日学んだこと & 明日への TODO
学び | 明日やること |
---|---|
Secrets を絶対 push しない仕組み | GitHub Actions で .git-secrets を自動検査 |
Makefile 一撃実行は正義 | make test → Pytest & Backtest を統合 |
loguru 超便利 | ERROR で Slack/Discord に自動通知 |
7. 情報公開ポリシーのチェックリスト
.env*
やconfig_*secret.json
の実値は伏せ字${VAR_NAME}
に置換- Slack URL は
"https://hooks.slack.com/services/T000/ZZZZ"
のようにマスク - 実際の約定 ID / 取引数量はダミーまたは四捨五入
- タイムスタンプは日付のみ残し時刻を丸めても OK
- 取引戦略の ロジック は公開範囲を自分で決める(例: スプレッド閾値は伏せ字)
8. 最終コミット
git log -1 --oneline # 350189e chore: ignore warn.log
https://github.com/yodaka61/MMbot/commit/350189e
まとめ
たった 半日で
Docker・Makefile・loguru を組み合わせ、
“書く→動かす→見る” を 30 秒で回せるサンドボックスが完成しました!
この土台ができると、明日からは 戦略ロジックの実装とテスト に 100% 時間を注げます。
みなさんもぜひ、秘密情報の扱いだけは厳重にしつつ試してみてください 🔥