mcpField
K
kill-the-standup

kill-the-standup

github.com/varnan-tech生産性68743 回インストール2 週間前に更新
リポジトリ

kill-the-standup について

Linear、GitHub、Slackを使うチーム向けのスタンドアップ報告スキルです。前日の作業をまとめて報告形式に整え、Slackへの投稿前に確認を求めます。

主な機能

  1. 01最近更新されたLinearの課題を取得
  2. 02前日のGitHubコミットを収集
  3. 03作業をDoneとDoingに分類
  4. 04Slack投稿前に報告をプレビュー

活用シーン

  1. 01毎日のエンジニアリング報告の準備
  2. 02課題とコミットの進捗をSlackで共有

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/varnan-tech/opendirectory --skill kill-the-standup

インストール後、Claude Code で/kill-the-standupを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

.env.example
README.md
evals/
evals.json
references/
standup-format.md

詳細

スタンドアップをなくそう

昨日の Linear の課題と GitHub のコミットを読み込み、スタンドアップの更新内容を整えて Slack に投稿します。


Step 1: セットアップの確認

必要な環境変数が設定されていることを確認します。

echo "LINEAR_API_KEY: ${LINEAR_API_KEY:+set}"
echo "SLACK_WEBHOOK_URL: ${SLACK_WEBHOOK_URL:+set}"
echo "GITHUB_REPO: ${GITHUB_REPO:-not set}"
echo "GITHUB_USERNAME: ${GITHUB_USERNAME:-not set}"

LINEAR_API_KEY が設定されていない場合: 停止します。ユーザーに次のように伝えます。「LINEAR_API_KEY が必要です。Linear → Settings → API → Personal API keys から取得してください。.env ファイルに追加してください。」

SLACK_WEBHOOK_URL が設定されていない場合: 停止します。ユーザーに次のように伝えます。「SLACK_WEBHOOK_URL が必要です。api.slack.com/apps → Your App → Incoming Webhooks で Incoming Webhook を作成してください。.env ファイルに追加してください。」

GITHUB_REPO が設定されていない場合: 続行します。GitHub のコミットはスキップされます。このことをユーザーに伝えてください。


Step 2: Linear のアクティビティを取得

昨日の日付を ISO 8601 形式で計算します(例:2026-04-09T00:00:00.000Z)。

現在のユーザー ID を取得:

curl -s -X POST https://api.linear.app/graphql \
  -H "Authorization: Bearer $LINEAR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "query { viewer { id name email } }"}'

レスポンスから id フィールドを抽出し、LINEAR_USER_ID として保存します。

自分に割り当てられ、昨日以降に更新された課題を取得:

curl -s -X POST https://api.linear.app/graphql \
  -H "Authorization: Bearer $LINEAR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "query($since: DateTime!, $userId: ID!) { issues(first: 50, filter: { assignee: { id: { eq: $userId } } updatedAt: { gte: $since } }) { edges { node { identifier title state { name } url completedAt updatedAt createdAt } } } }",
    "variables": {"since": "YESTERDAY_ISO", "userId": "LINEAR_USER_ID"}
  }'

課題を分類:

  • completedAt が null 以外 → 完了
  • state.name が "In Progress"、"Started"、または "In Review" → 進行中
  • state.name が "Cancelled" → スキップ
  • state.name が "Todo" または "Backlog" → スキップ(作業していないため)

課題が 0 件の場合は、「昨日の Linear のアクティビティは見つかりませんでした。」と記載します。


Step 3: GitHub のコミットを取得

GITHUB_REPO が設定されていない場合は、このステップを何も表示せずにスキップします。

GITHUB_REPO が設定されている場合:

gh api "repos/$GITHUB_REPO/commits?author=${GITHUB_USERNAME:-$(gh api user --jq .login)}&since=YESTERDAY_ISO&per_page=30" \
  --jq '[.[] | {message: .commit.message, url: .html_url}]'

コミットを処理:

  • 各コミットメッセージの 1 行目(最初の改行より前のすべて)を抽出します
  • マージコミットをスキップします。"Merge" で始まるメッセージは除外します
  • メッセージのテキストで重複を除外します

GITHUB_REPO が設定されているものの、コミットが 0 件の場合は、「昨日のコミットは見つかりませんでした。」と記載します。


Step 4: スタンドアップを整形

内容を作成する前に、references/standup-format.md を最後まで読みます。

次の正確な構成でスタンドアップを作成します。

**Done**
- [ENG-123] Title of completed issue
- fix: commit message here

**Doing**
- [ENG-124] Title of in-progress issue

**Blockers**
No blockers.

standup-format.md のルール:

  • 一人称代名詞("I"、"we")は使用しません
  • 完了項目には過去形、進行中項目には現在進行形を使用します
  • 各 Linear 項目は [IDENTIFIER] Title の形式にします
  • 各 GitHub コミットにはコミットメッセージの 1 行目を使用します
  • 完了項目がない場合は、「完了した項目はありません。」と「完了」の下に記載します
  • 進行中項目がない場合は、「進行中の項目はありません。」と「進行中」の下に記載します
  • ブロッカーがない場合は、「ブロッカーはありません。」と記載します
  • 全体を 200 語未満にします

Step 5: Slack に投稿するか、出力する

整形したスタンドアップをユーザーに提示します。

「これを Slack に投稿しますか? それとも出力のみですか?」と尋ねます。

投稿の確認が取れた場合:

curl -s -X POST "$SLACK_WEBHOOK_URL" \
  -H "Content-Type: application/json" \
  -d '{
    "blocks": [
      {
        "type": "section",
        "text": {
          "type": "mrkdwn",
          "text": "*Standup — DATE_HERE*\n\n*Done*\nITEMS\n\n*Doing*\nITEMS\n\n*Blockers*\nITEMS"
        }
      }
    ]
  }'

コミットメッセージや課題タイトルに含まれる特殊文字によるシェルの引用符の問題を避けるため、一時ファイルまたはヒアドキュメントを使って本文を渡します。

cat > /tmp/standup-payload.json << 'ENDJSON'
{
  "blocks": [
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "STANDUP_CONTENT_HERE"
      }
    }
  ]
}
ENDJSON
curl -s -X POST "$SLACK_WEBHOOK_URL" -H "Content-Type: application/json" -d @/tmp/standup-payload.json

投稿後:「スタンドアップを投稿しました。」

「出力のみ」の場合: コピーして貼り付けられるよう、スタンドアップをコードブロックで出力します。

コメント