# 通常運用: 差分のみ取得
python3 scripts/slack_pipeline.py -c C08SXA4M7JT --db data/C08SXA4M7JT.db
# 初回・過去分の取り込み(oldest をAPIに渡してページネーション全件取得)
python3 scripts/slack_pipeline.py -c C08SXA4M7JT --db data/C08SXA4M7JT.db \
--since 2025-04-01
# DB内のスレッド一覧を表示
python3 scripts/slack_pipeline.py -c C08SXA4M7JT --list| オプション | デフォルト | 説明 |
|---|---|---|
-c CHANNEL_ID |
C0A9KG036CS |
対象チャンネルID |
--db PATH |
data/{channel_id}.db |
SQLite DBファイルパス |
--since YYYY-MM-DD |
なし(全件) | この日付以降のメッセージのみ取得(APIに oldest として渡す) |
-l N |
100 |
1ページあたりの取得件数上限(最大999) |
--skip-fetch |
- | Slack API取得をスキップ(DBのみ使用) |
--list |
- | DB内のスレッド一覧を表示して終了(--since 併用可) |
--no-permalink |
- | パーマリンク取得を無効化 |
--dry-run |
- | Slack API取得のみ実行(DB書き込みなし) |
slack_pipeline.py(取得)→ pm_extractor.py(pm.db抽出)を連続実行する。
# 通常運用
bash scripts/pm_from_slack.sh -c C08SXA4M7JT
# 日付フィルタ付き
bash scripts/pm_from_slack.sh -c C08SXA4M7JT --since 2026-01-01
# 確認用(DB保存なし)
bash scripts/pm_from_slack.sh -c C08SXA4M7JT --dry-run| オプション | デフォルト | 説明 |
|---|---|---|
-c CHANNEL_ID |
C0A9KG036CS |
対象チャンネルID(両スクリプトに渡す) |
--since YYYY-MM-DD |
なし | この日付以降のみ対象(両スクリプトに渡す) |
--dry-run |
- | DB保存なし・確認のみ(両スクリプトに渡す) |
--no-encrypt |
- | 平文モード(両スクリプトに渡す) |
--db-slack PATH |
data/{channel_id}.db |
Slack DBパス |
--db-pm PATH |
data/pm.db |
pm.db パス |
--skip-fetch |
- | Slack API取得をスキップ(slack_pipeline.py のみ) |
--force-reextract |
- | 抽出済みスレッドも再処理(pm_extractor.py のみ) |
# 推奨: --meeting-name を指定すると pm.db に直接保存し .md を削除(平文ファイルが残らない)
sbatch scripts/pm_from_recording.sh GMT20260302-032528_Recording.mp4 --meeting-name Leader_Meeting
sbatch scripts/pm_from_recording.sh GMT20260302-032528_Recording.mp4 --skip 30 --meeting-name Leader_Meeting
# 日付を明示上書き(省略時はファイル名の GMT タイムスタンプを JST 変換して自動取得)
sbatch scripts/pm_from_recording.sh GMT20260302-032528_Recording.mp4 --meeting-name Leader_Meeting --held-at 2026-03-10
# 従来方式: .md ファイルをそのまま残す(セキュリティ警告が出る)
sbatch scripts/pm_from_recording.sh GMT20260302-032528_Recording.mp4| オプション | デフォルト | 説明 |
|---|---|---|
--skip SECONDS |
なし | 全ファイルの冒頭をスキップ |
--meeting-name NAME |
なし | 指定すると文字起こし後に pm.db へ直接インポートし .md を削除 |
--held-at YYYY-MM-DD |
GMT→JST変換 | --meeting-name と併用。省略時はファイル名のGMTタイムスタンプをJSTに変換して取得 |
処理フロー: ffmpeg → WAV変換(16kHz, mono) → DeepFilterNetノイズ除去 → SileroVAD → pyannote話者分離 → Whisper large-v3 文字起こし
--meeting-name 指定時の追加フロー: 文字起こし完了 → pm_minutes_import.py で議事録DBに保存 → pm_minutes_to_pm.py で pm.db に転記 → .md 削除
詳細な議事内容・決定の背景・AIの発生経緯を data/minutes/{meeting_name}.db に保存する。会議名ごとに独立したDBファイルを作成する。
# 単一ファイル
python3 scripts/pm_minutes_import.py meetings/2026-03-10_Leader_Meeting.md \
--meeting-name Leader_Meeting --held-at 2026-03-10
# 一括処理
python3 scripts/pm_minutes_import.py --bulk
python3 scripts/pm_minutes_import.py --bulk --since 2026-01-01 --force
# 議事録DB内容を一覧表示(全会議名)
python3 scripts/pm_minutes_import.py --list
# 特定会議名の一覧
python3 scripts/pm_minutes_import.py --list --meeting-name Leader_Meeting
# 詳細表示(Slack 投稿済み状況も含む)
python3 scripts/pm_minutes_import.py --show 2026-03-10_Leader_Meeting
# DB内容を修正用Markdownにエクスポート(MEETING_ID で一意に特定できるため --meeting-name 不要)
python3 scripts/pm_minutes_import.py --export 2026-03-10_Leader_Meeting --output corrected.md
# 人間が修正したMarkdownをLLM不使用でインポート(既存レコードを上書き)
python3 scripts/pm_minutes_import.py corrected.md \
--meeting-name Leader_Meeting --held-at 2026-03-10 --no-llm --force
# 確認のみ(DB保存なし)
python3 scripts/pm_minutes_import.py corrected.md \
--meeting-name Leader_Meeting --held-at 2026-03-10 --no-llm --force --dry-run
# 議事録DBから削除
python3 scripts/pm_minutes_import.py --delete 2026-03-10_Leader_Meeting
python3 scripts/pm_minutes_import.py --delete 2026-03-10_Leader_Meeting --meeting-name Leader_Meeting
# Slack にアップロード(Files タブに表示)
python3 scripts/pm_minutes_import.py \
--post-to-slack --meeting-name Leader_Meeting --held-at 2026-03-10 -c C08SXA4M7JT
# 特定スレッドにアップロード(スレッドに集約、Files タブには表示されない)
python3 scripts/pm_minutes_import.py \
--post-to-slack --meeting-name Leader_Meeting --held-at 2026-03-10 \
-c C08SXA4M7JT --thread-ts 1741234567.123456| オプション | デフォルト | 説明 |
|---|---|---|
input_file |
- | 文字起こしファイル(.txt / .md)(単一ファイルモード) |
--meeting-name NAME |
ファイル名から推定 | 会議種別名(DBファイル名に使用) |
--held-at YYYY-MM-DD |
ファイル名から推定 | 開催日 |
--bulk |
- | 一括処理モード |
--meetings-dir DIR |
meetings/ |
議事録 .md ファイルの検索ディレクトリ |
--minutes-dir DIR |
data/minutes/ |
議事録DBの保存ディレクトリ |
--since YYYY-MM-DD |
- | --bulk / --list 時のフィルタ |
--model MODEL |
CLI デフォルト | 使用する Claude モデル |
--force |
- | 既存レコードを上書き(--post-to-slack 時は再アップロードを許可) |
--dry-run |
- | DB保存・Slack API呼び出しなし・結果を標準出力のみ |
--output PATH |
- | 出力をファイルにも保存(単一ファイルモードのみ) |
--no-encrypt |
- | 平文モード |
--list |
- | 議事録DBの内容を表示して終了 |
--show MEETING_ID |
- | 指定した meeting_id の詳細(Slack投稿状況含む)を表示して終了 |
--export MEETING_ID |
- | DB内容を構造化Markdownでエクスポート(人間による修正の叩き台)。--output で保存先を指定しない場合は標準出力 |
--no-llm |
- | LLMを呼ばず入力ファイルを構造化Markdownとして直接解析してDBに保存。--force と組み合わせて修正版の上書きインポートに使用 |
--delete MEETING_ID |
- | 指定した meeting_id を議事録DBから削除して終了(--meeting-name で対象DB絞り込み可) |
--post-to-slack |
- | 議事録ファイルを Slack チャンネルにアップロード |
-c / --channel ID |
- | アップロード先チャンネルID(--post-to-slack 時に必須) |
--thread-ts TS |
- | 投稿先スレッドTS(省略: チャンネル直接投稿で Files タブに表示 / 指定: スレッド集約) |
Slack トークン: SLACK_USER_TOKEN(xoxp-)を使用。
格納内容:
minutes_content: 議題ごとの詳細議事内容(Markdown形式)decisions: 決定事項action_items: アクションアイテム +assignee(担当者)+due_date(期限)
pm_minutes_import.py で作成した議事録DBの内容を LLM不使用 で pm.db に転記する。
担当者・期限は議事録DBから直接コピーされる。milestone_id のみ Canvas または pm_relink.py で補完する。
# 全会議名の議事録DBを pm.db に転記
python3 scripts/pm_minutes_to_pm.py
# 特定会議名のみ転記
python3 scripts/pm_minutes_to_pm.py --meeting-name Leader_Meeting
# 日付フィルタを付けて転記
python3 scripts/pm_minutes_to_pm.py --since 2026-01-01
# 確認用(DB保存なし)
python3 scripts/pm_minutes_to_pm.py --dry-run
# 既存レコードを上書き
python3 scripts/pm_minutes_to_pm.py --meeting-name Leader_Meeting --force
# pm.db から削除
python3 scripts/pm_minutes_to_pm.py --delete 2026-03-10_Leader_Meeting| オプション | デフォルト | 説明 |
|---|---|---|
--meeting-name NAME |
全DBを対象 | 特定の会議名のみ処理 |
--minutes-dir DIR |
data/minutes/ |
議事録DBのディレクトリ |
--db PATH |
data/pm.db |
pm.db のパス |
--since YYYY-MM-DD |
なし | この日付以降の会議のみ転記 |
--force |
- | 既存レコードを上書き |
--dry-run |
- | DB保存なし・転記内容を表示のみ |
--no-encrypt |
- | 平文モード |
--delete MEETING_ID |
- | 指定した meeting_id を pm.db から削除して終了 |
# 通常運用: 未処理スレッドのみ抽出
python3 scripts/pm_extractor.py -c C08SXA4M7JT
# 確認用(DB保存なし)
python3 scripts/pm_extractor.py -c C08SXA4M7JT --dry-run --output result.txt
# 抽出済みスレッドの一覧表示
python3 scripts/pm_extractor.py -c C08SXA4M7JT --list
python3 scripts/pm_extractor.py -c C08SXA4M7JT --list --since 2026-02-01| オプション | デフォルト | 説明 |
|---|---|---|
-c CHANNEL_ID |
C0A9KG036CS |
対象チャンネルID |
--db-slack PATH |
data/{channel_id}.db |
Slack DBのパス |
--db-pm PATH |
data/pm.db |
pm.db のパス |
--since YYYY-MM-DD |
なし(全件) | この日付以降のスレッドのみ対象 |
--force-reextract |
- | 抽出済みスレッドも再処理 |
--dry-run |
- | DB保存なし・結果を標準出力のみ |
--output PATH |
- | 標準出力の内容をファイルにも保存 |
--list |
- | 抽出済みスレッドの一覧を表示して終了(--since 併用可) |
レポート構成: サマリー → 直近の決定事項 → 要注意事項 → 未完了アクションアイテム(表形式)
未完了アクションアイテム表には ID・担当者・期限・マイルストーン・状況・内容・出典・対応状況 の列があり(pm_relink.py --export と列・順序を統一)、会議中にCanvas上で直接記入できる。
# 週次進捗レポートを生成してCanvas投稿
python3 scripts/pm_report.py
# 直近1ヶ月のデータのみ対象にしてレポート生成
python3 scripts/pm_report.py --since 2026-02-01
# 確認用(Canvas投稿なし)
python3 scripts/pm_report.py --dry-run --output report.md| オプション | デフォルト | 説明 |
|---|---|---|
--db PATH |
data/pm.db |
pm.db のパス |
--canvas-id ID |
F0AAD2494VB |
投稿先 Canvas ID |
--since YYYY-MM-DD |
なし(全期間) | この日付以降のデータのみ対象 |
--skip-canvas |
- | Canvas 投稿をスキップ |
--show-acknowledged |
- | 確認済み決定事項も表示する(デフォルトは非表示) |
--show-workload |
- | 担当者別負荷セクションを出力する(デフォルトは非表示) |
--dry-run |
- | Canvas 投稿なし・結果を標準出力のみ |
--output PATH |
- | 出力をファイルにも保存 |
直近の決定事項の確認済み管理:
- Canvas 上の決定事項セクションにチェックボックスが表示される
- チェックを入れると
pm_sync_canvas.py実行時にacknowledged_atが記録される - デフォルトでは確認済み(チェック済み)の決定事項はレポートに表示されない
--show-acknowledgedを指定すると確認済みも含めて表示(未確認→確認済みの順)
会議中にCanvas上の各列に記入された内容をpm.dbに反映する。
運用フロー:
pm_report.pyでアクションアイテム表をCanvas投稿(対応状況列は空)- 会議中にメンバーがCanvas上の各列を記入・編集
- 決定事項を確認したらCanvas上のチェックボックスにチェック
- 会議後に本スクリプトを実行してpm.dbを更新
# 通常運用
python3 scripts/pm_sync_canvas.py
# 確認用(DB更新なし)
python3 scripts/pm_sync_canvas.py --dry-run
# 結果をファイルにも保存
python3 scripts/pm_sync_canvas.py --output sync_result.txt| オプション | デフォルト | 説明 |
|---|---|---|
--canvas-id ID |
F0AAD2494VB |
対象 Canvas ID |
--db PATH |
data/pm.db |
pm.db のパス |
--dry-run |
- | DB保存なし・結果を標準出力のみ |
--output PATH |
- | 結果をファイルにも保存 |
完了判定: 状況 列のみで判断(対応状況 列はclose判定に使わない)
状況 列の完了キーワード(status='closed' に更新): 完了 done 済 対応済 解決 close closed finish finished [x](大文字小文字を区別しない)。Canvas上のチェックボックスにチェックを入れた場合も [x] として検出され完了扱いになる。
対応状況 列は内容をそのまま note 列に保存(status には影響しない)
Canvas上で変更可能な列: 担当者・期限・マイルストーン・状況・内容・対応状況(非空かつDB値と異なる場合のみ更新)
決定事項の確認(acknowledgement)同期:
- Canvas の決定事項セクションのチェックボックス状態を読み取り、
decisions.acknowledged_atを更新する - チェックあり →
acknowledged_atに現在日時を記録 - チェックなし(外した場合) →
acknowledged_atを NULL にリセット(確認取り消し) - 注意: チェック直後は Slack の
url_private更新に遅延があるため、チェック後数分待ってから実行すること - Canvas 同期が拾えなかった場合は
--acknowledge ID...で直接指定できる --debug-canvasオプションでCanvas生データをダンプしてトラブルシュートできる
アクションアイテムと決定事項をCSV経由で一括編集する。LLMは使用しない。1ファイルに2セクション(アクションアイテム / 決定事項)を出力・入力する。
アクションアイテムの編集可能フィールド:
| フィールド | 空欄の扱い |
|---|---|
assignee |
NULL(担当者なし) |
due_date |
NULL(期限なし) |
milestone_id |
NULL(紐づけ解除) |
content |
スキップ(変更なし) |
status |
スキップ(変更なし)。open / closed を推奨 |
決定事項の編集可能フィールド:
| フィールド | 空欄の扱い |
|---|---|
content |
スキップ(変更なし) |
decided_at |
スキップ(変更なし) |
# milestone_id が未設定のアイテム + 全決定事項をCSVにエクスポート(デフォルト: relink.csv)
python3 scripts/pm_relink.py --export
# 全件エクスポート
python3 scripts/pm_relink.py --export --all
# 日付フィルタを付けてエクスポート
python3 scripts/pm_relink.py --export --since 2026-02-01
# 変更内容を確認(DB更新なし)
python3 scripts/pm_relink.py --import relink.csv --dry-run
# DBに反映(確認プロンプトあり)
python3 scripts/pm_relink.py --import relink.csv
# アクションアイテムと決定事項を一覧表示
python3 scripts/pm_relink.py --list
python3 scripts/pm_relink.py --list --all
python3 scripts/pm_relink.py --list --since 2026-02-01| オプション | デフォルト | 説明 |
|---|---|---|
--export |
- | アクションアイテム + 決定事項をCSVにエクスポート |
--import PATH |
- | CSVを読み込んでDBを更新 |
--list |
- | アクションアイテムと決定事項を一覧表示して終了 |
--all |
- | --export / --list 時に全件対象(デフォルトは milestone_id IS NULL のみ) |
--since YYYY-MM-DD |
- | --export / --list 時のフィルタ |
--output PATH |
relink.csv |
--export 時の出力ファイルパス |
--db PATH |
data/pm.db |
pm.db のパス |
--no-encrypt |
- | 平文モード |
--dry-run |
- | DB更新なし・変更内容を表示のみ |
goals.yaml を読み込み goals / milestones テーブルに完全同期する。
# goals.yaml を編集・承認後に実行(完全同期)
python3 scripts/pm_goals_import.py
# 変更内容を確認してから実行
python3 scripts/pm_goals_import.py --dry-run
# 登録済み一覧・達成状況を確認
python3 scripts/pm_goals_import.py --list
# 一覧をファイルにも保存
python3 scripts/pm_goals_import.py --list --output goals_status.txt| オプション | デフォルト | 説明 |
|---|---|---|
--goals-file PATH |
goals.yaml |
goals.yaml のパス |
--db PATH |
data/pm.db |
pm.db のパス |
--dry-run |
- | DB保存なし・内容を表示のみ |
--list |
- | 登録済みゴール・マイルストーン一覧と達成状況を表示して終了 |
--no-encrypt |
- | DBを暗号化しない(平文モード) |
--output PATH |
- | 出力をファイルにも保存(--list / 通常インポート時の標準出力を保存) |
# 鍵を生成(初回のみ)
python3 scripts/db_utils.py --gen-key
# → ~/.secrets/pm_db_key.txt に 64文字のランダム鍵を生成(chmod 600)
# 既存の平文DBを暗号化DBに変換(初回のみ)
python3 scripts/db_utils.py --migrate data/pm.db data/C08SXA4M7JT.db data/C0A9KG036CS.db
# → 各 .bak にバックアップを作成してから変換・検証
# 変換内容を確認のみ(変換しない)
python3 scripts/db_utils.py --migrate data/pm.db --dry-run鍵ファイルを紛失すると暗号化済みDBは復元不可能。パスワードマネージャー等に必ずバックアップすること。
pm.db のデータを統計集計し、LLM でプロジェクトの健全性評価・リスク特定・改善提案を生成する。
pm_report.py が定型の進捗レポートを出力するのに対し、本スクリプトは「なぜ遅れているか」「どのリスクが最も重大か」「次に何をすべきか」という解釈・洞察を生成する。
# 確認用(Canvas投稿なし・標準出力のみ)
python3 scripts/pm_insight.py --db data/pm.db --dry-run
# ファイルに保存して内容確認
python3 scripts/pm_insight.py --db data/pm.db --dry-run --output insight.md
# Canvas に投稿
python3 scripts/pm_insight.py --db data/pm.db --canvas-id F0ALP1XQJHL
# 直近1ヶ月のデータのみ対象
python3 scripts/pm_insight.py --db data/pm.db --since 2026-02-01 --dry-run| オプション | デフォルト | 説明 |
|---|---|---|
--db PATH |
- | pm.db のパス(必須) |
--canvas-id ID |
なし | 投稿先 Canvas ID(省略時は Canvas 投稿なし) |
--since YYYY-MM-DD |
なし | この日付以降のデータのみ対象 |
--skip-canvas |
- | Canvas 投稿をスキップ |
--dry-run |
- | Canvas 投稿なし・結果を標準出力のみ |
--output PATH |
- | 結果をファイルにも保存 |
--no-encrypt |
- | 平文モード |
--model MODEL |
CLI デフォルト | 使用する Claude モデル |
生成されるインサイトの構成:
- 総合評価(A/B/C/D ヘルススコア + LLM生成の日本語ナラティブ)
- マイルストーン別評価(進捗評価・懸念事項)
- リスク・課題(優先度 H/M/L + 推奨対応)
- 改善提案(具体的アクション + 根拠)
LLMに渡すデータ:
- マイルストーン進捗(open/closed件数・期限残日数)
- 期限超過アイテム一覧(上位15件)
- 担当者別負荷(open件数・期限超過件数)
- マイルストーン未紐づけアイテム数・担当者なしアイテム数
- 週次トレンド(直近4週の作成件数 vs. 完了件数)
- 未確認決定事項一覧(上位10件)
全スクリプトに --no-encrypt オプションがあり、平文モードで動作させることができる。
Canvas同期(pm_sync_canvas.py)とマイルストーン紐づけ変更(pm_relink.py)の変更前後を記録した audit_log を参照する。
# 直近30件を表示
python3 scripts/db_utils.py --audit-log
# 件数を指定
python3 scripts/db_utils.py --audit-log --limit 100
# ソースで絞り込む
python3 scripts/db_utils.py --audit-log --source canvas_sync
python3 scripts/db_utils.py --audit-log --source relink
# 特定アクションアイテムの変更履歴
python3 scripts/db_utils.py --audit-log --id 98
# ファイルにも保存
python3 scripts/db_utils.py --audit-log --output audit.txt| オプション | デフォルト | 説明 |
|---|---|---|
--db PATH |
data/pm.db |
pm.db のパス |
--limit N |
30 |
表示件数 |
--source SOURCE |
なし(全件) | canvas_sync または relink で絞り込む |
--id ID |
なし(全件) | アクションアイテムIDで絞り込む |
--no-encrypt |
- | 平文モード |
--output PATH |
- | 結果をファイルにも保存 |
pm.db の内容をブラウザ上で閲覧・編集できる Web UI。NiceGUI + AG Grid を使用。アクションアイテム・決定事項の各フィールドをセル上で直接編集できる。source 列をクリックすると Slack リンク(Slackを新規タブで開く)または議事録ポップアップを表示する。
# 起動(バックグラウンドデーモン)
bash scripts/pm_web_start.sh
# → http://localhost:8501 でブラウザアクセス
# → ログ: logs/pm_web.log
# → PID: logs/pm_web.pid
# 停止
bash scripts/pm_web_stop.sh
# 起動状態の確認
cat logs/pm_web.pid | xargs kill -0 && echo 起動中 || echo 停止中
# ログ確認
tail -f logs/pm_web.log| オプション(環境変数・引数) | デフォルト | 説明 |
|---|---|---|
--db PATH |
data/pm.db |
pm.db のパス |
--no-encrypt |
- | 平文モード |
--port N |
8501 |
ポート番号 |
機能:
- アクションアイテム: 内容・担当者・期限・マイルストーン・状況・対応状況・削除フラグをセル編集
- 決定事項: 内容・発生日・削除フラグをセル編集
source列:Slackクリック → 投稿をブラウザの新規タブで開く /minutesクリック → 議事録をポップアップ表示- フィルタ: status(open/closed/すべて)・マイルストーン・発生日・削除状態(非削除/削除済み/すべて)
- 楽観的排他制御: 別タブや他ユーザーが先に保存した場合はエラーを表示し上書きを防止