Slack / Microsoft Teams / Notion / スプレッドシート / GitHub / Git など複数ツールのアクティビティを横断して、進捗レポート / ステータス更新 を GitHub Copilot で自動生成する VSCode 拡張です。 PM が毎週・毎日書いている「今週やったこと / 進行中 / ブロッカー / 次のアクション」を、各ツールのログから数秒で下書きします。
⚠️ ローカル拡張です。Slackトークンは VSCode の SecretStorage に、GitHub は VSCode 組み込みのサインインを利用します。収集したログは要約のために Copilot のモデルへ渡されます。
| ソース | 取得内容 | 認証 |
|---|---|---|
| Slack | 設定チャンネルの会話(スレッド含む) | Bot Token (SecretStorage) |
| Microsoft Teams | 個人/グループチャット、指定チームチャネル | VSCode の Microsoft サインイン(トークン設定不要) |
| Notion | 指定DBの更新ページ / 最近編集ページ(プロパティ+本文) | Integration Token (SecretStorage) |
| スプレッドシート | CSVファイル / Google Sheets / CSV公開URL | 不要(Google Sheets は共有URL) |
| GitHub | 対象リポジトリの Issue / PR / コミット | VSCode の GitHub サインイン(トークン設定不要) |
| Git (local) | ワークスペース内リポジトリのコミット履歴 | 不要 |
statusPilot.sources に複数指定すると、すべてを横断した1本のレポートになります(例: ["slack", "github", "git"])。新しいツールは src/sources/ にプロバイダを1つ追加するだけで対応できます。
- 3つの入口
- コマンド
Status Pilot: Slackから進捗レポートを生成— 設定したチャンネルの直近メッセージを取得して生成 - コマンド
Status Pilot: 選択テキストから進捗レポートを生成— 貼り付けた/選択したログから生成(Slack設定なしでも動く) - Copilot Chat の
@status— チャットから対話的に生成(例:@status この1週間の team-dev)
- コマンド
- 構造化された出力: サマリー / 完了・進捗 / 進行中 / ブロッカー・リスク / 次のアクション
- 事実ベース: ログに無い内容は推測せず「要確認」と明記するようプロンプト設計
- 日英対応・対象期間・スレッド取り込み・独自指示をカスタマイズ可能
- VSCode 1.93 以上
- GitHub Copilot 拡張(言語モデル API を利用)
- (Slack連携を使う場合)Slack Bot Token
npm install
npm run compile # もしくは npm run watchVSCode で本フォルダを開き F5(Run Extension)を押すと、拡張機能ホストが起動します。
- https://api.slack.com/apps で App を作成
- OAuth & Permissions → Bot Token Scopes に以下を追加
channels:history,groups:history,users:read
- ワークスペースにインストールし、
xoxb-...トークンを取得 - 対象チャンネルに Bot を招待(
/invite @your-app) - コマンドパレットで
Status Pilot: Slackトークンを設定を実行して貼り付け
GitHub / Git / Teams はトークン設定不要です。
statusPilot.sourcesを["teams", "github", "git"]にすれば、VSCode の Microsoft / GitHub サインインとローカルのコミット履歴だけで動きます。Slackを使うときのみ Bot Token の設定が必要です。
statusPilot.sourcesに"teams"を追加- 初回のレポート生成時に VSCode の Microsoft サインイン(Graph スコープ
User.Read,Chat.Read)の同意ダイアログが出るので許可 - 個人・グループチャットは自動で対象になります。チームのチャネルも含めたい場合のみ
statusPilot.teams.channelsにteamId/channelIdを指定(チャネル取得は組織によって管理者同意ChannelMessage.Read.Allが必要なことがあります)
組織のポリシーで上記サインインが使えない場合は、コマンド
Status Pilot: Microsoft Graph トークンを設定から Graph Explorer 等で取得したアクセストークンを手動設定できます(トークンは約1時間で失効するためテスト用途向け)。
- https://www.notion.so/my-integrations で内部インテグレーションを作成し、
secret_...トークンを取得 - 取得対象のページ/データベースを開き、
•••→「接続」からそのインテグレーションを共有(これをしないとAPIから見えません) - コマンド
Status Pilot: Notionトークンを設定で貼り付け statusPilot.sourcesに"notion"を追加。statusPilot.notion.databasesにDB IDを入れるとそのDBの更新行(ステータス/担当/期日などのプロパティ含む)を、空なら共有済みの最近編集ページを取得します
データベースID は対象DBのURL
notion.so/<workspace>/<DATABASE_ID>?v=...のDATABASE_ID部分です。
statusPilot.sources に "sheets" を追加し、以下のいずれかを指定します(認証不要)。
- ローカルCSV:
statusPilot.sheets.filesにパス(相対パスはワークスペース基準) - Google Sheets:
statusPilot.sheets.urlsに共有URLを入れるだけ(自動でexport?format=csvに変換)。シートを「リンクを知っている全員が閲覧可」に設定してください - 任意のCSV公開URL: 同じく
sheets.urlsに指定
Excel(.xlsx) のバイナリ解析は現状未対応です。Excel は「CSVとして保存」するか、Google Sheets にアップロードして共有URLをご利用ください(XLSX対応はロードマップ)。
チャンネルIDは、Slackのチャンネル名を右クリック →「リンクをコピー」した URL 末尾、または
https://app.slack.com/...のCから始まる文字列です。
| やりたいこと | 操作 |
|---|---|
| 既定テンプレートでレポート生成 | コマンド Status Pilot: 進捗レポートを生成 |
| テンプレートを選んで生成 | コマンド Status Pilot: テンプレートを選んでレポート生成(週次/デイリー/役員向けをその場で選択) |
| 貼り付けたログから即生成 | ログを選択 → 右クリック → 選択テキストから進捗レポートを生成 |
| チャットで対話的に | Copilot Chat で @status この1週間まとめて / @status daily / @status 役員向け |
生成結果は新しい Markdown エディタに開きます。そのまま編集してSlack/Notion等に貼り付けてください。
statusPilot.template または都度の切替で、用途に合わせた構成・トーンに変えられます。
| テンプレート | 対象読者 | 構成 |
|---|---|---|
| weekly(週次) | 関係者・チーム | サマリー / 完了・進捗 / 進行中 / ブロッカー・リスク / 次のアクション |
| daily(デイリー) | チーム | サマリー / 直近やったこと / 次にやること / 困りごと(スタンドアップ向けに簡潔) |
| executive(役員向け) | 経営層 | 健全性サマリー / 主要な進展(数値)/ 意思決定が必要な事項 / 主要リスク / 今後の見通し |
切替方法は3通り:
- 設定
statusPilot.templateで既定を指定 - コマンド
テンプレートを選んでレポート生成でその場で選択 - Copilot Chat でヒントを付ける(例:
@status daily、@status 役員向けに先週分)
statusPilot.highlightChanges(既定オン)が有効だと、レポート冒頭に 「🔄 前回からの変化」 セクションが追加されます。
- 🆕 新しく始まった項目 / ✅ 進行中→完了になった項目 / 🔀 状態・数値が変わった項目 / 🚨 新規ブロッカー・🆗 解消ブロッカー
- 比較対象は同じテンプレートの直近レポートです(週次なら先週分、デイリーなら前回分)。レポートを生成するたびに、その内容が次回のベースラインとして自動保存されます。
- 差分が判断できない場合はモデルが推測せず「前回比: 大きな変化なし」と記載します。
- ベースラインを消したいときはコマンド
Status Pilot: レポート履歴(差分ベースライン)を消去。
履歴は VSCode の globalState にテンプレート別で保存されます(外部送信なし)。最初の1回は比較対象がないため差分セクションは付きません。
src/
extension.ts … コマンド/チャット参加者の登録、フロー制御
report.ts … テンプレート/プロンプト構築 & Copilot 言語モデル呼び出し
history.ts … テンプレート別の直近レポート保存(差分ベースライン)
slack.ts … Slack Web API クライアント(履歴・スレッド取得、メンション整形)
sources/
types.ts … ActivitySource インターフェース(プラグインの共通契約)
index.ts … 有効ソースを横断収集して統合ログを作る集約器
slack.ts … Slack プロバイダ
teams.ts … Microsoft Teams プロバイダ(Graph API、組み込み認証)
notion.ts … Notion プロバイダ(DB/ページ、プロパティ+本文)
sheets.ts … スプレッドシート プロバイダ(CSV/Google Sheets、依存ゼロ)
github.ts … GitHub プロバイダ(Issue/PR/コミット、組み込み認証)
git.ts … ローカル Git プロバイダ(コミット履歴)
src/sources/ に ActivitySource を実装したファイルを作り、src/sources/index.ts の ALL_SOURCES に追加するだけです。package.json の statusPilot.sources の enum にも id を足せば設定で選べるようになります。
- GitHub Issue/PR/コミットを統合
- ローカル Git コミットを統合
- Microsoft Teams チャット/チャネルを統合
- Notion(DB/ページ)を統合
- スプレッドシート(CSV / Google Sheets)を統合
- レポートのテンプレート切替(週次/デイリー/役員向け)
- 前回レポートとの差分ハイライト
- Excel(.xlsx) バイナリの直接読み込み
- ユーザー定義テンプレートの追加(任意フォーマット)
- Marketplace 公開
MIT
{ // 使うデータ源(複数可)。横断レポートになる "statusPilot.sources": ["slack", "teams", "github", "git"], // Slack "statusPilot.slack.channels": [ { "id": "C0123ABCD", "name": "team-dev" }, { "id": "C0456WXYZ", "name": "product" } ], "statusPilot.includeThreads": true, // Microsoft Teams(チャットは自動対象。チームチャネルを足したい場合のみ指定) "statusPilot.teams.channels": [ { "teamId": "<team-id>", "channelId": "<channel-id>", "name": "general" } ], "statusPilot.teams.maxMessagesPerChat": 100, // Notion(DB指定。空ならインテグレーション共有済みの最近編集ページを検索) "statusPilot.notion.databases": ["<database-id>"], "statusPilot.notion.includeContent": true, // スプレッドシート(ローカルCSV + Google Sheets/CSV URL) "statusPilot.sheets.files": ["data/tasks.csv"], "statusPilot.sheets.urls": ["https://docs.google.com/spreadsheets/d/<id>/edit#gid=0"], "statusPilot.sheets.maxRows": 100, // GitHub(空ならワークスペースの origin から自動推定) "statusPilot.github.repos": ["awano27/status-pilot"], // Git(ローカルコミット) "statusPilot.git.maxCommits": 100, // 共通 "statusPilot.template": "weekly", // weekly | daily | executive "statusPilot.highlightChanges": true, // 冒頭に「前回からの変化」を追加 "statusPilot.lookbackDays": 7, "statusPilot.reportLanguage": "ja", "statusPilot.customInstructions": "宛先は経営会議。専門用語は避け、数値があれば必ず含める。" }