スキルマトリックスエクスパンダ

上級

これはMiscellaneous, AI Summarization, Multimodal AI分野の自動化ワークフローで、17個のノードを含みます。主にCode, GoogleDrive, GoogleSheets, ManualTrigger, Agentなどのノードを使用。 GoogleドライブとGPT-4oを使用してスキルマトリックスをGoogleスプレッドシートに抽出

前提条件
  • Google Drive API認証情報
  • Google Sheets API認証情報
  • OpenAI API Key
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
  "id": "I2RxYTHy30vIWRmh",
  "meta": {
    "instanceId": "8443f10082278c46aa5cf3acf8ff0f70061a2c58bce76efac814b16290845177",
    "templateCredsSetupCompleted": true
  },
  "name": "Skill matrix extractor",
  "tags": [],
  "nodes": [
    {
      "id": "7119286f-4f1b-41ac-9aa0-8e0ba5e9a2be",
      "name": "ワークフロー実行時",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        0,
        0
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "be3bdafb-8250-4580-809b-84df5a18587e",
      "name": "Azure OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
      "position": [
        992,
        224
      ],
      "parameters": {
        "model": "gpt-4o-mini",
        "options": {}
      },
      "credentials": {
        "azureOpenAiApi": {
          "id": "C3WzT18XqF8OdVM6",
          "name": "Azure Open AI account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "539bdc67-0f64-409c-afbb-83bcef1d164c",
      "name": "履歴書検索",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        224,
        0
      ],
      "parameters": {
        "filter": {
          "folderId": {
            "__rl": true,
            "mode": "list",
            "value": "1MIvpHU_ZqG76Vov2-D5WlS5dD3UhOMSz",
            "cachedResultUrl": "https://drive.google.com/drive/folders/1MIvpHU_ZqG76Vov2-D5WlS5dD3UhOMSz",
            "cachedResultName": "Resume_store"
          }
        },
        "options": {},
        "resource": "fileFolder",
        "returnAll": true
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "gQtjXVGUgZru29qC",
          "name": "Google Drive account"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "550324ac-717b-4749-b885-e78777a107f6",
      "name": "履歴書ダウンロード",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        448,
        0
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "options": {},
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "gQtjXVGUgZru29qC",
          "name": "Google Drive account"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "4c59808e-dd0d-4957-9738-b813cb2d3e70",
      "name": "ファイルから内容抽出",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        672,
        0
      ],
      "parameters": {
        "options": {},
        "operation": "pdf"
      },
      "typeVersion": 1
    },
    {
      "id": "fdece73f-e3a0-4678-bd79-733f91ac38f3",
      "name": "スキル分析",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        896,
        0
      ],
      "parameters": {
        "text": "=Analyze the following resume and extract the skills into the required JSON format.\n\nResume:\n{{ $json.text }}",
        "options": {
          "systemMessage": "You are an AI assistant that analyzes resumes and extracts a structured skills matrix.  \n\nRules:\n- Only include skills relevant to this predefined tech stack: [React, Node.js, Angular, Python, Java, SQL, Docker, Kubernetes, AWS, Azure, GCP, HTML, CSS, JavaScript].  \n- For each skill, return:\n  - name (string)\n  - level (1–5, where 1 = beginner and 5 = expert)\n  - years (integer, number of years of experience if mentioned, otherwise estimate or set to null).  \n- Always return valid JSON in this exact format:\n{\n  \"skills\": [\n    {\"name\": \"React\", \"level\": 4, \"years\": 5},\n    {\"name\": \"Node.js\", \"level\": 3, \"years\": 2}\n  ]\n}\n- Do not include text outside of the JSON.\n"
        },
        "promptType": "define"
      },
      "typeVersion": 2.1
    },
    {
      "id": "810daa5b-6b4e-4960-9951-b7693a5a9e2c",
      "name": "構造解析 json",
      "type": "n8n-nodes-base.code",
      "position": [
        1296,
        0
      ],
      "parameters": {
        "jsCode": "// Get AI output string\nconst rawOutput = $json[\"output\"];\n\n// Parse string into JSON\nlet parsed;\ntry {\n  parsed = JSON.parse(rawOutput);\n} catch (e) {\n  throw new Error(\"Invalid JSON from AI: \" + e.message);\n}\n\n// Extract skills\nlet skills = parsed.skills || [];\n\n// Filter skills where level > 2\nskills = skills.filter(skill => skill.level > 2);\n\n// Return cleaned result\nreturn skills.map(skill => ({ json: skill }));\n"
      },
      "typeVersion": 2
    },
    {
      "id": "676a04bd-ed64-46ee-a97c-428b9d3d1555",
      "name": "付箋メモ",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -224,
        -272
      ],
      "parameters": {
        "height": 272,
        "content": "##  Manual Trigger Node\n\n**Purpose:** Starts the workflow execution\n**How it works:** Click the \"Execute workflow\" button to begin processing\nWhen to use: Run this when you want to analyze new resumes that have been added to the resume folder"
      },
      "typeVersion": 1
    },
    {
      "id": "42f2c726-7b9d-4b11-85a1-a10b0a54bfda",
      "name": "付箋メモ1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        112,
        -352
      ],
      "parameters": {
        "height": 336,
        "content": "## Search Resume (Google Drive)\n\n**Purpose:** Locates resume files in a designated Google Drive folder\n\n**Configuration:**\nConnected to a specific folder named \"Resume_store\"\nSearches for all files in the folder\n\n**Output:** List of all resume files found in the folder"
      },
      "typeVersion": 1
    },
    {
      "id": "3ae4d01a-6b6a-43b9-bb63-cbce538d3513",
      "name": "付箋メモ2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        336,
        160
      ],
      "parameters": {
        "height": 304,
        "content": "##  Download Resume (Google Drive)\n\n**Purpose:** Downloads each resume file from Google Drive\n\n**How it works:** Takes the file IDs from the search step and downloads the actual PDF files\n\n**Security:** Uses secure Google Drive API credentials (details hidden for security)"
      },
      "typeVersion": 1
    },
    {
      "id": "78e6ef99-d11b-4423-b846-20052eeb357e",
      "name": "付箋メモ3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        512,
        -336
      ],
      "parameters": {
        "height": 304,
        "content": "##  Extract Content from File\n\n**Purpose:** Converts PDF resumes into readable text\n\n**Functionality:**\nProcesses PDF files\nExtracts all text content for analysis\n\n**Output:** Plain text version of each resume"
      },
      "typeVersion": 1
    },
    {
      "id": "2a0c837d-b006-4d75-a1f2-f4f4f7d10098",
      "name": "付箋メモ4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        720,
        304
      ],
      "parameters": {
        "height": 304,
        "content": "## . Azure OpenAI Chat Model\n\n**Purpose:** Provides AI language model for skill analysis\n\n**Configuration:**\nUses GPT-4o-mini model\nConnected via secure Azure OpenAI credentials\n\n**Role:** Powers the skill analysis agent with AI capabilities"
      },
      "typeVersion": 1
    },
    {
      "id": "aa4ef7a5-8ef9-49a9-88f5-acf32b0fa7d1",
      "name": "付箋メモ5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        848,
        -416
      ],
      "parameters": {
        "height": 400,
        "content": "## Skill Analyser (AI Agent)\n\n**Purpose:** Main intelligence of the workflow - analyzes resume text for technical skills\n\n**System Instructions:**\nFocuses on predefined tech stack: React, Node.js, Angular, Python, Java, SQL, Docker, Kubernetes, AWS, Azure, GCP, HTML, CSS, JavaScript\nEvaluates skill levels on 1-5 scale (1=beginner, 5=expert)\nEstimates years of experience for each skill\nReturns structured JSON format"
      },
      "typeVersion": 1
    },
    {
      "id": "52d9bd11-c8be-4337-b799-195d1b267b52",
      "name": "付箋メモ6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1104,
        176
      ],
      "parameters": {
        "height": 336,
        "content": "## Parse Structured JSON\n\n**Purpose:** Processes and filters the AI analysis results\n\n**JavaScript Code Logic:**\nParses the JSON output from the AI agent\nFilters skills to only include those with proficiency level > 2\nStructures data for database storage\nHandles error cases for invalid JSON"
      },
      "typeVersion": 1
    },
    {
      "id": "e6fd03e9-307d-470c-b904-b7852271b9ae",
      "name": "付箋メモ7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1296,
        -528
      ],
      "parameters": {
        "height": 512,
        "content": "## Update sheet with Skill matrix (Google Sheets)\n\n**Purpose:** Stores the extracted skills in a Google Sheets database\nTarget Sheet: \"Resume store\" spreadsheet, \"Sheet2\" tab\n\n**Data Mapping:**\nSkill name → extracted skill name\nSkill level → proficiency rating (1-5)\nSkill years → years of experience\nName → \"John Doe\" (hardcoded candidate name)\n\n\n**Operation:** Appends new rows or updates existing ones based on Name field"
      },
      "typeVersion": 1
    },
    {
      "id": "9fa44b2f-4e20-471f-aa01-9d4e6ffc1a67",
      "name": "付箋メモ8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -640,
        -48
      ],
      "parameters": {
        "height": 496,
        "content": "## Workflow Process Flow\n\n**Start → Manual trigger initiates the process**\n\n**Search → Finds all resume files in Google Drive folder**\n\n**Download → Retrieves each resume file**\n\n**Extract → Converts PDF to text**\n\n**Analyze → AI evaluates skills and proficiency levels**\n\n**Filter → Keeps only intermediate to advanced skills (level > 2)**\n\n**Store → Saves results to Google Sheets database**"
      },
      "typeVersion": 1
    },
    {
      "id": "1fe999a3-5f03-4c31-9dd5-de285bbc510d",
      "name": "スキルマトリクスでシート更新",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1520,
        0
      ],
      "parameters": {
        "columns": {
          "value": {
            "Name": "John Doe",
            "Skill name": "={{ $json.name }}",
            "Skill level": "={{ $json.level }}",
            "Skill years": "={{ $json.years }}"
          },
          "schema": [
            {
              "id": "Name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone ",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Phone ",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Years of experience",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Years of experience",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "skills",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "skills",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "curent role",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "curent role",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "education",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "education",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Score",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Score",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Summary",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Skill name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Skill name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Skill level",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Skill level",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Skill years",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Skill years",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Name"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1424038785,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JlXxy90s0we_IqErHyvomrJSijb8pd4H91hOUCH6xCA/edit#gid=1424038785",
          "cachedResultName": "Sheet2"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1JlXxy90s0we_IqErHyvomrJSijb8pd4H91hOUCH6xCA",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JlXxy90s0we_IqErHyvomrJSijb8pd4H91hOUCH6xCA/edit?usp=drivesdk",
          "cachedResultName": "Resume store"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "s4dP1fNuVZ2gWvs3",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.6
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "80d15093-7694-4da9-8e07-7c82f9221cba",
  "connections": {
    "539bdc67-0f64-409c-afbb-83bcef1d164c": {
      "main": [
        [
          {
            "node": "550324ac-717b-4749-b885-e78777a107f6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "fdece73f-e3a0-4678-bd79-733f91ac38f3": {
      "main": [
        [
          {
            "node": "810daa5b-6b4e-4960-9951-b7693a5a9e2c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "550324ac-717b-4749-b885-e78777a107f6": {
      "main": [
        [
          {
            "node": "4c59808e-dd0d-4957-9738-b813cb2d3e70",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "810daa5b-6b4e-4960-9951-b7693a5a9e2c": {
      "main": [
        [
          {
            "node": "1fe999a3-5f03-4c31-9dd5-de285bbc510d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "be3bdafb-8250-4580-809b-84df5a18587e": {
      "ai_languageModel": [
        [
          {
            "node": "fdece73f-e3a0-4678-bd79-733f91ac38f3",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "4c59808e-dd0d-4957-9738-b813cb2d3e70": {
      "main": [
        [
          {
            "node": "fdece73f-e3a0-4678-bd79-733f91ac38f3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7119286f-4f1b-41ac-9aa0-8e0ba5e9a2be": {
      "main": [
        [
          {
            "node": "539bdc67-0f64-409c-afbb-83bcef1d164c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
よくある質問

このワークフローの使い方は?

上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。

このワークフローはどんな場面に適していますか?

上級 - その他, AI要約, マルチモーダルAI

有料ですか?

このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。

ワークフロー情報
難易度
上級
ノード数17
カテゴリー3
ノードタイプ8
難易度説明

上級者向け、16ノード以上の複雑なワークフロー

作成者
Rahul Joshi

Rahul Joshi

@rahul08

Rahul Joshi is a seasoned technology leader specializing in the n8n automation tool and AI-driven workflow automation. With deep expertise in building open-source workflow automation and self-hosted automation platforms, he helps organizations eliminate manual processes through intelligent n8n ai agent automation solutions.

外部リンク
n8n.ioで表示

このワークフローを共有

カテゴリー

カテゴリー: 34