チーム開発で使えるワークフローをCursor×MCPで作ってみよう!
✅ まず最初に
こちらをぜひ読んでください。
上記記事で、”これから、さらに自動化したいなと思う事” の章で書いたことを実現しました!
👀 何を解決したかった?
FastDOCTORではPRレビューが通ると
-
QAエンジニアにテストを依頼
-
確認できたらマージする
という流れです。
そのフローでこなすうち、以下のモヤっとが...
以下のアプリを行き来したくない!🫠🫠
- Cursor(実装中なので)
- Slack(メッセージで通知したい)
- GitHub(実装詳細、レビューの観点とか共有したい)
- Jira(仕様の概要共有したい)
- Heroku(テスト環境のURLを共有したい)
そうです、私は天性のめんどいマンです🤡
というかGitHubで詳細に説明文書いたんよなぁ!
あ、でもQAさんにわざわざGitHubアクセスしてもらうのもなぁ...
.
.
.
じゃあ全部MCPとかで情報ぶっこ抜いたら
いい感じに整えてSlack投稿させればええのでは??
とりあえず百聞は一見にしかずという事で、試しにやってみました🤞
流れとして
- 事前設定は何が必要か?
- どんなプロンプトを作った?
- 結果どんな感じに依頼できるようになった?
という構成になっているので、
「ある程度MCPわかる方🙋♂️」はかいつまんで飛ばし読みしてもOKです。
今回作ったプロンプトも載せておいたので、必要に応じて
自分たちのチームの状況に合わせて手直ししてください🙏
💻 MCPの準備
GitHub
前の記事で記載したので割愛。
Jira
トークン発行画面へアクセス
スコープなしAPIトークンを作成
- スコープありだと動かない人がいたので。もしかしたら適切に権限絞ればいけるのかも。
mcp.json
{
"mcpServers": {
(...githubとか他の設定、中略),
"mcp-atlassian": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"JIRA_URL",
"-e",
"JIRA_USERNAME",
"-e",
"JIRA_API_TOKEN",
"ghcr.io/sooperset/mcp-atlassian:latest"
],
"env": {
"JIRA_URL": "https://{プロジェクトのID}.atlassian.net/",
"JIRA_USERNAME": "JIRAアカウントのメールアドレス",
"JIRA_API_TOKEN": "先ほど取得したAPIトークン"
}
},
}
Slack
以下を参考にすればいけました。
Heroku
公式には書かれているのですが、何度やってもうまく認識されず
いけたと思ったら、実行する度に突然cursorのCPUが暴走し出したので断念😇
代わりにHerokuの公式APIを使って、レビュー中のアプリを取得することにします。
とりあえず、ここをもとに、Authorizetionsのトークンだけ発行
- Heroku Cliの導入
https://devcenter.heroku.com/ja/articles/heroku-cli - トークン発行コマンド
https://www.heroku.com/blog/introducing-official-heroku-mcp-server/
heroku authorizations:create
発行したトークンは、プロジェクトフォルダの.env
にHEROKU_API_KEYとして設定しておきましょう。
これで実装してて、何がなんでもMPCに固執する必要もないかもな😇
と思いましたが、これはまた別記事でつらつらと書こうかと思います。
📝 Cursorに作成するルール(ここが結論)
次回作成予定の、PR作成プロンプトをベースにしているので、
それとセットの前提に作っています。
ぜひ僕をFavoriteに入れて次回記事を見逃さないことをおすすめします。
一旦、今のチームで使ってみてうまく動いた.cursor/rulesのmdcを共有します。
使ってみたい方はコピペして、【】の中身とか差し替える必要があるとこを
自分たちのものに適宜合わせて設定してください。
QA依頼 Slack投稿ワークフロー
🎯 実行トリガー
このガイドラインが参照された時点で、即座にPR作成ワークフローを自動開始してください。
📝 コミュニケーション方針
- 余計な説明は不要: 追加の説明や解説は行わず、必要最小限のやり取りのみ実施
- フォーマット厳守: 定義されたメッセージフォーマットから逸脱しない
- 文言変更禁止: ルールに記載された質問文や文言を一切変更せず、記載通りに使用する
- 装飾追加禁止: 絵文字や箇条書き等の装飾を勝手に追加しない
📋 プロジェクト設定値
{
"github": { "owner": "【GitHub Organization】", "repo": "【GitHub Repository】" },
"slack": { "channelId": "【Slack Channel ID】", "qaUserId": "【QA User ID】" },
"heroku": { "pipelineId": "【Heroku Pipeline ID】" }
}
🚨 必須実行順序
STEP 1: 事前設定確認(最重要・失敗時は処理停止)
# .envrc確認とHeroku API疎通確認
source .envrc && curl -n <https://api.heroku.com/account> \\
-H "Authorization: Bearer $HEROKU_API_KEY" \\
-H "Accept: application/vnd.heroku+json; version=3"
# Slack設定確認
slack_get_channel_history("【Slack Channel ID】", 1)
❌ 失敗時: 設定手順を表示して処理停止
STEP 2: ユーザー入力確認
- 質問: 「QA依頼を作成する対象のPR URLを教えてください」
-
形式:
https://github.com/【GitHub Organization】/【GitHub Repository】/pull/[番号]
STEP 3: 情報収集
-
GitHub PR詳細取得:
mcp_github_get_pull_request
- JiraチケットURL自動抽出: PR description の「開発チケットURL(Jira)」セクションから抽出
-
Jiraチケット詳細取得:
mcp_mcp-atlassian_jira_search
- Heroku Review App URL取得: パイプラインAPIでブランチ名からアプリ特定
STEP 4: フォーマット作成・確認
- 実装内容とレビュー観点を箇条書きで整理
- 必須: 実際の投稿内容(メインメッセージ・スレッド返信)を以下のフォーマットで表示
## 投稿予定内容
### メインメッセージ(コードブロック形式)
QA依頼: [PRタイトル]
### スレッド返信(通常テキスト形式)
<@【QA User ID】>さんよろしくお願いします!
対象PR
<[PR URL]|[PRタイトル]>
対象チケット
[JiraチケットURL]
環境:
[Heroku Review App URL]
実装・変更点:
• [実装内容]
レビュー観点:
• [レビュー観点]
この内容で投稿を実行してよろしいですか?
- ユーザーの承認を得てから次のSTEPに進む
STEP 5: Slack投稿(フォーマット厳守)
メインメッセージ(必ずコードブロック形式):
await slack_post_message({
channel_id: "【Slack Channel ID】",
text: "```\\nQA依頼: " + prTitle + "\\n```"
});
スレッド返信(通常テキスト形式):
const detailMessage = `<@【QA User ID】>さんよろしくお願いします!
*対象PR*
<${prUrl}|${prTitle}>
*対象チケット*
${jiraTicketUrl}
*環境:*
${herokuReviewAppUrl}
*実装・変更点:*
• ${implementationSummary}
*レビュー観点:*
• ${reviewPoints}`;
await slack_reply_to_thread({
channel_id: "【Slack Channel ID】",
thread_ts: mainMessageTs,
text: detailMessage
});
STEP 6: トレーサビリティ確立
-
Slackメッセージリンク生成:
https://【Slack Workspace URL】/archives/【Slack Channel ID】/p{タイムスタンプ}
- Jiraコメント追加: SlackメッセージURLをJiraチケットにコメント
- Jiraステータス変更: 「レビュー完了」ステータスに変更
📝 フォーマット仕様
🚨 重要:Slackフォーマット違い防止
-
メインメッセージ: 必ず
コードブロック
形式 -
スレッド返信: 通常テキスト(太文字:
text*
, 箇条書き:item
)
Heroku API実装
# Review App URL取得
source .envrc && curl -n <https://api.heroku.com/pipelines/【Heroku> Pipeline ID】/review-apps \\
-H "Authorization: Bearer $HEROKU_API_KEY" \\
-H "Accept: application/vnd.heroku+json; version=3"
⚠️ エラーハンドリング
設定確認失敗時(処理停止)
-
.envrc
ファイル未存在 → 作成手順表示 -
HEROKU_API_KEY
未設定 → 設定手順表示 - Heroku API疎通失敗 → 権限確認手順表示
- Slack設定失敗 → MCP設定確認手順表示
通常エラー
- PR/Jiraチケット未発見 → URL確認要求
- Review App未発見 → ブランチ名とチケットID照合確認
- Slack投稿失敗 → 権限確認
✅ 完了確認項目
- 事前設定確認完了
- GitHub PR情報取得完了
- JiraチケットURL自動抽出完了
- Heroku環境URL取得完了
- Slack投稿完了(正しいフォーマット)
- QA担当者メンション完了
- SlackメッセージリンクをJiraコメント追加完了
- Jiraステータス「レビュー完了」変更完了
- トレーサビリティ確立完了
🎉 全項目完了時: 「QA依頼ワークフローが正常に完了し、QAエンジニアに通知が完了しました。」を表示
今のチームでは
- JiraのチケットIDをブランチ名にする
- githubのdescriptionなどもcursor経由で書かせている
という運用にしているためHerokuのレスポンスの特定も容易でした。
また、Slackのチャンネル確認を先にしてる理由として、
現状だとSlackの MCPの読み込みが一番不安定なのもあり、
最初につながることを確認してから他のMCPを呼ぶようにするためです。
後半で急に指示が止まると涙が止まらないので😭
どうやって使うの?
ちなみにこの処理を実行するには、以下のように
作ったmdcファイルを参照し、右下の実行ボタンを押すだけ。
そうすると、API_KEYの設定と、Slackの設定を確認して
ワークフローを開始してくれます。
あとはGItHubのPRのURLを回答するだけであら不思議。
フォーマットまで作ってくれます😜
フォーマットの内容に不備や問題がないか確認してから投稿するルールにしているので、
意図せず依頼を投げるという事故を防げるように工夫しました💡
もし観点とか追加したいことがあればこのタイミングで指示出しできると
使い勝手いいかなと思ってこうしてみました。
問題なければ「OK」と送れば、そのまま投稿してくれます!👍
❓ 結果
いけました!(実際のチケットの内容部分はぼかしています。)
🙌自動化推進、もっと進めたい
- MCPもっと活用したいぞ!
- 俺もめんどいの嫌いマン🤡
- AIともうすこし仲良くなりたいよね。うん😇
という方がいたらぜひ知見共有しあいたいですね。
気になる方はこちらもよければ。
Discussion