Skip to content

RIKEN-RCCS/ProjectManagement

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

189 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ProjectManagement

富岳NEXT アプリケーション開発エリアのプロジェクトマネジメント支援システム。


このシステムが解決する問題

大規模プロジェクトでは、会議・Slack・資料に情報が分散し、以下の問題が起きる。

PM課題 放置するとどうなるか
会議の決定事項が記憶頼みで流れる 同じ議論が繰り返され、合意が形骸化する
アクションアイテムの担当・期限が曖昧 「誰がやるのか」が不明なまま期限を超過する
ゴールとタスクが紐づいていない 忙しいが前進していない状態に陥る
状況把握に毎回手作業が必要 PMが情報収集に追われ、判断に集中できない
機密情報を外部サービスに送れない 市販PMツールが使えず、手運用に逆戻りする

本システムは、ローカルLLMで情報を自動収集・構造化し、人間がゴールの定義と最終判断に集中できる環境を提供する。


設計思想:2層構造

【トップダウン層】 ゴール・マイルストーン
                  └─ goals.yaml に人間が定義・承認(gitで変更履歴管理)
                          ↓ 評価の軸を与える
【ボトムアップ層】 アクションアイテム・決定事項
                  └─ 会議議事録・Slackから LLM が自動抽出・マイルストーンに紐づけ
役割 担当
ゴール・マイルストーンの定義・承認 人間(意思決定者)
情報の収集・整理・抽出・紐づけ推定 LLM
誤りの修正・最終判断 人間(Canvas / Web UI で編集)
達成状況の計算・レポート・リスク検知 システム

機能マップ

本システムの機能を、解決するPM課題ごとに整理する。

1. 情報の自動収集 — 「手作業で情報を集めなくて済む」

週次会議・Slackの投稿から、決定事項・アクションアイテム・担当者・期限をLLMが自動抽出して pm.db に蓄積する。

会議録音 → 議事録 → pm.db(録音を置くだけで完結)

# data/ に .m4a を置いて実行するだけ
bash scripts/pm_from_recording_auto.sh

# Slack投稿も自動化
bash scripts/pm_from_recording_auto.sh -c C08SXA4M7JT

処理フロー: 音声 → Whisper文字起こし → ローカルLLMで議事録生成 → 議事録DB保存 → pm.db転記(平文ファイルはディスクに残らない)

Slack → pm.db

bash scripts/pm_from_slack.sh -c C08SXA4M7JT

処理フロー: Slackメッセージ差分取得 → 生メッセージから決定事項・アクションアイテム抽出 → pm.db保存

2. ゴール管理 — 「今どこにいるかが分かる」

マイルストーンを定義し、全アクションアイテムを紐づけることで、プロジェクトの現在地を定量的に把握する。

# goals.yaml を編集後に同期
python3 scripts/pm_goals_import.py

# 達成状況を確認
python3 scripts/pm_goals_import.py --list

goals.yaml はgit管理。マイルストーンの変更理由・経緯がコミット履歴として残る。

3. 進捗の可視化とレビュー — 「会議で使えるレポートが自動で出る」

pm.db から週次進捗レポートを自動生成し、Slack Canvas に投稿する。会議中にCanvas上で直接編集でき、変更はDBに同期される。

会議前: レポート投稿

source ~/.secrets/slack_tokens.sh
bash scripts/canvas_report.sh --db data/pm.db --canvas-id F0ALP1XQJHL

レポート構成:

  1. プロジェクトの現在地 — マイルストーン達成率・残日数(DBから自動計算)
  2. サマリー — LLMによる全体概況
  3. 直近の決定事項 — 未確認はチェックボックスで管理
  4. 要注意事項 — 期限超過・担当者不明のアイテム
  5. 未完了アクションアイテム — 表形式(Canvas上で各列を直接編集可能)

会議中: Canvas上で編集

Canvas上で編集可能な列: 担当者・内容・期限・マイルストーン・状況・対応状況

  • 状況 列にチェックを入れる or 「完了」「done」等を記入 → 完了扱い
  • 決定事項 のチェックボックスにチェック → 確認済みとして次回レポートから非表示

会議後: DB同期(次回レポート投稿時に自動実行。単独実行も可能)

python3 scripts/pm_sync_canvas.py --db data/pm.db --canvas-id F0ALP1XQJHL

4. リスク検知とインサイト — 「問題に気づくのが遅れない」

Argus AI秘書 — 毎朝のブリーフィングを自動生成(cron 平日8:57)

Slack生メッセージ・議事録・pm.db統計を統合分析し、今日やるべきことを優先度順に提示する。Slackスラッシュコマンドで誰でも利用可能。

/argus-brief                 ← 今日の状況サマリーと優先アクション(最大5件)
/argus-brief @西澤            ← 特定担当者にフォーカス
/argus-draft agenda 次回リーダー会議  ← 会議アジェンダ草案
/argus-risk                  ← リスク一覧と予兆の検知

LLMインサイト — プロジェクト健全性のA/B/C/D評価

python3 scripts/pm_insight.py --db data/pm.db --dry-run

期限超過・担当者負荷・完了速度の推移等を統計集計し、LLMが「なぜ遅れているか」「次に何をすべきか」を解釈・提案する。

5. 過去の議論を検索 — 「あの話どこで決まったっけ?」

/ask コマンドで議事録本文・Slack生メッセージを自然言語検索できる。SudachiPy形態素解析 + FTS5 + LLM re-ranking による日本語検索。

/ask GPU性能の評価方針について
/ask Benchparkハッカソンの内容を教えて

6. データの編集と修正 — 「LLMの誤りを人間が正せる」

LLMの抽出は完璧ではない。誤った担当者・期限・マイルストーン紐づけを人間が修正できる手段を複数提供する。

Web UI(ブラウザで編集)

python3 scripts/pm_api.py --port 8501 --db data/pm.db
# → http://localhost:8501

CLI一括編集(CSV経由)

python3 scripts/pm_relink.py --export          # CSVにエクスポート
# CSVを編集...
python3 scripts/pm_relink.py --import relink.csv  # DBに反映

議事録の修正と再インポート

python3 scripts/pm_minutes_import.py --export 2026-03-10_Leader_Meeting -o corrected.md
# corrected.md を修正...
python3 scripts/pm_minutes_import.py corrected.md --meeting-name Leader_Meeting \
    --held-at 2026-03-10 --no-llm --force

情報の流れ

[Slack] ─── slack_pipeline.py ───→ {channel_id}.db
                                          ↓
[会議録音]                          pm.db ←─ pm_extractor.py
  data/*.m4a           │          (決定事項・               ↑
                       │        アクションアイテム)   {channel_id}.db
                       │                  ↓
                       │            pm_report.py → Slack Canvas
                       │            pm_insight.py → 健全性評価
                       │            pm_argus.py → ブリーフィング
                       │
                       └─ pm_minutes_import.py ──→ data/minutes/{kind}.db
                                    ↓          (詳細議事録・担当者・期限)
                         pm_minutes_to_pm.py ──→ pm.db

情報の流れ


データベース構成

DB 役割 単位
data/{channel_id}.db Slackメッセージ(親メッセージ・返信) チャンネルごとに独立
data/minutes/{kind}.db 議事録詳細(議事内容・決定事項・AI) 会議名ごとに独立
data/pm.db PM統合データ(全チャンネル・全会議を横断) 1ファイル
data/qa_pm*.db QA検索インデックス(FTS5) インデックスごとに独立

pm.db のテーブル

テーブル 内容
action_items アクションアイテム(担当者・期限・status・note・milestone_id)
decisions 決定事項(確認済み管理付き)
goals / milestones goals.yaml から同期したゴール・マイルストーン
meetings 会議情報(開催日・種別・要約)
slack_extractions 抽出済みスレッド管理(差分処理用)
audit_log 全変更履歴(Canvas同期・relink・Web UI操作を記録)

変更履歴の確認:

python3 scripts/db_utils.py --audit-log
python3 scripts/db_utils.py --audit-log --source canvas_sync --limit 50

セキュリティ

機密情報の保護方針

  • LLM処理は全てローカル: 議事録・Slackメッセージ等の機密情報は外部サービスに送出しない。組織内で稼働するローカルLLM(vLLMサーバ)で処理する
  • DB暗号化: 全DBにSQLCipher AES-256暗号化を適用。ファイルが漏洩しても鍵なしでは内容を読めない
  • 議事録の平文残存防止: --meeting-name 指定時は処理完了後に .md ファイルを自動削除
  • トークン管理: ~/.secrets/ 配下にファイルとして保管(chmod 600)。.bashrc への直書き禁止

DB暗号化の初回セットアップ

python3 scripts/db_utils.py --gen-key                    # 鍵生成
python3 scripts/db_utils.py --migrate data/pm.db data/C*.db  # 平文→暗号化変換

鍵を紛失すると暗号化済みDBは復元不可能。 パスワードマネージャー等に必ずバックアップすること。


環境セットアップ

動作要件

  • Python 3.10 以上
  • ローカルLLM(推奨): OpenAI互換APIサーバ(vLLM等)を起動し、環境変数で接続先を設定
  • 文字起こし機能を使用する場合: GPU環境(NVIDIA L40S / GH200 等)

トークン設定

mkdir -p ~/.secrets && chmod 700 ~/.secrets
cat > ~/.secrets/slack_tokens.sh << 'EOF'
export SLACK_USER_TOKEN="xoxp-..."
export OPENAI_API_BASE="http://localhost:8000/v1"
export OPENAI_API_KEY="dummy"
export OPENAI_MODEL="google/gemma-4-26B-A4B-it"
EOF
chmod 600 ~/.secrets/slack_tokens.sh

Slack User Token のスコープ

channels:history, channels:read, users:read, files:read, files:write, canvases:read, canvases:write

QAサーバー・Argus の起動

bash scripts/pm_qa_start.sh    # /ask・/argus-* が有効になる
bash scripts/pm_qa_stop.sh     # 停止

スクリプト一覧

詳細なオプションは CLAUDE.mdコマンドリファレンスを参照。

日常運用(シェルスクリプト)

スクリプト 用途
pm_from_recording_auto.sh 録音ファイルの自動検出・文字起こし・議事録生成・pm.db登録
pm_from_recording.sh 録音ファイルを指定して文字起こし・議事録生成
pm_from_slack.sh Slack取得・pm.db抽出を一括実行
canvas_report.sh Canvas同期 → レポート生成・Canvas投稿
pm_qa_start.sh / pm_qa_stop.sh QA・Argusデーモンの起動・停止

情報収集・抽出

スクリプト 用途
slack_pipeline.py Slack差分取得・DB保存
pm_extractor.py Slack生メッセージからアクションアイテム・決定事項を抽出
pm_minutes_import.py 議事録をLLM解析して議事録DBに保存
pm_minutes_to_pm.py 議事録DBからpm.dbに転記(LLM不使用)
generate_minutes_local.py ローカルLLMで高品質議事録を生成
whisper_vad.py VAD+Whisperによる話者分離・文字起こし

レポート・分析

スクリプト 用途
pm_report.py 週次進捗レポート生成・Canvas投稿
pm_insight.py プロジェクト健全性評価・リスク特定・改善提案
pm_argus.py Argus AI秘書(ブリーフィング・草案・リスク分析)

データ編集・同期

スクリプト 用途
pm_sync_canvas.py Canvas上の編集内容をpm.dbに同期
pm_relink.py CSV経由でアクションアイテム・決定事項を一括編集
pm_goals_import.py goals.yaml → pm.db 完全同期
pm_api.py Web UI(FastAPI REST API + フロントエンド)

QA・検索

スクリプト 用途
pm_qa_server.py Slack Socket Modeデーモン(/ask・/argus-*を統合処理)
pm_embed.py QAインデックス構築(SudachiPy+FTS5)

共通ライブラリ

モジュール 用途
db_utils.py DB接続・統計クエリ・暗号化(全スクリプト共通)
cli_utils.py LLM呼び出し・ログ・argparse(全スクリプト共通)
web_utils.py Web UI用DB読み書き・楽観的排他制御
format_utils.py Markdownテーブル整形
canvas_utils.py Slack Canvas操作

About

Project Management Support System

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors