最近自宅サーバーに導入したワークフロー自動化ツール n8n が便利だったので紹介します。

n8n について

n8n はWebベースのGUIでワークフローを作成・運用できるツールです。
本記事ではCommunity Editionのみを扱いますが、有料のクラウド版も提供されています。

下は実際の画面です。

n8nの画面

この例では、

  1. スケジュールで
  2. HTTPリクエストを送信し
  3. レスポンスによって
  4. 固定のレスポンスの編集またはコード実行を行い
  5. OpenAIへリクエストを投げ(必要あればtoolsを自動実行し)
  6. 最終的なレスポンスをDiscordに送信する

というワークフローを作成しています。

n8n の楽しいところ

ノードが豊富

以前はDifyのself-hosting版を使ってチャットボットなどを運用していましたが、スケジュール実行や(APIキー無しでの)Webhookの待ち受けなど、「そこまでできるならこれもできてくれー」と思うことがありました。
n8nでは様々なTriggerノードが用意されており、より幅広いシーンで利用できます。

また、HTTP RequestノードのPredefined Credential Typeも地味に便利なポイントです。
例えば組み込みのOpenAIノードで非対応なオプションを利用したい場合、OpenAIノードの代わりにHTTP Requestノードを使って自力でREST APIを叩くことになりますが、このときの認証はPredefined Credential Typeを選ぶだけで簡単に通せます。
Predefined Credential Typeも多くのサービスに対応しています。
Predefined Credential Typeのリスト

入出力やAPI呼び出しの実装はn8nに任せ、自分のやりたい部分に集中できる/欲しい機能をサクッと実現できるのはとてもありがたいです。

デバッグが容易

1つ前のノードに下のようなデバッグ用の仮の出力

[
  {
    "name": "First item",
    "code": 1
  },
  {
    "name": "Second item",
    "code": 2
  }
]

を指定すると、次のノード編集画面は以下のようになります。 n8nのノード詳細画面

左側には、先程のデバッグ用の前のノードの出力が(このノードへの入力として)表示されています。
“Test step” をクリックすると、このノードのみが実行され、結果が右側に表示されます。(この例では code キーに格納された値を code * 2 の実行結果に変更しているので、結果として code の値が2倍にされています)
この繰り返しでワークフローを作成・編集できます。

入出力の表示はJSONの他、SchemaやTable形式にも切り替えられます。

その他

  • フィールドの指定はドラッグ・アンド・ドロップで簡単、かつJSも埋め込める
  • フローに落としにくい部分はコードで書いてよい(CodeノードでJSとPythonを記述可能)

self-hosting のすすめ

自宅サーバーでホストすると気軽に遊べるのでおすすめです。
私はご家庭によくあるNAS(DS920+)のDocker機能で運用しています。

自宅サーバーでネットワーク内からのアクセスのみで試すなら、以下のdocker-compose.ymlを使うと楽です。

version: '3.8'

services:
  n8n:
    container_name: n8n
    image: docker.n8n.io/n8nio/n8n
    environment:
      - N8N_SECURE_COOKIE=false
    ports:
      - "5678:5678"
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  n8n_data:

実際の運用例 - 睡眠・起床時のワークフロー

一例として、実際に使っている睡眠・起床時のワークフローを紹介します。

私は Sleep as Android という睡眠解析付きアラームアプリを使っています。 このアプリはイベント発生時にWebhookを叩けるので、それをトリガーにしてn8nでワークフローが走るようにしています。

睡眠・起床時のワークフロー

Webhookを受け取ると、まずデータ部分のJSONの event キーによって(イベント種別によって)分岐します。

  • 睡眠開始時は、SwitchBotシーリングライトをオフにしつつ、時間を記録します。
  • アラームスヌーズ時は時間の記録のみを行います。
  • 起床時は、SwitchBotシーリングライトをオンにし、その明るさと色を調整し、天気情報を取得してDiscordに通知し、時間を記録します。

“Execute Workflow”は、ワークフロー内で別のワークフローを呼び出すノードです。
天気情報取得のワークフローは以下の通りです。

天気情報の取得

OpenWeatherMap APIを使って天気情報を取得し、Pythonで加工し、OpenAI APIでgpt-4oに分析・要約させています。

運用してみて

こういったちょっとしたワークフローは、これまでは主にGitHub CopilotやCursor等でプロンプトを書いてコード生成していました。 しかしn8nを試してみると、コード生成(プロンプトを組み立て、コードを生成させ、動作を検証し、実行環境を整えてデプロイする)する方法よりも早く目的の処理を実現できました。
また、私は現在二人暮らしをしているのですが、n8nのGUIはわかりやすいのでコーディングが不慣れな方にもワークフローを編集してもらうことができました。
みなさんもn8nを自宅で、家族全員で使ってみてはいかがでしょうか。

今後どうなっていくか

しばらくは(n8nを超えるツールが出てくるまでは)、n8nをメインに使っていこうと思います。

n8nを超えるとしたら、もっとAIが活用されるようになるのかなと思います。 フローの構築や編集も、人力ではなくAIに任せられるようになると嬉しいですね。

その先は…フローそのものもAIに任せるようになっていきそうですね。 以下のように、Webhookと大量のtoolsを持つLLMがあるだけで、ツール選択や順序の決定もLLMに任せる、つまり Function calling に戻って来るのかなと思っています。 (もちろん現在でも小規模版は実現可能ですが、context window が巨大に、かつそれをエッジで動かせるような環境になると面白いですね、という話)

大量のtoolsが接続されたLLMによるWebhook

Tags:

Categories:

Updated: