Bot mmnot Tips 開発ログ

🛠️開発記録#211(2025/5/6)MMbot 開発ログ17「安全な Git 初期化 & warn.log 分離まで ― Bot 開発基盤を一気に整備!」

前回の記事に引き続き、今回も仮想通貨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: botcompose サービス名を 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


まとめ

たった 半日で
DockerMakefileloguru を組み合わせ、
“書く→動かす→見る” を 30 秒で回せるサンドボックスが完成しました!

この土台ができると、明日からは 戦略ロジックの実装とテスト に 100% 時間を注げます。
みなさんもぜひ、秘密情報の扱いだけは厳重にしつつ試してみてください 🔥

-Bot, mmnot, Tips, 開発ログ