n8n の self-hosting のすすめ
最近自宅サーバーに導入したワークフロー自動化ツール n8n が便利だったので紹介します。
n8n について
n8n はWebベースのGUIでワークフローを作成・運用できるツールです。
本記事ではCommunity Editionのみを扱いますが、有料のクラウド版も提供されています。
下は実際の画面です。
この例では、
- スケジュールで
- HTTPリクエストを送信し
- レスポンスによって
- 固定のレスポンスの編集またはコード実行を行い
- OpenAIへリクエストを投げ(必要あればtoolsを自動実行し)
- 最終的なレスポンスを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も多くのサービスに対応しています。
入出力やAPI呼び出しの実装はn8nに任せ、自分のやりたい部分に集中できる/欲しい機能をサクッと実現できるのはとてもありがたいです。
デバッグが容易
1つ前のノードに下のようなデバッグ用の仮の出力
[
{
"name": "First item",
"code": 1
},
{
"name": "Second item",
"code": 2
}
]
を指定すると、次のノード編集画面は以下のようになります。
左側には、先程のデバッグ用の前のノードの出力が(このノードへの入力として)表示されています。
“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 が巨大に、かつそれをエッジで動かせるような環境になると面白いですね、という話)