← 一覧に戻る

o40cs-general

GitHub ↗ Python 最終push: 2026/4/26 14:54

WIP(現在進行中)

Work In Progress

このプロジェクトで現在進行中の作業と、過去のスナップショットを記録する。

現在の状況

プロジェクト概要

O40CS Discord サーバー(約400人)向けの InVC ロール自動付与 Bot。 本番は OCI VM (158.179.191.207) 上で systemd 常駐中。

いま終わったこと

  • .devnotes/ 運用を導入(DEVLOG/WIP/DECISIONS/ROADMAP の4ファイル体制)
  • .gitignore に Claude Code ローカル状態を追記
  • 初回 session-wrap-up を実施し、4ファイルすべて更新

次にやること

  • 未追跡の HIKITUGI.md管理人向け手順.md の扱いを決める
    • HIKITUGI.md → コミットして残す方針が自然(引き継ぎ目的)
    • 管理人向け手順.md → 個人宛のメッセージ的内容なら .gitignore 追加もあり得る
  • 拡張要望が来たら HIKITUGI.md 末尾の拡張アイデアから検討

詰まっていること

特になし。Bot は本番稼働継続中。


過去のWIPアーカイブ

(新しい「現在の状況」を書く前に、古いものをここに追記でアーカイブする。新しいものが上)

2026-04-26 14:51 時点のスナップショット

(以下、README・HIKITUGI.md・git status からの推測)

プロジェクト概要

O40CS Discord サーバー(約400人)向けの InVC ロール自動付与 Bot。 VC 入室で InVC ロール付与 / 退出で剥奪する最小構成の discord.py Bot。

現状

  • 本番稼働中: OCI VM (158.179.191.207) 上で systemd (o40cs-bot.service) として常駐
  • 本番Bot: O40CS InVC Bot#4999(管理人作成、Bot ID 1496272391561679148
  • ローカルの Git 状態は Initial commit: Discord InVC role bot の1コミットのみ
  • 未コミット: HIKITUGI.md(引き継ぎドキュメント)、管理人向け手順.md が untracked のまま
  • 直前の作業として .devnotes/ 運用を導入したところ

次にやること候補

  • 未コミットの HIKITUGI.md / 管理人向け手順.md の扱いを決める
  • 必要があれば README の最新化
  • 拡張アイデアは要望が出てから着手

詰まっていること

特になし。

ROADMAP(計画)

ロードマップ

今週

  • 未追跡の HIKITUGI.md をコミットして履歴に残す
  • 未追跡の 管理人向け手順.md の扱いを決める(コミット or .gitignore 追加)

今月

(今月中にやりたいこと)

今四半期

(今四半期の目標)

いつか

  • Bot 再起動時の状態同期(起動時に全VCを走査して InVC の付け外しを再計算)
  • AFK チャンネル / 自己ミュート時の InVC 除外
  • ログチャンネルへの入退室通知(embed)
  • スラッシュコマンド /invc-sync で管理者が手動同期
  • 「ゲーム中(VC + 配信中)」など条件付き追加ロール

DECISIONS(意思決定)

意思決定記録

このプロジェクトで下した重要な意思決定を記録する。 最新が上に来る。


2026-04-26: .devnotes/ 運用の採用

背景: 本番稼働中のBotの引き継ぎ・拡張に備え、セッションをまたいで作業文脈を保持する仕組みが欲しかった。HIKITUGI.md だけでは粒度が粗く、日々の小さな判断や進行状況が残らない。

決定: プロジェクトルート直下の .devnotes/ 配下に DEVLOG / WIP / DECISIONS / ROADMAP の4ファイル体制で開発メモを管理する。

理由: ユーザーレベルCLAUDE.mdで標準化されている運用にそろえることで、session-wrap-up Skill との連携で自動更新が回せる。プロジェクトルートに直接 ROADMAP.md などを置くと「公式文書」と誤解されうるため、.devnotes/ に集約して個人メモであることを明示する。


2026-04-26: Claude Code ローカル状態を .gitignore で除外

背景: .claude/projects/.claude/sessions/.claude/history.jsonl などのセッション履歴がコミット対象に紛れ込むとリポジトリが汚れ、サイズも肥大化する。

決定: .gitignore に以下を追記して除外する。

  • .claude/projects/
  • .claude/sessions/
  • .claude/history.jsonl

理由: これらはローカルマシン固有の状態であり、コードや設計と無関係。Bot 本体の運用に必要なファイルではないため、リポジトリには含めない。

DEVLOG(作業ログ)

開発日誌

このプロジェクトでの作業を時系列で記録する。 最新のエントリが上に来る。


2026-04-26

14:52 - .devnotes/ 運用の導入

やったこと:

  • 既存リポジトリ o40cs-general.devnotes/ 運用を後付け導入(init-devlog Skill 経由)
  • .devnotes/DEVLOG.md.devnotes/WIP.md の雛形を配置
  • .devnotes/WIP.md の「現在の状況」に README・HIKITUGI.md・git status からの推測ベースで初期内容を記入
  • .gitignore に Claude Code ローカル状態の除外を追記(.claude/projects/, .claude/sessions/, .claude/history.jsonl
  • HIKITUGI.md(引き継ぎドキュメント)を一読してプロジェクト全容を把握

決めたこと:

  • .devnotes/ 4ファイル運用を採用(DEVLOG/WIP/DECISIONS/ROADMAP)→ DECISIONS.md に転記
  • Claude Code のセッション履歴は .gitignore で除外する → DECISIONS.md に転記

次回やること:

  • 未コミットの HIKITUGI.md / 管理人向け手順.md の扱いを決める(コミット or .gitignore)
  • 拡張要望が出てきたら HIKITUGI.md 末尾の拡張アイデアから着手

最近のコミット

README

O40CS Discord Bot — InVC ロール自動付与

VC に入室しているユーザーへ InVC ロールを自動付与し、退出時に剥奪する最小構成の Discord Bot。


1. Discord 側の準備

1-1. Bot アプリケーション作成

  1. Discord Developer PortalNew Application
  2. 作ったアプリの Bot タブ → Reset TokenBot Token を取得(一度しか見えないので保存)
  3. 同じ Bot タブで Privileged Gateway Intents を有効化:
    • SERVER MEMBERS INTENT
    • (PRESENCE と MESSAGE CONTENT は本機能では不要)

1-2. サーバーに招待

  1. OAuth2 → URL Generator
  2. Scopes: bot を選択
  3. Bot Permissions: Manage Roles を選択
  4. 生成された URL でサーバーに招待

1-3. ロール設定(運営者作業)

  1. サーバー設定 → ロール → 新規ロール InVC を作成(権限は何も付けない。色だけでOK)
  2. ロールを長押しで並び替えて Bot のロールを InVC より上 に移動
    • これをしないと Missing Permissions で失敗します
  3. InVC ロールを右クリック → ID をコピー(開発者モード要有効)

2. ローカル動作確認

git clone <this-repo> o40cs-bot
cd o40cs-bot
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
# .env に BOT_TOKEN と INVC_ROLE_ID を記入
python bot.py

ログに Logged in as ... が出れば接続成功。テスト用サーバーで VC に入って InVC が付くか確認してください。


3. Oracle Cloud Free Tier へのデプロイ

3-1. インスタンス作成

  1. OCI コンソール にログイン → Compute → Instances → Create
  2. Shape: VM.Standard.A1.Flex (Ampere ARM / Always Free)
    • 1 OCPU / 2 GB RAM 程度で十分
  3. Image: Canonical Ubuntu 22.04 (aarch64)
  4. SSH 公開鍵を登録して作成
  5. 割り当てられた Public IP を控える

枠がないと表示された場合は別リージョン(東京/大阪/Ashburn 等)で試す。

3-2. 初期セットアップ

SSH 接続後:

sudo apt update && sudo apt upgrade -y
sudo apt install -y python3-venv git

git clone <this-repo> ~/o40cs-bot
cd ~/o40cs-bot
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt

cp .env.example .env
nano .env        # BOT_TOKEN と INVC_ROLE_ID を本番値で記入
chmod 600 .env

3-3. systemd で常駐化

sudo cp deploy/o40cs-bot.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now o40cs-bot
sudo journalctl -u o40cs-bot -f   # ログを追尾

Logged in as ... が出れば稼働中。

3-4. 更新運用

cd ~/o40cs-bot
git pull
sudo systemctl restart o40cs-bot

4. 仕様メモ

動作 挙動
VC に入室 InVC を付与
VC から退出 InVC を剥奪
VC 間移動 何もしない (InVC 保持)
ミュート/デフ変更 何もしない
Bot 自身のVC入退室 無視

本機能に含まれないもの(将来追加可):

  • Bot 停止中に入退室したメンバーの状態同期
  • AFK チャンネル/自己ミュート時の除外
  • スラッシュコマンドでの手動操作
  • ログチャンネルへの通知

5. よくあるハマりどころ

  • ロールが付かない → Bot ロールの位置が InVC より下になっている
  • 起動直後にエラー.envINVC_ROLE_ID が文字列・クォート付きで書かれていないか確認(数値のみ)
  • イベントが飛んでこない → Developer Portal で SERVER MEMBERS INTENT が無効のまま
  • OCI VM が突然止まる → アイドル判定で回収される運用があるため、定期的にログイン or Always Free 複数インスタンス併用で防ぐ