AIを使った開発手法 Vol.3:チケット起票からPR作成まで完全自動化
Jira・Linear・Asanaなどのプロジェクト管理ツールからn8n、Claude Code GitHub Actionsを連携させ、チケット作成からコード実装までを自動化する方法を解説します。

はじめに
Vol.1ではn8nによるワークフロー自動化、Vol.2ではClaude CodeによるGitHub Issueからのコード生成を紹介しました。
本記事では、これらを組み合わせた究極の開発自動化パイプラインを構築します。プロジェクト管理ツールでチケットを作成するだけで、AIが自動的にコードを書いてPull Requestを作成する仕組みです。
自動化パイプラインの全体像
┌─────────────┐ Webhook ┌─────────┐ GitHub API ┌─────────────┐
│ Jira │ ──────────────▶ │ n8n │ ─────────────────▶ │ GitHub │
│ Linear │ │ │ │ Issue │
│ Asana │ │ 変換・ │ │ @claude │
│ Notion │ │ 加工 │ │ │
└─────────────┘ └─────────┘ └──────┬──────┘
│
┌────────────────────────────────┘
▼
┌─────────────┐
│ Claude Code │
│ GitHub │
│ Actions │
└──────┬──────┘
│
▼
┌─────────────┐ 通知 ┌─────────────┐
│ Pull │ ────────────▶ │ Slack │
│ Request │ │ Teams │
└─────────────┘ └─────────────┘
自動化される作業
- チケット作成 → Jira/Linear/Asanaでタスクを登録
- Issue作成 → n8nがGitHub Issueを自動作成
- コード生成 → Claude Codeが実装してPR作成
- 通知 → Slackで担当者にレビュー依頼
従来30分〜数時間かかっていた作業が、チケット作成から数分で完了します。
対応プロジェクト管理ツール
主要なプロジェクト管理ツールはすべてWebhook機能を提供しています。
| ツール | Webhook | 特徴 |
|---|---|---|
| Jira | ✅ | エンタープライズ向け、細かい設定可能 |
| Linear | ✅ | モダンUI、開発者向け |
| Asana | ✅ | チーム全体のタスク管理に強い |
| Notion | ✅ | ドキュメントとタスクを統合 |
| Trello | ✅ | カンバン形式、シンプル |
| ClickUp | ✅ | 多機能、カスタマイズ性高い |
| GitHub Projects | ✅ | GitHubネイティブ |
実装手順
ステップ1:n8nワークフローの作成
n8nで以下のワークフローを構築します。
1-1. Webhookトリガーの設定
{
"nodes": [
{
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"parameters": {
"httpMethod": "POST",
"path": "jira-to-github",
"responseMode": "onReceived"
}
}
]
}
Webhookを作成すると、以下のようなURLが発行されます:
https://your-n8n-instance.com/webhook/jira-to-github
1-2. データ変換ノード
Jiraのデータ構造をGitHub Issue用に変換します:
// Function ノードでの変換処理
const jiraData = $input.first().json;
// Jiraのフィールドを抽出
const summary = jiraData.issue.fields.summary;
const description = jiraData.issue.fields.description;
const issueType = jiraData.issue.fields.issuetype.name;
const priority = jiraData.issue.fields.priority.name;
const jiraKey = jiraData.issue.key;
const jiraUrl = `https://your-domain.atlassian.net/browse/${jiraKey}`;
// GitHub Issue用のタイトルと本文を生成
const title = `[${jiraKey}] ${summary}`;
const body = `
## 概要
${description || '説明なし'}
## Jiraチケット
- **チケット**: [${jiraKey}](${jiraUrl})
- **タイプ**: ${issueType}
- **優先度**: ${priority}
---
@claude 上記の要件に基づいて実装してください。
### 実装時の注意点
- 既存のコーディング規約に従う
- 適切なエラーハンドリングを追加
- 必要に応じてテストも作成
`;
return {
title,
body,
labels: [issueType.toLowerCase(), `priority-${priority.toLowerCase()}`]
};
1-3. GitHub Issue作成ノード
n8nのGitHub連携ノードを使用:
{
"name": "Create GitHub Issue",
"type": "n8n-nodes-base.github",
"parameters": {
"operation": "create",
"resource": "issue",
"owner": "your-org",
"repository": "your-repo",
"title": "={{ $json.title }}",
"body": "={{ $json.body }}",
"labels": "={{ $json.labels }}"
}
}
ステップ2:プロジェクト管理ツール側の設定
Jiraの場合
- プロジェクト設定 → 自動化 を開く
- 新しいルールを作成
- トリガー:「課題が作成されたとき」
- 条件:必要に応じてフィルタ(例:ラベルが「auto-implement」)
- アクション:「Webリクエストを送信」
- URLにn8nのWebhook URLを設定
Linearの場合
- Settings → API → Webhooks
- 「New Webhook」をクリック
- URLにn8nのWebhook URLを入力
- イベント:「Issues」を選択
- 必要に応じてチーム・プロジェクトでフィルタ
Asanaの場合
- プロジェクト → カスタマイズ → アプリを追加
- Webhookアプリを選択(または外部連携ツールを使用)
- n8nのWebhook URLを設定
ステップ3:Claude Code GitHub Actionsの設定
Vol.2で解説した設定に加え、自動化パイプライン用の調整を行います。
.github/workflows/claude-auto.yml:
name: Claude Auto Implementation
on:
issues:
types: [opened, labeled]
jobs:
auto-implement:
# 特定のラベルがついた場合のみ実行
if: contains(github.event.issue.labels.*.name, 'auto-implement')
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
issues: write
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Run Claude Code
uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
- name: Notify Slack on PR Created
if: success()
uses: slackapi/slack-github-action@v1
with:
channel-id: 'dev-notifications'
slack-message: '🤖 Claude Code が PR を作成しました: ${{ github.event.issue.title }}'
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
ステップ4:通知フローの設定
n8nで完了通知のワークフローも作成します。
[GitHub Webhook] → [PR Created検知] → [Slack通知]
→ [Jiraステータス更新]
高度な活用パターン
パターン1:優先度に応じた自動振り分け
// n8n Function ノード
const priority = $input.first().json.issue.fields.priority.name;
let implementation_level = '';
let additional_instructions = '';
switch(priority) {
case 'Highest':
case 'High':
implementation_level = 'full';
additional_instructions = `
### 優先度が高いタスクです
- 完全な実装を行ってください
- エラーハンドリングを徹底
- ユニットテストも作成
- ドキュメントも更新`;
break;
case 'Medium':
implementation_level = 'standard';
additional_instructions = `
### 標準的な実装でOK
- 基本的な実装を行ってください
- 主要なエッジケースをカバー`;
break;
case 'Low':
implementation_level = 'minimal';
additional_instructions = `
### 最小限の実装でOK
- コア機能のみ実装
- 追加機能は後続タスクで対応`;
break;
}
return {
...$input.first().json,
implementation_level,
additional_instructions
};
パターン2:チケットタイプ別の処理分岐
// Issue タイプに応じて異なる指示を生成
const issueType = $input.first().json.issue.fields.issuetype.name;
let claude_instructions = '';
switch(issueType) {
case 'Bug':
claude_instructions = `
@claude このバグを修正してください。
### 修正手順
1. まず原因を特定してコメントで報告
2. 修正案を提示
3. 修正を実装
4. リグレッションテストを追加`;
break;
case 'Story':
case 'Task':
claude_instructions = `
@claude この機能を実装してください。
### 実装ガイドライン
- 既存のアーキテクチャに従う
- 必要に応じて設計の相談をコメントで
- 実装完了後にテストを追加`;
break;
case 'Spike':
claude_instructions = `
@claude 技術調査を行い、結果をまとめてください。
### 調査内容
- 実現可能性の評価
- 推奨アプローチの提案
- 概算工数の見積もり
- リスクの洗い出し
※ コードの実装は不要です。調査結果をIssueにコメントしてください。`;
break;
}
return { claude_instructions };
パターン3:複数リポジトリへの振り分け
// コンポーネントラベルに基づいてリポジトリを決定
const components = $input.first().json.issue.fields.components || [];
const componentNames = components.map(c => c.name);
let targetRepo = 'main-app'; // デフォルト
if (componentNames.includes('API')) {
targetRepo = 'backend-api';
} else if (componentNames.includes('Frontend')) {
targetRepo = 'frontend-app';
} else if (componentNames.includes('Mobile')) {
targetRepo = 'mobile-app';
} else if (componentNames.includes('Infrastructure')) {
targetRepo = 'infra-config';
}
return {
...$input.first().json,
targetRepo
};
実際の運用事例
事例1:スタートアップでの活用
背景: エンジニア3名の小規模チーム。開発タスクに追われてチケット対応が遅延。
導入後:
- 簡単なバグ修正は自動でPRが作成される
- エンジニアはレビューと複雑な実装に集中
- 週あたり15時間の工数削減
事例2:エンタープライズでの活用
背景: 100名以上の開発組織。Jiraで厳密なワークフロー管理。
導入後:
- 定型的な修正タスクを自動化
- コーディング規約の自動適用でコード品質が安定
- 新人エンジニアの学習材料としても活用
事例3:オープンソースプロジェクト
背景: 外部コントリビューターからのIssueが多数。
導入後:
- 「good first issue」ラベルの付いたIssueを自動実装
- コントリビューターはレビューから参加可能
- メンテナーの負担が大幅軽減
セキュリティ考慮事項
アクセス制御
# 特定のラベルがある場合のみ実行
if: |
contains(github.event.issue.labels.*.name, 'auto-implement') &&
github.event.issue.author_association == 'MEMBER'
機密情報の保護
.envファイルは絶対に自動生成させない- シークレット関連のコードは手動レビュー必須
- 本番環境への直接デプロイは禁止
監査ログ
n8nで全てのWebhookリクエストをログに記録:
// 監査ログをデータベースに保存
const auditLog = {
timestamp: new Date().toISOString(),
source: 'jira',
action: 'issue_created',
issueKey: $input.first().json.issue.key,
targetRepo: 'your-repo',
status: 'processed'
};
return auditLog;
トラブルシューティング
よくある問題と解決策
| 問題 | 原因 | 解決策 |
|---|---|---|
| Webhookが届かない | ファイアウォール | n8nをクラウドにデプロイ |
| Issue作成失敗 | GitHub トークン権限不足 | repo権限を追加 |
| Claude が動かない | ラベル条件不一致 | ワークフロー条件を確認 |
| 通知が来ない | Slack Bot権限 | chat:write 権限を追加 |
まとめ
プロジェクト管理ツール × n8n × Claude Code の連携により、以下の自動化が実現できます:
| フェーズ | 従来 | 自動化後 |
|---|---|---|
| チケット作成 | 手動 | 手動(ここだけ!) |
| Issue作成 | 手動 | 自動 |
| コード実装 | 手動 | 自動 |
| PR作成 | 手動 | 自動 |
| 通知 | 手動 | 自動 |
| レビュー | 手動 | 手動 |
人間が行うのは「何を作るか決める」と「レビュー」だけ。
導入ステップ
- Week 1: n8nのセットアップとWebhook連携
- Week 2: Claude Code GitHub Actionsの設定
- Week 3: 通知フローの構築
- Week 4: 本番運用開始、チューニング
次回の「AIを使った開発手法 Vol.4」では、AIコードレビューの自動化について解説予定です。
この自動化パイプラインの導入支援も承っております。お気軽にお問い合わせください。