1. n8nにおけるコード利用の優位性とワークフロー拡張の可能性 [0]

1.1. n8nの秘められた力と本チュートリアルの目的 [0]

  1. n8nの隠れた強みは、組み込み機能だけでは対応できない場合に追加コードを記述できる点である [0]。
  2. ワークフローにコードを追加する能力は、数えきれないほどの可能性を開く [1]。
  3. 本チュートリアルでは、n8nが競合他社と比較して、コードを用いた機能拡張において優れている理由を解説する [2]。
    1. プログラミング経験が少ない場合でも、n8nでコードを使用する方法が示される [2]。
  4. 講師の経験談: [3]
    1. カナダ連邦政府向けに多くの自動化を構築し、時間とコストを大幅に削減した経験を持つ [3]。
    2. これらの自動化の多くはカスタムコードを必要とし、その記述に多くの時間を費やした [4]。
    3. 現在ではn8nのようなツールを利用し、自動化作成にかかる時間を大幅に短縮している [5]。
    4. n8nがネイティブで実行できないタスクには、コードスニペットを追加している [5]。
    5. 現在は、他の人々が自身のビジネスで同様の自動化を行う方法を教えている [6]。
    6. n8nが本来持たない機能をコードで実現する方法を具体的に示す [7]。
  5. n8nでのコーディングに関連する3つの主要なトピック: [8]
    1. コードノードの使用方法とその重要な点、プログラミング知識が少なくても利用する方法 [9]。
    2. JavaScriptコード用の外部パッケージまたはモジュールのインストールと使用方法 [10]。
    3. 事前に構築されたコミュニティノードのインストール方法 [10]。

1.2. 競合他社と比較したn8nのコードに関する利点 [11]

  1. n8nがローコードソリューションとして選ばれる理由に関する簡単なまとめが提供される [11]。
  2. コード実行のためのサードパーティサービスが不要である [12]。
    1. make.comのような競合他社は、Zero Code Kitやcustomjs.dospaceなどの追加のサードパーティサービスをコード実行に必要とする [13]。
    2. これは追加サービスの費用と自動化ワークフローの複雑性を増大させる [14]。
  3. サンドボックス化されたリソース制限がない [15]。
    1. Zapierのような競合他社は、コードの実行時間とメモリ空間を制限する [16]。
    2. これは、サーバーをクラッシュさせ、他の顧客に影響を与える可能性のある不正なコードの実行を防ぐためである [16]。
    3. n8nはユーザーが選択したサーバーにセルフホストされるため、JavaScriptまたはPythonコードをリソース制限なしで実行できる [17]。
    4. ただし、大きな力には大きな責任が伴うため、サーバーをクラッシュさせないよう注意が必要である [17]。
    5. もしクラッシュした場合、サーバーを復旧させるのはユーザー自身の責任である [18]。
    6. 講師は、コードがn8nサーバーをクラッシュさせた状況を一度も見たことがない [19]。
  4. 任意の外部ライブラリやパッケージの追加が可能である [20]。
    1. n8nのJavaScriptでは、競合他社では不可能な外部ライブラリやパッケージを追加できる [20]。
    2. 外部npmパッケージのインストール方法が後ほど示される [21]。
    3. Pythonの場合、外部モジュールは追加できないものの、広範なライブラリリストにアクセスできる [22]。
    4. 利用可能なPythonライブラリには、Beautiful Soup、Jinja2、Matplotlib、NumPy、Pillow(画像操作)、Pydantic、Scikit-learn、SciPyなどがあり、非常に広範である [23]。

2. コミュニティノードの利用によるn8n機能拡張 [25]

2.1. コミュニティノードの概要と利点 [25]

  1. n8nの機能を拡張する最も迅速かつ簡単な方法の一つは、コミュニティノードを使用することである [25]。
  2. コミュニティノードは、他のn8nユーザーによって作成されたカスタムノードであり、n8nに新しい機能を追加する [27]。
  3. これらのコミュニティノードがなければ、ユーザーはコードノードを使用するか、カスタムノードを自分で作成して手動で解決策を構築する必要がある [28]。
  4. 具体例: YouTube動画のトランスクリプトを取得したい場合 [29]
    1. n8nはネイティブでこの機能を持たない [30]。
    2. この機能を簡単に実現できるオープンソースモジュールが存在する [30]。
    3. このモジュールをn8nインスタンスに追加し、コードノードを使ってモジュールを利用することも可能だが、これはある程度の作業を要する [30]。
    4. より簡単な解決策は、この機能のためのコミュニティノードが既に存在するかどうかを確認することである [31]。

2.2. コミュニティノードのインストール手順とデモンストレーション [32]

  1. コミュニティノードのインストール方法: [32]
    1. 左側の設定(Settings)に移動する [32]。
    2. サイドバーの下部にある「コミュニティノード」(Community Nodes)をクリックする [32]。
    3. 「コミュニティノードをインストール」(Install a Community Node)ボタンを押す [32]。
    4. ポップアップウィンドウで2つのオプションが表示される: npmパッケージ名を入力するか、npmレジストリを閲覧する [32]。
  2. npmレジストリを閲覧してYouTubeトランスクリプトノードを検索するデモンストレーション: [33]
    1. 「閲覧」(Browse)をクリックすると、npmjs.comのnpmレジストリが表示される [33]。
    2. 検索バーには「keywords:n8n-community-node-package」というタグが既に入力されているので、そのままにして検索語を入力する [33]。
    3. 「YouTube transcript」と入力すると、「n8n-nodes-youtube-transcript」というノードが見つかる [34]。
    4. このパッケージ名をコピーし、n8nに戻ってnpmパッケージ名フィールドに貼り付ける [34]。
    5. 「私は公開ソースからの未検証コードのインストールリスクを理解しています」(I understand the risks of installing unverified code from a public source)というチェックボックスをオンにする必要がある [35]。
    6. これは、コミュニティによって構築されたノードをインストールする際の警告であり、コードがインスタンスに悪影響を及ぼす可能性があることを示している [35]。
    7. フォーラムで他のユーザーがノードを試して問題が報告されていないかを確認することが推奨されるが、最終的には他人のコードをインストールする際にはリスクが伴う [36]。
    8. 「インストール」(Install)をクリックすると、カスタムノードがインストールされ、n8nインスタンスにコミュニティノードがインストールされたことが表示される [37]。
    9. 新しいワークフローを作成し、マニュアルトリガーを追加後、「YouTube」と入力すると、コミュニティノードを示すシンボルとともに「YouTube Transcript」ノードが表示される [37]。
    10. このノードはYouTube動画IDまたはURLのみをパラメータとして要求する [37]。
    11. デモンストレーションとして「Mark Zuckerberg pretending to be human for 27 seconds」という動画のURLを貼り付け、「テストステップ」(Test Step)をクリックする [37]。
    12. トランスクリプトがテキストのタイミング情報とともに取得されることが確認される [37]。
    13. これにより、コミュニティノードを追加するだけでn8nに機能を簡単に追加できることが示される [37]。

3. コードノードの活用とAIによるコード生成 [38]

3.1. コードノードの基本的な使い方と重要な原則 [38]

  1. コードノードについて: [38]
    1. 「コード」(Code)と入力すると、「カスタムJavaScriptまたはPythonコードを実行」(Run custom JavaScript or Python code)というノードが見つかる [38]。
    2. このノードを追加すると、コードノードで利用可能なパラメータが表示される [38]。
    3. n8nのコードノードについて知っておくべき2つの重要な点がある [39]。
  2. コードノードの2つの原則: [40]
    1. データアイテムはinputオブジェクトを通じてアクセスできる [40]。
      1. $input.と入力し始めると、いくつかのアクセス可能なメソッドが表示される [41]。
    2. 常にオブジェクトを返さなければならない [42]。
      1. これは、常に波括弧({})を返す必要があることを意味する [43]。
      2. オブジェクトや辞書ではないものを返そうとすると、nullや何も返さない場合を含め、コードは失敗する [44]。
      3. 返すものがない場合は、空のオブジェクト{}を返す [45]。
      4. 1つの変数だけを返したい場合は、波括弧に入れ、変数名: 値のように指定する必要がある [46]。
    3. デフォルトのコードに戻すと、元のコードは上記のような形式である [47]。
  3. n8nが提供するデフォルトのコードは、オブジェクトの配列を反復処理することを前提としている [48]。
    1. 各アイテムは配列内の1つのオブジェクトである [48]。

3.2. プログラミング経験がない場合のAI(ChatGPT)活用法 [48]

  1. コーディング知識が少ない場合でも、AI(ChatGPTなど)を利用してコードスニペットを作成できる [48]。
  2. ChatGPTへのプロンプト例(システムメッセージ): [49]
    1. あなたは熟練したプロのコンピュータープログラマーであり、自動化ソフトウェアn8n用のコードスニペットの記述を専門としている [49]。
    2. n8nでのコーディングにおける重要な実践事項として、以下が挙げられる: [49]
      1. n8nのコードは常に最後に変数: 値または空のオブジェクトのようなオブジェクトを返さなければならない [49]。
      2. 先行するノードからの変数は、input.allなどをループすることでアクセスされる [50]。
    3. console.logは、JavaScriptで値やメッセージをコンソールに出力するために使用される [50]。
  3. ChatGPTへの指示例(天気ワークフローに関するプロンプト): [51]
    1. 「上記のループコードを使用し、エンドユーザーに特定のメッセージを条件付きで出力するためのswitchステートメントを作成するJavaScriptコードスニペットをn8n用に記述してください」 [52]。
    2. 条件: [53]
      1. 「雨」(rain)という単語が含まれていれば、「雨が降るかもしれません。傘を持って行きましょう。」と出力する [53]。
      2. 気温が10°未満であれば、「肌寒くなるでしょう。暖かく着てください。」と出力する [53]。
      3. 気温が20°を超えていれば、「Tシャツ日和です。」と出力する [53]。
      4. それ以外の場合は、「いつもの一日です。良い一日を。」と出力する [54]。
    3. プロンプトの要点は上記である [54]。
  4. ChatGPTの応答と生成されたコードの確認: [55]
    1. ChatGPTは上記のプロンプトに基づいてJavaScriptコードを生成する [55]。
    2. 生成されたコードには、指定された基準と条件に基づくswitchステートメントが含まれている [57]。
    3. ChatGPTはコードの動作に関する説明も提供する [57]。
    4. 生成されたコードは、以前に述べた2つの基準(inputオブジェクトを通じて以前のデータにアクセスすることと、最後にオブジェクトを返すこと)に従っていることが確認される [58]。

3.3. ChatGPT生成コードの実装と検証 [59]

  1. 既存の天気ワークフローの複製と変更: [59]
    1. 以前のn8nチュートリアルで作成した元の天気都市ワークフローを複製する [59]。
    2. 複製したワークフローを「コードノード」(Code Node)とラベル付けする [60]。
    3. 元のワークフローからswitchノードとその右側のすべてを削除する [61]。
    4. 削除後、コードノードを追加する [62]。
  2. ChatGPT生成コードの貼り付け: [63]
    1. コードノードのテキストボックスに、ChatGPTが生成したすべてのコードをコピーして貼り付ける [63]。
  3. ワークフローのテスト: [65]
    1. ウェブフックのテストURLをコピーする [65]。
    2. 新しいページでテストURLを開き、都市名(例: London)を追加して実行する [67]。
  4. テスト結果の確認: [68]
    1. n8nワークフローに戻ると、各ノードにチェックマークが表示される [68]。
    2. コードノードの結果を確認すると、「肌寒くなるでしょう。暖かく着てください。」というメッセージが表示されている [68]。
    3. これは、ロンドンの気温が8.96°C(10°C未満)であり、雨が降っていないため、ChatGPTが作成したswitchステートメントが正しく機能し、適切なメッセージが表示されたことを示している [69]。
    4. 通常、このテストページで表示されるように、コードノードの最後に4つの異なる応答を追加する必要があるが、このビデオの目的はコードノードの機能とChatGPTの利用方法を示すことである [71]。

4. 外部npmモジュールのインストールとコードノードでの利用 [72]

4.1. npmjs.comの紹介とn8nローカルインストールの前提 [72]

  1. npmjs.comは、JavaScriptライブラリを含むパッケージまたはモジュールのレジストリであり、コミュニティによって提供されている [72]。
  2. n8nでは、任意のnpmパッケージをインストールできる [73]。
  3. デモンストレーションのために、n8nをローカルコンピューターにインストールする必要がある [73]。
    1. npm install -g n8nと入力することでインストールできる [73]。
    2. 講師は既にインストール済みのため、再度インストールは行わない [74]。
    3. インストール後、n8nと入力するだけで自身のn8nインスタンスを実行できる [75]。
    4. デモンストレーションのために、一時的にCtrl+Cでn8nを終了する [76]。

4.2. n8nのデフォルトフォルダとnpmモジュールのインストール [77]

  1. npmモジュールをインストールするには、まずn8nのデフォルトフォルダを見つける必要がある [77]。
  2. which n8nと入力することで、n8nインスタンスが実行されているパスを見つける [77]。
    1. これは、Macの場合のパスである [79]。
    2. Windowsの場合のパスは、C drive, users, your username, app data, local programs, n8n, resources app, node modulesのようなものと推定される [80]。
  3. ls -l n8nで実際のn8nの場所を確認すると、lib/node_modules/n8n/bin内のシンボリックリンクであることがわかる [84]。
  4. 実際のパスは、cd ../../lib/node_modules/n8nで移動できる node_modulesディレクトリ内である [85]。
    1. PWD(present working directory)で確認すると、node_modulesのパスが示される [86]。
  5. デモンストレーションとして、npmjs.comから「get-a-joke」というシンプルなパッケージをインストールする [87]。
    1. このパッケージはランダムなジョークジェネレーターである [89]。
    2. インストールコマンドはnpm i get-a-jokeである [89]。
    3. このコマンドをターミナルのnode_modules/n8nディレクトリで実行する [90]。
    4. インストールには少し時間がかかる [91]。
    5. 「get-a-joke」パッケージのインストールが完了する [92]。

4.3. 外部パッケージのn8nへのエクスポートとコードノードでの利用 [93]

  1. インストールしたパッケージをn8nで動作させるには、export NODE_FUNCTION_ALLOW_EXTERNAL=get-a-jokeと入力してパッケージをエクスポートする必要がある [93]。
    1. これにより、そのパッケージがn8nにエクスポートされたことが示される [94]。
  2. n8nを起動し、ブラウザでインスタンスをロードする [94]。
  3. 新しいワークフローを作成し、コードノードを追加する [95]。
  4. コードノードのデフォルトコードを削除し、npmの「get-a-joke」サンプルコードをコピーして貼り付ける [96]。
  5. 「テストステップ」(Test Step)をクリックすると、エラーが発生する [98]。
    1. エラーメッセージは、「オブジェクトの配列を返す必要があります。出力したいアイテムごとに1つ。」である [99]。
    2. これは、コードノードが常に最後にオブジェクトを返す必要があるという以前の要件と一致する [99]。
  6. ChatGPTを利用してコードを修正する: [99]
    1. エラーが発生したコードをコピーし、ChatGPTに、ジョークを返すようにJavaScriptコードを書き直すよう依頼する [99]。
    2. ChatGPTはコードを修正し、「get-a-joke」ライブラリをインポートしつつ、最後にジョークをオブジェクトとして返すように変更する [100]。
    3. 修正されたコードをコピーし、n8nインスタンスのコードノードに貼り付け、再度「テストステップ」をクリックする [101]。
    4. すると、「Don't look at the eclipse through a colander, you'll strain your eyes.」のようなジョークが表示される [102]。
    5. もう一度テストすると、「Did you hear about the chameleon who couldn't change color? They had a reptile dysfunction.」という別のジョークが表示される [103]。
    6. これにより、コードが正しく機能し、ChatGPTによってコードがオブジェクトとしてジョークを返すように書き直されたことが確認される [104]。
    7. 重要な点は、「get-a-joke」という外部パッケージをn8nにインストールし、コードノードで利用できるようになったことであり、これにより無限の可能性が開かれる [105]。

5. まとめと今後の展望 [106]

  1. 本ビデオで学んだこと: [106]
    1. ローコードを使用してワークフロー機能を拡張したい場合、n8nが推奨される選択肢である理由 [106]。
    2. 事前に構築されたコミュニティノードの追加方法 [107]。
    3. 標準のn8n組み込み機能だけでは難しいタスクを実行するためのカスタムJavaScriptまたはPythonコードの使用方法 [108]。
    4. 自身でコードを書く方法を知らない場合に、AIにn8nコードを記述させる方法 [109]。
    5. 外部JavaScript npmモジュールを追加する方法 [110]。
    6. コードと組み合わせたn8nの強力な可能性 [110]。
  2. 関連リソース: [111]
    1. 本ビデオで使用されたn8nワークフローとAIプロンプトは、講師のAI Integrators Communityでアクセスできる [111]。
    2. 参加は完全に無料で、説明欄にリンクが提供されている [112]。
  3. 今後のチュートリアル: [113]
    1. 次回のビデオでは、n8nが提供する強力なAI機能の一部に焦点を当てる [113]。