Discord (など) で定期実行などされるBotのmonorepo。
- bots/auto-moderator: 運営タスクリマインド (毎日)
- bots/gsc-report: Google の検索パフォーマンス通知 (毎週)
- bots/asakatsu-bot: 朝活確認 (毎日)
- bots/joji-bot: Youtube から RSS で最新動画取得 (毎日)
詳細は ./rollcron.yaml で。
mise でツール管理。mise.toml 参照。
mise doctor # "activated: yes" を確認
mise install # ツールをインストール (初回 or mise.toml 変更時)activated: no の場合はシェルRCに mise activate を追加する。詳細は mise docs を参照。
my-bot:
schedule: "7pm" # 下記参照
working_dir: bots/my-bot
run: ./run.sh
log: ~/run/discord-bots/my-bot/log
# build: ./build.sh # コンパイルが必要な場合
# env_file: ~/run/discord-bots/my-bot/env # 環境変数が必要な場合schedule の書き方:
"7pm" "8:30am" "noon"
"7pm every Monday" "midnight every Friday"
"7am every Sunday" "6pm every 3 days"
"0 19 * * *" "30 8 * * 1-5" "0 0 1 * *"
/bots/my-bot/ @your-github-username
2通りの方法がある:
1. rollcron.yaml (env_file → .env) → run.sh → program
2. rollcron.yaml → run.sh → (sops → sops.env) → program
SOPS を使う場合は docs/sops.md を参照。
sops を使う場合:
- SOPS ファイル:
bots/BOT/sops.env - 暗号化ルール:
./.sops.yaml
ローカル,デプロイ読み取りチェーン: run.sh -> sops exec-env -> bots/BOT/sops.env + (.age-key | ~/.config/sops/age/keys.txt)
sops を使わない場合:
- ローカル読み取りチェーン:
run.sh->bots/BOT/.env - デプロイ読み取りチェーン:
rollcron.yaml->~/run/discord-bots/BOT/env(サーバーにbots/BOT/.envは存在しないので二重読みはない)
詳細は docs/sops.md を参照。
.age-key- ローカル復号用
/home/deploy/.config/sops/age/keys.txt- デプロイ時復号用
sops exec-env path/to/sops.env 'echo success!' # sops 鍵検証
ssh USER@coolify.utcode.net "sudo -u deploy bash -c 'COMMAND'" # デプロイ先で操作このセクションはAIコーディングエージェント (Claude Code, Codex 等) 向け。
.env、.age-key、sops -dの出力、サーバ上の機密ファイルをコンテキストに入れないこと。確認が必要な場合はcat .env | cut -d= -f1、ハッシュ、wc、コマンド直接実行など値が露出しない方法を使う。