IFTTTやZapierのようなサービスを自前で構築して使用できるオープンソースn8n

公開日:2019/11/29 更新日:2019/11/29
IFTTTやZapierのようなサービスを自前で構築して使用できるオープンソースn8nのサムネイル

n8n-top-page.png Image Credit : n8n.io

はじめに

複数のアプリを連携させて何かしらの処理をさせることができるサービスとして、IFTTTやZapier、Microsft Flowなどが有名です。n8nはこれらののオープンソース版です。この記事では、n8nをインストールして実際に使用してみるまでの手順をまとめます。

n8nでできるようになること

以下のようなGUIの管理画面にブラウザからアクセスし、ノードを設置して繋げていくことで色々な処理を実行させることができます。なお、n8nではノードを繋げて処理を実施する一連のノード郡を「ワークフロー」と呼んでいるのでこの記事でもワークフローと呼びます。

n8n-example.png

処理を担うノードには色々な種類があります。Google DriveやDropboxのようなクラウドストレージにアクセスできるノードや、AsanaやTrelloのようなタスク管理サービスにアクセスできるノードも用意されています。SlackやDiscordにメッセージを投稿するノードもあります。 ユーザが作成したワークフローがn8nで公開されており、これらをインポートして使うことも可能です。以下のページで公開されています。

n8n.io

Workflows

公開されているワークフローをいくつか例として以下に載せます。

  • ローカルにあるファイルを定期的にDropboxにバックアップする
  • 複数のGoogleスプレッドシートを同期する
  • GitHubで自分のリポジトリにスターが付いたらSlackに通知する

なお、自前のスクリプト(Node.jsやシェル等)を実行できるノードも用意されているので、他のノードとの組み合わせによって色々な処理を自由に実現できると思います。 この記事では、n8nをインストールし、簡単な例として適当なRSSフィードを取得してローカルに保存するワークフローを作成する手順をまとめます。 以下がn8nの公式サイトです。

n8n.io
n8n

Open Source Alternative for Zapier/tray.io

また、公式リポジトリは以下になります。

github.com

n8n is a free node based "Open Source" (with Commons Clause) Workflow Automation Tool. It can be self-hosted, easily extended, and so also used with internal tools.

前提と環境

n8nをインストールして動かすにはNode.jsがインストールされている必要があります。この記事では以下のバージョンのNode.js環境でインストールしました。

  • Node.js : 10.16.0

n8nをインストールする

Node.jsが使用できる環境で、npmを使用して以下のコマンドでn8nをインストールします。以下はグローバルにインストールします。

$ npm install n8n -g

もし適当なディレクトリ配下のみにインストールしたい場合は、そのディレクトリに移動した上で--saveオプションを付けて実行します。

$ npm install n8n --save

以上でインストールは完了です。 あとは、以下でn8nを起動します。

$ n8n

特定のディレクトリ配下にインストールした場合は、そのディレクトリで以下を実行します。

$ ./node_modules/n8n/bin/n8n

n8nを起動したらブラウザでhttp://localhost:5678にアクセスします。以下のような画面が表示されます。

n8n-in-browser.png

上記で色々なノードを設置して繋げていき、ワークフローを作成します。

RSSフィードを取得してJSONファイルに書き込むワークフローを作成する

簡単な例として、RSSフィードを取得してJSONファイルに書き込むワークフローを作成してみます。 この処理を遂行するワークフローとして使用するノードとしては、以下になります。

  • 指定したURLからRSSフィードを取得する
  • 取得したRSSフィードをJSON形式に変換する
  • JSONデータをローカルに保存する

それぞれについて説明します。

指定したURLからRSSフィードを取得する

まずノードを追加するために以下のように画面右上にある「+」ボタンをクリックします。

n8n-create-node.png

すると以下のようにノードを検索できるので、ここで「http」と入力します。以下のように「HTTP Request」という名前のノードが表示されます。これをクリックします。

search-http-request-node.png

「HTTP Request」ノードが設置されて「HTTP Request」ノードの設定ダイアログが開きます。ここで以下のように「URL」部分に取得したいRSSフィードのURLを入力します。またここではフォーマットとして「String」(文字列)を選択していますが、JSON形式のデータを配布しているAPIなどでは「JSON」を選択できます。ここでは使用しませんが、この「HTTP Request」ノードはGET以外のHTTPリクエストも使用でき、認証が必要な場合も対応可能です。

http-request-dialog-rss-settings.png

RSSフィードのURLを入力したら、ダイアログの右上にある「Execute Node」をクリックします。すると以下のようにHTTPリクエストの結果が表示されます。

execute-node.png

これで指定したURLからRSSフィードを取得するノードの準備が完了です。

取得したRSSフィードをJSON形式に変換する

RSSフィード取得用のノードを追加した時と同様に、以下のように「xml」と検索し、表示された「XML」ノードをクリックして追加します。

xml-to-json-node.png

「XML」ノードの設定ダイアログが開くので、「Mode」が「XML to JSON」になっていることを確認します。その後「Execute Node」をクリックすると以下のように変換結果が表示されます。「Mode」で「JSON to XML」を選択すればJSON形式をXML形式に変換することができます。

execute-xml.png

これで取得したRSSフィードをJSON形式に変換するノードの準備が完了です。

JSONデータをローカルに保存する

JSONデータをローカルに保存するためのノードを作成します。これは単体のノードでは用意されていないため、n8nの公式サイトで公開されているJSONデータを保存するためのワークフローを使用します。ワークフローのページにアクセスすると、以下のようにワークフローの説明とそのコード(JSON形式)が記載されています。そしてこのコード部分をクリックするとそのワークフローがクリップボードにコピーされます。

copy-example-workflow.png

後は自分のn8nの画面に戻り、 Ctrl + Vなどでペーストすれば使用できます。そして最終的には各ノードを以下のように配置し、接続します。

my-workflow.png

ワークフローを実行する

ワークフローが完成したら以下のようにn8nの画面下部にある「Execute Workflow」ボタンをクリックして実行します。

execute-my-workflow.png

各ノードが順番に実行されて最終的に「test.json」というJSONファイルが作成されます。作成されるディレクトリは、n8nコマンドを実行したディレクトリです。もしファイル名やパスを変更したい場合は、「Write Binary File1」ノードをダブルクリックして設定ダイアログを開き、「File Name:」に好きなファイルパス、ファイル名を入力します。

change-file-path.png

なお、このワークフローを保存するには以下のように左側のメニューから「Save as」をクリックして名前を付けて保存します。

save-as-menu.png

トリガを設定する

n8nではトリガ用のノードも色々と用意されています。ノードを追加する時に、以下のように「Trigger」タブから検索できます。

trigger-tab.png

トリガ用のノードをワークフローの先頭に設置してつなげれば色々な条件をトリガにできます。cronのような定期実行も可能ですし、何かしらのアプリのイベントやWebhookもトリガとして用意されています。これらについては、公式ドキュメントや冒頭に載せた公開されているワークフローを参考に見てみてください。

まとめ

n8nをインストールして実際に使ってみるまでの手順をまとめました。n8nは大体のことができそうなぐらいにはノードも揃っており、随時ノードが追加されているので楽しみです。日頃の面倒な業務や作業を自動化するのに検討する価値があると思います。ぜひ試してみてください。

関連記事

開発アプリ

nanolog.app

毎日の小さな出来事をなんでも記録して、ログとして残すためのライフログアプリです。