Discord Bot の更新¶
関連: Bot の構成 / systemd / PostgreSQL
本番は systemd 常駐(finance-manager.service)。
起動の仕組み(scripts/run.sh / venv / PYTHONPATH)は Bot の構成。
変更の流れ¶
main へ直接 push しない。コードを変えるときは毎回 Pull Request を作る。
docs だけの修正でも同じ経路を通す。
ブランチを切る
→ 変更して commit
→ PR を作る
→ GitHub Actions の test が緑になるのを待つ
→ main へマージ
→ VM で git pull + restart
1. PR を作る¶
PR を開くと .github/workflows/test.yml が走る。
赤いままマージしない。 落ちた理由を直すか、PR を閉じる。
レビュアーが自分ひとりでも PR を挟む理由は次の 2 つである。
- マージ前に CI が回る。壊れたコードが
mainに入らない - 「いつ・何を・なぜ変えたか」が PR に残る。DB の値がおかしいときに追える
2. マージする¶
CI が緑になってからマージする。
main を保護して直接 push を弾いておくと、この手順が事故で飛ばされなくなる。
GitHub の Settings → Branches → Add branch ruleset で main に対して
「Require a pull request before merging」と「Require status checks to pass(test)」を入れる。
3. VM に反映する¶
VM に SSH して:
Streamlit ダッシュボードを常駐させているなら、同じ git pull のあと sudo systemctl restart finance-dashboard もする。
requirements-dashboard.txt が変わっていたときは、再起動の前に pip install -r requirements-dashboard.txt する。
初回は Streamlit ダッシュボード。
スキーマ変更は Bot 起動時に sql/ が順に当たるので、通常は restart だけで足りる。
requirements.txt が変わっていたときだけ、再起動の前に依存を入れる:
cd ~/finance-manager
source .venv/bin/activate
pip install -r requirements.txt
sudo systemctl restart finance-manager
4. 確認¶
ログに Logged in as ... が出て、Discord の DM / 指定チャンネルで返答すれば成功。
| やりたいこと | コマンド |
|---|---|
| 再起動 | sudo systemctl restart finance-manager |
| 止める | sudo systemctl stop finance-manager |
| ログ | sudo journalctl -u finance-manager -f |
初回の unit 作成は systemd。
テスト¶
main への push と Pull Request で GitHub Actions(.github/workflows/test.yml)が tests/ を回す。
VM で git pull する前に、GitHub 側が緑になっているかを見る。
手元や VM で回すとき:
DB、Discord、Gemini にはつながない。純粋関数だけを見る。
| ファイル | 守っているもの |
|---|---|
tests/test_time_bounds.py |
JST 壁時計の日付境界(「今日」の窓、任意期間の窓、paid_at の解釈) |
tests/test_budget_math.py |
週枠・日枠の再配分と日数按分、【明日の目安】の週の切り替わり、確定の未割当別枠の載せ直し/取り消し、期間集計の整形 |
tests/test_taxonomy.py |
大分類・小分類の正規化 |
予算の数字を入れる(初回、計画を変えたとき)¶
スキーマ(テーブル追加)は上の restart で当たる。 固定費マスタと変動枠の 金額 は seed が必要である。
cd ~/finance-manager
sudo -u postgres psql -d finance_manager -f sql/budget_seed.example.sql
sudo systemctl restart finance-manager
詳細は 月次予算。 そのあと Discord で予算案を見て「このままで」。
初回だけ(リポジトリと .env)¶
まだ clone していない VM 向け。 常駐化は上の systemd へ続く。
cd ~
git clone https://github.com/nakajima923/finance-manager.git
cd finance-manager
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
# .env を編集してトークン類を入れる
.env の例:
DISCORD_BOT_TOKEN=...
DISCORD_CHANNEL_ID= # 空でも可。絞るならチャンネル ID
GEMINI_API_KEY=...
GEMINI_MODEL=gemini-3.5-flash
GEMINI_MODEL_FALLBACKS=gemini-3.5-flash-lite
DATABASE_URL=postgresql://finance_app:PASSWORD@127.0.0.1:5432/finance_manager
gemini-1.5-flash は 404 になり得るのでフォールバックに置かない。
gemini-3.5-flash の無料 RPD はごく小さいことがある。尽きると lite へ落ちる。
店名 Web 検索の試行と無料枠の制約は 店名 Web 検索の試行知見。
チャンネル ID: Discord の開発者モードを ON → チャンネルを右クリック → ID をコピー