前回の記事に引き続き、今回も仮想通貨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% 時間を注げます。
みなさんもぜひ、秘密情報の扱いだけは厳重にしつつ試してみてください 🔥
👇ラジオで話したこと
こんにちは、よだかです。きょうも、仮想通貨マーケットメイク 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 初期化は“保険”兼“加速装置”です。
- リスク最小化
- API キーやパラメータを
.gitignore
で除外しておけば、
誤 push → 鍵流出 → 強制ロスカット …なんて惨劇を防止。
- API キーやパラメータを
- 実験スピード最大化
- 失敗したら
git checkout
で即ロールバック。
“思いつき→実装→テスト” のループがストレスフリー。
- 失敗したら
- ナレッジ共有
- 履歴自体がドキュメント。半年後の自分も「あのバグいつ直した?」と検索できる。
比喩で一撃
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
- 学び:
- Secrets の自動検査は次の守り →
.git-secrets
と GitHub Actions を組み込む - Makefile は“開発者のリモコン” →
make test
へ Pytest + Backtest 統合 - loguru × Slack で ERROR 即通知 → 24/7 運用に一歩前進
- Secrets の自動検査は次の守り →
- 明日やること:
ERROR
レベルだけ Slack に投げるハンドラ追加- Pytest カバレッジ 80 % 以上を CI で強制
- Δロジック(スプレッド閾値適応型)のプロトタイピング
半日で整えた“開発者の城”。書く→動かす→見るが 30 秒で回る環境は、ロジック実装の集中度を 100 % に押し上げます。
みなさんも API キーの秘匿 だけは徹底しながら試してみてください。
次回は「GitHub Actions で自動テスト&自動デプロイ」を深掘り予定です。安全で強い開発を。
それでは、またお会いしましょう!