リリースノートジェネレーター
中級
これはDevOps, AI Summarization分野の自動化ワークフローで、10個のノードを含みます。主にCode, Jira, Merge, EmailSend, GithubTriggerなどのノードを使用。 GitHub、JIRA、Google Geminiを使って専門のなリリースノートを生成し、メールで送信
前提条件
- •GitHub Personal Access Token
- •Google Gemini API Key
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
"id": "Your_ID",
"meta": {
"instanceId": "Your_ID",
"templateCredsSetupCompleted": true
},
"name": "Release-note-generator",
"tags": [],
"nodes": [
{
"id": "Your_ID",
"name": "Github Trigger",
"type": "n8n-nodes-base.githubTrigger",
"position": [
-440,
-80
],
"webhookId": "Your_ID",
"parameters": {
"owner": {
"__rl": true,
"mode": "name"
},
"events": [
"push"
],
"options": {
"insecureSSL": false
},
"repository": {
"__rl": true,
"mode": "list",
"cachedResultUrl": "Your_Github_URL",
"cachedResultName": "Your_Repository_Name"
}
},
"credentials": {
"githubApi": {
"id": "Your_ID",
"name": "GitHub account"
}
},
"notesInFlow": false,
"typeVersion": 1
},
{
"id": "Your_ID",
"name": "コード",
"type": "n8n-nodes-base.code",
"position": [
-220,
-80
],
"parameters": {
"jsCode": "const inputData = $input.all();\nconst commits = inputData[0].json.body.commits;\n\nreturn commits.map(commit => {\n const message = commit.message;\n const timestamp = commit.timestamp;\n\n // Match something like \"ABC-123\", case-insensitive, from the beginning\n const match = message.match(/([A-Z]+-\\d+)/i);\n\n const jiraId = match ? match[0].toUpperCase() : null;\n\n return {\n json: {\n message,\n timestamp,\n jira_id: jiraId\n }\n };\n});\n"
},
"typeVersion": 2
},
{
"id": "Your_ID",
"name": "Basic LLM チェーン",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
480,
-160
],
"parameters": {
"text": "=",
"batching": {},
"messages": {
"messageValues": [
{
"type": "HumanMessagePromptTemplate",
"message": "=You are a professional technical release manager generating production release notes for CxOs and clients.\n\nGenerate a complete release note in **HTML format**, not plain text. The content is based on the following JIRA items, each having `jira_id`, `jira_summary`, `jira_description`, and `message`.\n\nOutput structure (as HTML):\n\n1. Title and Metadata\n - H2 tag: \"Production Deployment – [Release Date]\"\n - Bold lines: Version, Environment, Deployment Date\n\n2. Overview\n - Short paragraph explaining the goal of this deployment\n\n3. Key Changes\n - Bullet list (<ul>) with one <li> per JIRA item\n - For each bullet: Summarize `jira_description` + `message` into a business-friendly sentence\n\nRules:\n- Output as clean HTML only\n- Do not wrap in a JSON object or Markdown\n- Use simple inline styles for readability\n\nHere is the input data:\n{{ JSON.stringify($json.items, null, 2) }}\n"
}
]
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.7
},
{
"id": "Your_ID",
"name": "Google Gemini チャットモデル",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
480,
40
],
"parameters": {
"options": {},
"modelName": "models/gemini-2.5-pro"
},
"credentials": {
"googlePalmApi": {
"id": "Your_ID",
"name": "Google Gemini(PaLM) Api account"
}
},
"typeVersion": 1
},
{
"id": "Your_ID",
"name": "Send email",
"type": "n8n-nodes-base.emailSend",
"position": [
860,
-160
],
"webhookId": "Your_ID",
"parameters": {
"html": "={{ $json.output.releasenote }}",
"options": {},
"subject": "Your_company_name | Location, Country \nYou’re receiving this email because you are subscribed to release notifications.",
"toEmail": "Your_receiver_email",
"fromEmail": "Your_sender_email"
},
"credentials": {
"smtp": {
"id": "Your_ID",
"name": "SMTP account"
}
},
"typeVersion": 2.1,
"alwaysOutputData": false
},
{
"id": "Your_ID",
"name": "Get an issue",
"type": "n8n-nodes-base.jira",
"position": [
-20,
-320
],
"parameters": {
"issueKey": "={{ $json.jira_id }}",
"operation": "get",
"additionalFields": {}
},
"credentials": {
"jiraSoftwareCloudApi": {
"id": "Your_ID",
"name": "Jira SW Cloud account"
}
},
"typeVersion": 1
},
{
"id": "Your_ID",
"name": "コード2",
"type": "n8n-nodes-base.code",
"position": [
140,
-320
],
"parameters": {
"jsCode": "// Get all incoming items from the JIRA node.\nconst allItems = $input.all();\n\n// Use .map() to loop through each item and transform it.\nreturn allItems.map(item => {\n // The full JIRA issue data for the current item in the loop\n const issue = item.json;\n\n // Extract the specific fields you need for this issue.\n // Use optional chaining (?.) to prevent errors if a field is missing.\n const jiraId = issue.key; // The JIRA ID (e.g., \"MS-6\")\n const summary = issue.fields?.summary;\n const description = issue.fields?.description;\n\n // Return a new, clean object for this specific issue.\n return {\n json: {\n jira_id: jiraId, // Added as requested\n jira_summary: summary,\n jira_description: description\n }\n };\n});"
},
"typeVersion": 2
},
{
"id": "Your_ID",
"name": "マージ",
"type": "n8n-nodes-base.merge",
"position": [
60,
20
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3.2
},
{
"id": "Your_ID",
"name": "コード3",
"type": "n8n-nodes-base.code",
"position": [
260,
20
],
"parameters": {
"jsCode": "// This will take all input items from previous loop and combine into one array\nreturn [{\n json: {\n items: items.map(i => i.json)\n }\n}];\n"
},
"typeVersion": 2
},
{
"id": "Your_ID",
"name": "構造化出力パーサー1",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
640,
40
],
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n\t\"type\": \"object\",\n\t\"properties\": {\n\t\t\"releasenote\": {\n\t\t\t\"type\": \"string\"\n\t\t}\n\t}\n}"
},
"typeVersion": 1.3
}
],
"active": false,
"pinData": {},
"settings": {
"callerPolicy": "workflowsFromSameOwner",
"errorWorkflow": "Your_ID",
"executionOrder": "v1",
"saveManualExecutions": true,
"saveExecutionProgress": true,
"timeSavedPerExecution": 1,
"saveDataErrorExecution": "all",
"saveDataSuccessExecution": "all"
},
"versionId": "Your_ID",
"connections": {
"Code": {
"main": [
[
{
"node": "Your_ID",
"type": "main",
"index": 0
},
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Code2": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Code3": {
"main": [
[
{
"node": "Basic LLM Chain",
"type": "main",
"index": 0
}
]
]
},
"Merge": {
"main": [
[
{
"node": "Code3",
"type": "main",
"index": 0
}
]
]
},
"Your_ID": {
"main": [
[
{
"node": "Code",
"type": "main",
"index": 0
}
]
]
},
"Basic LLM Chain": {
"main": [
[
{
"node": "Your_ID",
"type": "main",
"index": 0
}
]
]
},
"Google Gemini Chat Model": {
"ai_languageModel": [
[
{
"node": "Basic LLM Chain",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Structured Output Parser1": {
"ai_outputParser": [
[
{
"node": "Basic LLM Chain",
"type": "ai_outputParser",
"index": 0
}
]
]
}
}
}よくある質問
このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
中級 - DevOps, AI要約
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
リアルタイム - GeminiとCreatomateを使ってウイルスのAI動画制作と投稿を自動化
AI動画制作とマルチプラットフォーム公開にはGeminiとCreatomateを活用しましょう
Set
Code
Wait
+
Set
Code
Wait
47 ノードIntuz
コンテンツ作成
Apify、Apollo.io、Google Geminiを使ったLinkedIn求人情報のAI駆動リード生成の自動化
LinkedIn求人検索からの自動化リード生成:Apify、Apollo.io、Google Gemini
If
Code
Limit
+
If
Code
Limit
47 ノードIntuz
リード獲得
サイバーセキュリティインテリジェンス:Gemini AIを使って毎日のサマリーとトレンド生成
サイバーセキュリティ インテリジェンス:Gemini AI を活用して日次サマリーとウイルスの話題を作成
Set
Code
Merge
+
Set
Code
Merge
39 ノードTom
AI要約
LinkedIn求人ボランティア、Apify、Apollo.io、そしてGoogle Geminiを使用したセールス拡張の自動化
LinkedInの求人シグナルを使い、ApifyとGoogle Geminiでパーソナライズされたセールス拡大を作成
If
Code
Limit
+
If
Code
Limit
47 ノードIntuz
ワークフロー19
Gitコミットコマンドを使ったGitHub PRとJIRAの更新を自動化
If
Code
Jira
+
If
Code
Jira
21 ノードIntuz
DevOps
01 AIメディアバイヤーでFacebook広告のパフォーマンスを分析し、インサイトをGoogle Sheetsへ送信
Gemini AIを使用してFacebook広告を分析し、インサイトをGoogle Sheetsに送信
If
Set
Code
+
If
Set
Code
34 ノードJJ Tham
市場調査
ワークフロー情報
難易度
中級
ノード数10
カテゴリー2
ノードタイプ8
作成者
Intuz
@intuzA boutique tech consulting company, helping businesses with custom AI/ML, Workflow Automations, and software development.
外部リンク
n8n.ioで表示 →
このワークフローを共有