Bot mmnot Tips 開発ログ

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

2025年5月6日

前回の記事に引き続き、今回も仮想通貨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「MMbot」の開発ログをお届けします。テーマは――
「安全な Git 初期化と warn.log 分離。半日で整えた“開発者の城”」
初心者の方でも迷子にならないよう、まずはキーワードの基礎から押さえていきましょう。


超かんたん!用語ミニ辞典

用語ひと言でいうと…もう少し詳しく
リポジトリ (Repository)プロジェクト一式をしまう“金庫”コード・ドキュメント・履歴がまとめて入るフォルダ。Git を使うと、この金庫がバージョン管理機能付きになる
Gitリポジトリに“タイムマシン”を足す仕組み変更履歴を全部記憶し、過去の状態へ自在に巻き戻せる
Git 初期化 (git init)タイムマシンの電源オン.git フォルダ誕生=履歴の蓄積開始
ログの分離“ふつうの記録”と“警告”を別ファイルに重要度別にファイルを分け、異常を即検知
README“このプロジェクトの取扱説明書”Markdown でセットアップ手順や使い方を記述
API キー取引所がくれた秘密の“身分証”漏れると資金を動かされる。絶対に公開 NG
Mermaid 記法テキストだけで図が描ける魔法flowchart LR と書くだけで GitHub が絵に変換

ポイント補足
・Git を知らなくても“リポジトリ”という金庫にコード一式をしまう習慣をつけておくと、あとから Git を導入しても移行がスムーズです。
・今回やった「安全な Git 初期化」は、**API キーを誤って公開しない“防御線”**を張る作業でもある——これが後ほど登場します。


“時間を溶かす Git 初期化”こそ投資価値がある

おまけトーク①:なぜ最初に Git 初期化?

Botter 目線で語ると、Git 初期化は“保険”兼“加速装置”です。

  1. リスク最小化
    • API キーやパラメータを .gitignore で除外しておけば、
      誤 push → 鍵流出 → 強制ロスカット …なんて惨劇を防止。
  2. 実験スピード最大化
    • 失敗したら git checkout で即ロールバック。
      “思いつき→実装→テスト” のループがストレスフリー。
  3. ナレッジ共有
    • 履歴自体がドキュメント。半年後の自分も「あのバグいつ直した?」と検索できる。

比喩で一撃
Git を切らずに開発するのは、非常口の図面を持たずに火遊びするようなもの。
時間をかけてでも避難口を確保しておく方が、長期的には何万行ものコストを節約します。


一気に整えた“開発基盤フルセット”実況ガイド

❶ ゴールと全体像

  • ソース管理:ローカル → GitHub に安全公開
  • 自動化make run / make logs だけで起動&監視
  • ドキュメントdocs/README.md と Mermaid 図
  • 運用ログ:INFO/DEBUG と WARNING 以上を完全分離

❷ Git リポジトリ公開手順(再確認)

git init                          # ローカル初期化
echo '*.db\nlogs/\n.env*' > .gitignore
git remote add origin https://github.com/USER/REPO.git
git branch -M main && git push -u origin main
  • .env.prod は絶対コミット禁止
  • config_mainnet.tpl${MY_API_KEY} と変数で痕跡だけ残す

❸ Makefile × Docker Compose:書く→動かす→見る=30 秒

run:
    set -a && source .env.prod && set +a && \
    docker compose run --rm --entrypoint "" mmbot \
    python MMbotbybit/MMbotbybit.py --mode ${MMBOT_MODE}
logs:
    tail -F logs/mm_bot_*.log logs/warn.log
  • 失敗あるある:「サービス名が違う」「env 反映されない」
    → ヘッダで include $(ENV)set -a を忘れずに。

❹ Loguru で WARNING だけ warn.log に隔離

logger.add(LOG_DIR / "warn.log", level="WARNING", enqueue=True)
  • 実行後 ls logs/warn.log ができていれば成功。
  • 日次ローテーション+7日保持で運用コスト激減。

❺ ドキュメントは“開発者体験”への課金

  • docs/ARCHITECTURE.md に Mermaid
  • GitHub 上でプレビュー → チームメンバーに即共有
  • 迷ったら「図+コマンド+リンク」の三点セットを書く

おまけトーク

② loguru って何?

ログ出力を 3 行 でプロ仕様にしてくれる Python 製ライブラリ。
シンクロナイズド出力・圧縮・Slack 連携までワンストップ。標準 logging の“面倒くささ”を全部肩代わりしてくれます。

③ warn.log と debug.log の違い

ファイル目的
debug.log開発者が“挙動をなぞる”ための細粒度ログ「発注パラメータ = 0.001」
warn.log異常の早期発見用。運用チームが“赤信号”を拾う「Order rejected: insufficient balance」

DEBUG は“虫眼鏡”、WARNING は“警報ベル”。だから分離する価値があるんです。

④ それでも Git 初期化に踏み切れない人へ

「コードはまだ荒削りだから後で Git に…」
——その“後で”が 99 % 来ません。
いま 30 分で鍵を守り、未来の 30 時間分の事故対応をゼロにしましょう。


きょうの学び & 明日への TODO

  • 学び
    1. Secrets の自動検査は次の守り → .git-secrets と GitHub Actions を組み込む
    2. Makefile は“開発者のリモコン” → make test へ Pytest + Backtest 統合
    3. loguru × Slack で ERROR 即通知 → 24/7 運用に一歩前進
  • 明日やること
    • ERROR レベルだけ Slack に投げるハンドラ追加
    • Pytest カバレッジ 80 % 以上を CI で強制
    • Δロジック(スプレッド閾値適応型)のプロトタイピング

半日で整えた“開発者の城”。書く→動かす→見るが 30 秒で回る環境は、ロジック実装の集中度を 100 % に押し上げます。
みなさんも API キーの秘匿 だけは徹底しながら試してみてください。

次回は「GitHub Actions で自動テスト&自動デプロイ」を深掘り予定です。安全で強い開発を。
それでは、またお会いしましょう!

-Bot, mmnot, Tips, 開発ログ