1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

プルリクエストにラベルを自動付与するAgentic Workflowを作った

1
Last updated at Posted at 2026-04-06

はじめに

自身のパブリックリポジトリのプルリクエストにラベルを自動付与するAgentic Workflowを作りました
release-drafterにて自動でラベルを考慮したリリースノートを作成していたので、常々ラベル付与も自動化したいなーと思っていました。

これまでの課題

自身で作成したプルリクエストや、Bot(Copilot、Github Appなど)が作成したプルリクエストに対して、ラベルを手動で付与していたのですが、以下の大変さを感じていました

  • プルリクエスト1つ1つを見てどのラベルが適切か判断することが大変
  • 自動化しようにも厳密なルール(ブランチやプルリクエストなどの命名規則)を決めて守るのは大変

解決策

ラベル付与の基準を書き、プロンプトとして生成AIに渡すことで、ラベル付与の判断を生成AIに任せました。
また、プルリクエストのコメントにラベルの選択理由をコメントするようなプロンプトも記載しました。

それにより、後でリリースする際に本当に適切か、判断根拠を1から探す手間も減るのではないかと思っています。

以下に動いている様子を示します

{E344A0B8-77E3-4FEF-8D5A-FF8ABA7D4645}.png

{6FD88470-6461-49E9-8DEC-FC7A824595B8}.png

ワークフローの内容

Agentic Workflowの全文は以下の通りです。

フローとしては以下の通りです。

以下にAgentic Workflowの作るにあたって考慮したことを書いていきます。

toolsフィールド

MCPサーバやAgentic Workflowが実行できる処理を記載するフィールドです。
今回はGitHubのラベル付与、コメント記載をするため、githubと関連するツールを記載しています。

※参考

tools.github.min-integrity

min-integrityはmergedとしました。

min-integrityは、GitHub MCP経由でエージェントが参照できるIssue、Pull Request、コメントなどのGitHubコンテンツを、整合性レベルで絞り込むためのパラメタです。
設定したレベルより低い整合性のコンテンツは、Agentic Workflow内のエージェントから見えなくなります。

セキュリティ面でmin-integrityは以下の順で強いです。

merged > approved > unapproved > none

なお、blockedblocked-usersで明示的に拒否したユーザに付与される扱いであり、通常のmin-integrityの設定値ではありません。

パブリックリポジトリのデフォルト値はapprovedであり、信頼されたユーザや信頼されたbotによるコンテンツのみがエージェントから参照できます。

今回は自身だけではなく、Github AppやCopilotもプルリクエストを作成しています。
その場合、未信頼ユーザであるためapprovedではAgentic Workflowが動きません。

※プライベートリポジトリでは、この整合性フィルタはデフォルトでは自動適用されません。

しかし、noneunapprovedまで緩めると、未信頼のユーザが作成したコンテンツもエージェントから参照可能になってしまいます。

そこで、今回はmergedとして、マージ済みのプルリクエストだけをエージェントが参照できるようにしました。
プルリクエストのマージは責任をもって行う判断に至りました。

※参考

トリガー

on:
  pull_request:
    types: [closed]

if: github.event.pull_request.merged == true && github.event.pull_request.user.login != 'dependabot[bot]'

今回はマージされたプルリクエストに対してのみ許可するので、トリガーはプルリクエストがマージされたタイミングとしました。

また、Dependabotのプルリクエストはすでにラベルが付与されているため、if文で除外しています。

排他制御

concurrency:
  group: agentic-workflows
  cancel-in-progress: false

Copilotの実行を一度にしすぎるとエラーとなったことがありました

Sorry, you've hit a rate limit that restricts the number of Copilot model requests you can make within a specific time period. Please try again in 4 hours. Please review our Terms of Service (https://docs.github.com/site-policy/github-terms/github-terms-of-service).

Copilot利用に、具体的な数値は明示されていませんが、レート制限が設けられています。

そのため、実行頻度を緩和するため排他制御を入れました。

release-drafterの修正

release-drafterはAgentic Workflowの実行後に実行されるようトリガーを修正しました。
またうまく実行されなかった時にやり直せるようworkflow_dispatchも追加しました。

おわりに

まだまだプロンプトが最適化されていませんが、ラベル付与を自動化することで楽になったと感じています。
これからも勉強していきます!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?