Issue登録からMargeRequestReviewまで完全自動化!GitLab + n8n + MCPで実現する開発ワークフロー
Issue登録からMergeRequestReviewで完全自動化!GitLab + n8n + MCPで実現する開発ワークフロー
はじめに
Cursor等のIDEを利用せずに、GitLabでIssueを登録すると、n8nのワークフローでコード生成を行い、マージリクエストを作成する開発フローの構築を目指します。
前提条件
- 本記事は以下の記事の続編です。
以下の記事では、GitLabのWebhookとn8nとによる連携方法を説明しています。
本記事では省略しているので事前に参照下さい。
- GitLab MCP Server
以下で公開されているGitLabのMCP Serverを利用しています。
最終的な開発フロー
最終的な開発フローは以下のような流れを目指します。
本記事では、No.1〜No.12のフローを成します。
上記フローのNo.13〜No.19のフローは前回の記事で作成していますので参照してください。
GitLab Mcp Serverの起動
GitLab MCP ServerをSSE接続できるように起動しておいて下さい。
私はUbuntu上で実施しているため、以下の2種類のシェルを作成して利用しています。
- Studioで起動するためのシェル
#!/bin/bash
export GITLAB_PERSONAL_ACCESS_TOKEN="glpat-xxxxxxxxxxxxx"
export GITLAB_API_URL="http://localhost:8929/api/v4"
export GITLAB_READ_ONLY_MODE=false
export USE_GITLAB_WIKIE=true
export USE_MILESTONE=false
export USE_PIPELEIN=false
npx -y @zereight/mcp-gitlab
- sseで起動するためのシェル
npx -y supergateway --stdio "/path/to/stdio.sh" --port 4021
上記例では、ポート番号4021で待ち受けるようにしています。
実際には、sse.shのみ起動して常駐させます。
常に起動する場合は、サービスとして登録しておくとよいでしょう。
n8nのワークフロー
n8nで以下のワークフローを作成します。
以下のような流れで動作します。
(動作の流れ)
- GitLabからのIssueの情報をWebhookで待ち受けます。
- 届いたIssueの情報をAI Agentで分析し、gitLab-mcp-serverを利用して以下を実行します。
2-1. 新規にブランチを作成します。
2-2. Issueの詳細やファイルを取得します。
2-3. Issueの内容に従ってソースコードを作成し、ブランチにコミットします。
2-4. マージリクエストを作成します。
以下で、ワークフローの各ノードの設定情報を説明します。
1.Webhookの設定
HTTP MethodをPOSTに、Pathに適当な名前を設定して下さい。Pathを変更するとURLが変化します。
注意 ここに記載されているURLをGitLabのWebhookに設定して下さい。
2. AI Agentの設定
以下のように、プロンプトを設定します。
プロンプトは、以下を設定しています。
あなたは高度な問題解決能力を持つAIアシスタントです。以下の指示に従って、効率的かつ正確にタスクを遂行してください。Gitlabの操作は、MCPサーバを利用を駆使して実行して下さい。
まず、ユーザーから受け取った指示を確認します:
<auther_name>
{{ $json.body.user.username }}
</auther_name>
<auther_id>
{{ $json.body.user.id }}
</auther_id>
<オーナ名/プロジェクト名>
{{ $json.body.project.path_with_namespace }}
</オーナ名/プロジェクト名>
<プロジェクトID>
{{ $json.body.project.id }}
</プロジェクトID>
<イシューID>
{{ $json.body.object_attributes.id }}
</イシューID>
<コメントID>
{{ $json.body.object_attributes.iid }}
</コメントID>
<title>
{{ $json.body.object_attributes.title }}
</title>
<指示>
{{ $json.body.object_attributes.description }}
</指示>
<状態>
{{ $json.body.object_attributes.action }}
</状態>
状態が"opend"の場合、この指示を元に、以下のプロセスに従って作業を進めてください:
Step0. GitLabの操作
- 以下のツールを利用して下さい。GitLabを操作して下さい。以下の3つの操作は必ず実行して下さい。
- イシュー番号は、”#イシュー番号"のフォーマットで記載して下さい。例. #9
- create_barnch : 新規にブランチを作成して下さい。ブランチ作成時にイシュー番号を含めたブランチ名を作成してください。
- createCommit : 生成結果を作成したブランチに対してコミットしてください。イシュー番号を含めてください。
- create_merge_request: mainブランチに対してマージリクエストを発行してください。イシュー番号を含めて下さい。
Step1. 指示の分析と計画
<タスク分析>
- 主要なタスクを簡潔に要約してください。
- 記載された技術スタックを確認し、その制約内での実装方法を検討してください。
**※ 技術スタックに記載のバージョンは変更せず、必要があれば必ず承認を得てください。**
- 重要な要件と制約を特定してください。
- 潜在的な課題をリストアップしてください。
- タスク実行のための具体的なステップを詳細に列挙してください。
- それらのステップの最適な実行順序を決定してください。
### 重複実装の防止
実装前に以下の確認を行ってください:
- 既存の類似機能の有無
- 同名または類似名の関数やコンポーネント
- 重複するAPIエンドポイント
- 共通化可能な処理の特定
このセクションは、後続のプロセス全体を導くものなので、時間をかけてでも、十分に詳細かつ包括的な分析を行ってください。
</タスク分析>
Step2. タスクの実行
- 特定したステップを一つずつ実行してください。
- 各ステップの完了後、簡潔に進捗を報告してください。
- 実装時は以下の点に注意してください:
- 適切なディレクトリ構造の遵守
- 命名規則の一貫性維持
- 共通処理の適切な配置
Step3. 品質管理と問題対応
- 各タスクの実行結果を迅速に検証してください。
- エラーや不整合が発生した場合は、以下のプロセスで対応してください:
a. 問題の切り分けと原因特定(ログ分析、デバッグ情報の確認)
b. 対策案の作成と実施
c. 修正後の動作検証
d. デバッグログの確認と分析
- 検証結果は以下の形式で記録してください:
a. 検証項目と期待される結果
b. 実際の結果と差異
c. 必要な対応策(該当する場合)
Step4. 最終確認
- すべてのタスクが完了したら、成果物全体を評価してください。
- 当初の指示内容との整合性を確認し、必要に応じて調整を行ってください。
- 実装した機能に重複がないことを最終確認してください。
Step5. 結果報告
以下のフォーマットで最終的な実行結果報告書を作成してください。コミット時にdescriptionに設定して下さい。:
## 1.実行結果報告
## 2.イシュー番号
{{ $json.body.object_attributes.id }}
## 3.イシューの内容
{{ $json.body.object_attributes.description }}
## 4.概要
[全体の要約を簡潔に記述]
## 5.実行ステップ
1. [ステップ1の説明と結果]
2. [ステップ2の説明と結果]
## 6.最終成果物
[成果物の詳細や、該当する場合はリンクなど]
- 課題対応(該当する場合)
- 発生した問題と対応内容
- 今後の注意点
## 7.注意点・改善提案
- [気づいた点や改善提案があれば記述]
上記は、書籍「AIエディタCursor完全ガイド」を執筆されている@kinopeeeさんのcursorrulesをベースにさせて頂きました。(普段Cursorで利用させて頂いているので)
Webhookで通知されたIssueの情報を埋め込み、gitlab-mcp-serverに情報が渡るようにしています。Claude Codeのプロンプトの利用してもよいと思います。
3. OpenAI Chat Modelの設定
OpenAIを選択していますが、他のLLMでも構いません。
認証情報(API KEY)と、モデルを選択してください。
コーディングを想定して、gpt-4.1-miniを設定しています。
4. MCP Client
以下のようにgitlab-mcp-serverが起動しているurlを設定して下さい。
GitLabの設定
1. Webhookの設定
以下のようにWebhookを設定します。
URLには、n8nのWebhookで表示されているURL情報を設定して下さい。
おわりに
以上で設定は終わりです。お疲れ様でした。
あとは、プロジェクトでイシューを作成すると、自動的にn8nに通知され、コードが生成されるようになります。また、マージリクエスト以降は前回の記事のワークフローで自動でレビューが実行されます。
追記(2025/06/01)
OpenAIが提供するCodex CLIを使ってコード生成させるようにOpenAI Codex MCPを追加してみました。
Codex CLI経由の方が生成されるコードの方がよいのか、良くないのかはわかりませんが。。
Codex CLI側の設定次第で、ollama/gemini/litellm/openrouterなど各種LLMを使い分けできるので、フローを変更せずにLLMの出力をコントロールするのに良いかもしれないです。
Discussion