ããã«ã¡ã¯ð
æ ªåŒäŒç€ŸããããŠã¬ã®@YushiYamamotoã§ãïŒ
ãããããµã€ãã®éçºã»éå¶ãæ
åœããªãããReact.jsã»Next.jså°éã®ããªãŒã©ã³ã¹ãšã³ãžãã¢ãšããŠã掻åããŠããŸãâïž
æè¿ãæ¥åå¹çåã®ããã®ããŒã«ãšããŠãn8nïŒãšããšã€ããšãïŒãã䜿ãå§ããã®ã§ãããããããšãŠã䟿å©ãªãã§ãïŒ
ä»åã¯ããã®ãªãŒãã³ãœãŒã¹ã®ã¯ãŒã¯ãããŒèªååããŒã«ã«ã€ããŠãåºæ¬ããå¿çšãŸã§åããããã解説ããŠãããŸããããã°ã©ãã³ã°åå¿è
ã®æ¹ããã®èšäºãèªãã°ãn8nã䜿ã£ãŠæ¥åèªååãžã®ç¬¬äžæ©ãèžã¿åºããããšééããªãã§ãðª
n8nãšã¯ïŒð§©
n8nã¯ããªãŒãã³ãœãŒã¹ã®ããŒã³ãŒãããŒã«ã§ãæ§ã
ãªãµãŒãã¹ãAPIã飿ºãããŠæ¥åãããŒãèªååã§ãããã©ãããã©ãŒã ã§ãã
ç°¡åã«èšããšãããããªãšãã«ããããããããšããã¯ãŒã¯ãããŒãèŠèŠçã«çµã¿ç«ãŠãããããŒã«ãšããããšã§ããã
äŸãã°ããããªããšãå¯èœã§ãïŒ
- GitHubã®issueãäœæããããSlackã«éç¥ãã
- JSONããŒã¿ãèªåçã«ã¹ãã¬ããã·ãŒãã«åã蟌ã
- Webãµã€ãããããŒã¿ã宿çã«åéãã
- ããŒã³ãŒãã§ãã£ããããããéçºãã
ä»ã®ããŒã«ïŒZapierãIFTTTïŒãšéã£ãŠãn8nã¯ã»ã«ããã¹ãã£ã³ã°ãå¯èœã§ãããŒã¿ãèªåã®ãµãŒããŒå ã«ä¿æã§ããã®ã倧ããªç¹åŸŽã§ãã
n8nã®åºæ¬æŠå¿µð
n8nã®äžçã§ã¯ãããŒããšã¯ãŒã¯ãããŒãšããæŠå¿µãéèŠã§ãã
- ããŒãïŒç¹å®ã®åŠçãè¡ããããã¯ã®ããšãäŸãã°ãSlackã«æçš¿ããããããŒã¿ããã£ã«ã¿ãªã³ã°ããããªã©ã®æ©èœãæã€[^6]
- ã¯ãŒã¯ãããŒïŒãããã®ããŒããæ¥ç¶ããŠäœæããæ¥åãããŒã®ããš
ãããå³ã§è¡šããšãããªæãã§ãïŒ
n8nã®ã€ã³ã¹ããŒã«ãšèµ·åð
ããã§ã¯æ©éãn8nãå§ããŠã¿ãŸãããïŒã€ã³ã¹ããŒã«ã¯éåžžã«ç°¡åã§ãã
Dockerã䜿ã£ãã€ã³ã¹ããŒã«
docker run -it --rm \
--name n8n \
-p 5678:5678 \
-v ~/.n8n:/home/node/.n8n \
docker.n8n.io/n8nio/n8n
npmçµç±ã§ã®ã€ã³ã¹ããŒã«
npm install n8n -g
ã€ã³ã¹ããŒã«ãå®äºããããæ¬¡ã®ã³ãã³ãã§èµ·åããŸãïŒ
n8n start
ããã ãã§ããã©ãŠã¶ãã http://localhost:5678
ã«ã¢ã¯ã»ã¹ãããšãn8nã®ããã·ã¥ããŒãã衚瀺ãããŸãïŒç°¡åã§ããâš[^6]
æåã®ã¯ãŒã¯ãããŒãäœã£ãŠã¿ããð§
n8nãèµ·åããããå®éã«ã¯ãŒã¯ãããŒãäœæããŠã¿ãŸããããä»åã¯ãGitHubã®issueãäœæããããSlackã«éç¥ããããšããç°¡åãªã¯ãŒã¯ãããŒãäŸã«è§£èª¬ããŸãã
ã¹ããã1ïŒã¯ãŒã¯ãããŒã®äœæ
- ãCreate Newããã¿ã³ãã¯ãªãã¯
- ãBlank Workflowããéžæ
ã¹ããã2ïŒããªã¬ãŒããŒãã®è¿œå
- ã+ããã¿ã³ãã¯ãªãã¯
- æ€çŽ¢ããŒã«ãGitHubããšå ¥å
- ãGitHub Triggerããéžæ
- èªèšŒæ å ±ãèšå®
- ããªã¬ãŒã€ãã³ããšããŠãIssueãâãIssue Createdããéžæ
ã¹ããã3ïŒåºåããŒãã®è¿œå
- GitHub TriggerããŒãã®å³åŽã®ã+ããã¯ãªãã¯
- æ€çŽ¢ããŒã«ãSlackããšå ¥å
- ãSlackããéžæ
- èªèšŒæ å ±ãèšå®
- ãChannelããMessageããèšå®
ã¹ããã4ïŒå®æããã¯ãŒã¯ãããŒ
ãã®ããã«ãããŒããç¹ããã ãã§ç°¡åã«èªååã¯ãŒã¯ãããŒãäœæã§ããŸãã
ã«ã¹ã¿ã ããŒããäœã£ãŠã¿ããð ïž
n8nã®ããããšããã¯ãæ¢åã®ããŒãã ãã§ãªããèªåã ãã®ã«ã¹ã¿ã ããŒããäœããããšã§ãïŒããã«ãã£ãŠãn8nã®å¯èœæ§ãç¡éã«åºãããŸãã
ã«ã¹ã¿ã ããŒãã®äœææé
- ãŸãã¯n8nã®ããŒãã¹ã¿ãŒã¿ãŒãããã䜿çšããŸã[^6]ïŒ
# ã¹ã¿ãŒã¿ãŒãããã®ã¯ããŒã³
git clone https://github.com/n8n-io/n8n-nodes-starter.git
# ãã£ã¬ã¯ããªç§»å
cd n8n-nodes-starter
# äŸåé¢ä¿ã€ã³ã¹ããŒã«
npm install
-
package.json
ã®èšå®ã倿ŽããŸãïŒ
{
"name": "n8n-nodes-my-custom-node",
"version": "0.1.0",
// ä»ã®èšå®
}
- ããŒãã®å®è£ ãè¡ããŸãã以äžã¯ç°¡åãªäŸã§ãïŒ
ã«ã¹ã¿ã ããŒãã®å®è£ äŸ
import { IExecuteFunctions } from 'n8n-core';
import {
INodeExecutionData,
INodeType,
INodeTypeDescription,
} from 'n8n-workflow';
export class MyCustomNode implements INodeType {
description: INodeTypeDescription = {
displayName: 'My Custom Node',
name: 'myCustomNode',
group: ['transform'],
version: 1,
description: 'ã«ã¹ã¿ã ããŒãã®èª¬æ',
defaults: {
name: 'My Custom Node',
},
inputs: ['main'],
outputs: ['main'],
properties: [
{
displayName: '察象ããã¹ã',
name: 'text',
type: 'string',
default: '',
placeholder: 'åŠçãããããã¹ããå
¥å',
description: 'ãã®ããã¹ããåŠçããŸãã',
},
],
};
async execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {
const items = this.getInputData();
const text = this.getNodeParameter('text', 0) as string;
// ããã¹ãã倧æåã«å€æããã ãã®ç°¡åãªåŠç
const result = text.toUpperCase();
// çµæãèšå®
items[^0].json['result'] = result;
return this.prepareOutputData(items);
}
}
- ãã«ãããŠn8nã«èªã¿èŸŒãŸããŸãïŒ
# ãã«ã
npm run build
# ãªã³ã¯äœæ
npm link
# n8nã®ã«ã¹ã¿ã ããŒããã£ã¬ã¯ããªã«ç§»å
cd ~/.n8n/custom
# ãªã³ã¯
npm link n8n-nodes-my-custom-node
- n8nãåèµ·åããŠãæ°ããããŒãã䜿ããããã«ãªããŸãïŒ[^6]
ã«ã¹ã¿ã ããŒãã倿Žããå Žåã¯ãå¿
ãnpm run build
ãå®è¡ããŠãããn8nãåèµ·åããå¿
èŠããããŸãã
å®è·µçãªãŠãŒã¹ã±ãŒã¹ðŒ
n8nã䜿ã£ãå®è·µçãªãŠãŒã¹ã±ãŒã¹ãããã€ã玹ä»ããŸãïŒ
1. ããŒã¿åéãšåæã®èªåå
- Webãµã€ããã宿çã«ããŒã¿ãåé
- JSONããŒã¿ãè§£æããŠå¿ èŠãªæ å ±ãæœåº
- Googleã¹ãã¬ããã·ãŒãã«ä¿å
- çµæãã¡ãŒã«ã§éç¥
2. 顧客ãµããŒãã®å¹çå
- åãåãããã©ãŒã ããã®æ å ±ãWebhookã§åãåã
- AIã䜿ã£ãŠææ åæãè¡ãç·æ¥åºŠãå€å®
- é«ç·æ¥ã®å Žåã¯Slackã«éç¥ããã以å€ã¯CRMã«ç»é²
3. ããŒã±ãã£ã³ã°æŽ»åã®èªåå
SNSãããã°ã®æŽæ°ãäžåºŠã®æäœã§è€æ°ãã©ãããã©ãŒã ã«å±éïŒ
n8nã®äœ¿çšäžã®æ³šæç¹â ïž
n8nã䜿ãäžã§ã®æ³šæç¹ãããã€ã玹ä»ããŸãïŒ
n8nã¯ãããŒã³ãŒããã謳ã£ãŠããŸãããå®éã«ã¯é«åºŠãªã«ã¹ã¿ãã€ãºã«ã¯JavaScriptã®ç¥èãå¿ èŠãªã±ãŒã¹ãå€ãã§ããå®å šã«ããŒã³ãŒããæ±ããŠããå Žåã¯æ³šæãå¿ èŠã§ãã
WebhookããŒããæ¬çªç°å¢ã§äœ¿ãå Žåã¯ãå³äžã®ãInactiveããã¿ã³ãã¯ãªãã¯ããŠãActiveãç¶æ ã«ããå¿ èŠããããŸãããã¹ãã¢ãŒãã§ã¯ãªã¯ãšã¹ããåžžæåãä»ããŸããã
n8nãšã®çžæ§ãè¯ãããŒã«ð
n8nãšçµã¿åããããšå¹æçãªããŒã«ãããã€ã玹ä»ããŸãïŒ
- Slack/Discord - ããŒã ã³ãã¥ãã±ãŒã·ã§ã³ãšé£æº
- Google Sheets/Airtable - ããŒã¿ç®¡çãšã®é£æº
- GitHub/GitLab - éçºã¯ãŒã¯ãããŒã®èªåå
- OpenAI API - AIæ©èœã®çµã¿èŸŒã¿
- MySQL/PostgreSQL - ããŒã¿ããŒã¹æäœã®èªåå
ãŸãšãïŒn8nã§å§ããæ¥åèªååã®ç¬¬äžæ©ð
ãã®èšäºã§ã¯ãn8nã®åºæ¬æŠå¿µããå®è·µçãªäœ¿ãæ¹ãŸã§å¹ åºã玹ä»ããŸãããn8nã¯ãã®æè»æ§ãšæ¡åŒµæ§ãããå€ãã®æ¥åèªååã·ããªãªã«å¯Ÿå¿ã§ãã匷åãªããŒã«ã§ãã
ç¹ã«ä»¥äžã®ãããªã±ãŒã¹ã§n8nã®å°å ¥ãæ€èšããŠã¿ãŠãã ããïŒ
- è€æ°ã®ãµãŒãã¹éã§ããŒã¿ã飿ºãããã
- å®åæ¥åãèªååããŠæéãç¯çŽããã
- APIãæŽ»çšããè€éãªã¯ãŒã¯ãããŒãæ§ç¯ããã
- ããŒã¿ãã©ã€ãã·ãŒãéèŠããŠã»ã«ããã¹ãã£ã³ã°ããã
n8nã¯ãªãŒãã³ãœãŒã¹ã§å§ããããã®ã§ããŸãã¯è©ŠããŠã¿ãããšãããããããŸããæ¥åå¹çåã®æ°ããªæãéããã¯ãã§ãïŒ
æåŸã«ïŒæ¥åå§èšã®ãçžè«ãæ¿ããŸã
ç§ã¯æ¥åå§èšãšã³ãžãã¢ãšããŠWEBå¶äœãã·ã¹ãã éçºãè«ãè² ã£ãŠããŸããææ°æè¡ã掻çšããã¬ã¹ãã³ã·ããªWebãµã€ãå¶äœãã€ã³ã¿ã©ã¯ãã£ããªã¢ããªã±ãŒã·ã§ã³éçºãAPI飿ºãªã©å¹ åºããèŠæã«å¯Ÿå¿å¯èœã§ãã
ã課é¡è§£æ±ºã«åãã峿Šåãæ¬²ããããé«å質ãªWebå¶äœãäŸé Œãããããšããæ¹ã¯ããæ°è»œã«ãçžè«ãã ãããäžç·ã«ããžãã¹ã®æé·ãç®æããŸãããïŒ