ハードウェアからサーバ・アプリまでワンストップで開発

n8nは複数のWebサービスを連携し処理を自動化するツールです。

https://n8n.io/

連携できるサービスは200以上あります。

Twitter、Facebook、Line、google(カレンダー、チャット、ドライブ、スプレッドシート等)、amazon使われそうなWebサービスはだいたいあるのではないかと思います。
前回ご紹介した「Baserow」も連携可能です。

n8nで連携できるサービス一覧
https://n8n.io/integrations

簡単に試してみました

作り方は右にあるノードから用途に合ったものを選択して、ノード同士をつないでいくだけです。

作ったワークフローは矢印の順に実行されます。

作ったもの

「オープンソースなノーコード・ローコードの情報をまとめたExcelファイルからファイル内のソースコードURL(GitHubかGitlabのリポジトリへのURL)列を元に、GitHubとGitlabのAPIを使ってスターの数を更新したファイルを出力するワークフロー」を作りました。

入力となる対象ファイルとワークフロー実行の結果出力されるファイルは以下の通りです。

入力ファイル

オープンソースなノーコードローコードまとめの表にStarの数を追加したものです。

出力ファイル

Starの列の数値だけ更新し、残りのデータはそのまま出力。テスト実行のため処理件数を7件に絞ったため7件分だけファイル出力されています。

作成したワークフロー

説明

1. ファイルの読み込み

読み込みファイルはExcelなので「Excel」ノードを使ってみました。「Excel」ノードはMicrosoftAzureアカウントを使ってExcelを操作できるノードです。「Excel」ノードが読み書きできる場所はOneDrive上になります。Excelファイルを読み出すだけであれば、「ReadBinaryFile」ノードと「Spreadsheet File」ノードを組合わせても同じことができます。こちらの場合は、読み書きするファイルの場所ははn8n実行中のホストになります。読み込んだデータはJSONとしてワークフロー内で利用できます。

2. データ加工

ファイルから読み込んだデータのSourceURLを参照してデータの取得先がGitHubなのか、GitLabなのか、それ以外で処理を分岐させるためroute情報を付加しました。

「Function」ノードをクリックすると、javascriptでコードが書けます。前ノード(ここでは「Excel」ノード)からのデータはitemsという変数に入ります。

3. 最新情報の取得

前処理で付加したrouteをもとにリポジトリの情報をGitHubもしくはGitlabから取得します。それ以外は処理しません。「Switch」ノードはデータを1件ずつ処理してくれるため、前処理の「Function」ノードの出力のデータがリストであっても気にする必要はありません。

「GitHub」ノードと「Gitlab」ノードの後の「Fuction」ノードでは取得したリポジトリ情報のスターの数を参照して、リストの各行を更新をしています。

4. 結果のマージ、ソート、出力しない情報の削除

複数ノードの出力をまとめるときは「Marge」ノードを使います。「Switch」ノードの結果により分断された、処理しないデータ、GitHubにアクセスして更新したデータ、Gitlabにアクセスして更新したデータをマージし、「ItemLists」ノードでソートします。最後に、「FunctionItem」ノードで処理のために2.で付加したroute情報を削除します。「Function」ノードと「FunctionItem」ノードの違いは前ノードからのデータをまとめて処理するか、一件ずつ処理するかの違いです。

5. 出力

1.で「Excel」ノードからデータを読みだした後はデータをJSON形式で処理してきました。Excel形式のファイルに出力する前に「Spreadsheet File」ノードでJSONからxlsxのデータに変換します。その後、「WriteBinaryFile」ノードでファイルとして書き出します。「Excel」ノードでもファイル出力はできそうな雰囲気はあるのですが、いざやろうとするとワークシートやワークブックの作成はサポート外だというメッセージが表示されます。とりあえず今回は試すだけなので深追いはせず「Spreadsheet File」ノードと「WriteBinaryFile」ノードで作成しました。今回は触れませんでしたが、「Google Sheets」というノードでGoogleスプレッドシートも扱えます(https://docs.n8n.io/integrations/nodes/n8n-nodes-base.googlesheets)。

おわり

もう少し簡単にできたんじゃないかと思うところいくつかもありますが、ちょっとやっておきたかったことが達成できたのは良かったです。あとは「Cron」ノードを使ってこの処理を定期実行したり、ファイルを更新したらSlackやメールで通知したり等すると便利そうです。

Node-REDとの違い

Webサービス連携の方が得意(そうにみえる)

どちらもカスタムなノードが追加できるようになっていますが、デフォルトで使えるノードの種類がNode-REDはハードウェア操作よりのノードが多く、n8nはWebサービスよりのノードが多く用意されています。

Node-REDもn8nも互いに同じことをやろうと思えばやれなくはなさそうですが、どちらも初めて使うエンジニアではない方を想定するならWebサービスをたくさん使うものならn8n、ハードウェアを操作するならNode-REDを勧めると思います。

オープンソースではない

n8nは「フェアコードライセンス」です。

https://docs.n8n.io/reference/license/

最後に

n8nはオープンソースなノーコード・ローコードのまとめの一つとして試したのですが、最近になってライセンスが修正されてしまいオープンソースではなくなってしまいました。

https://github.com/n8n-io/n8n/issues/2932

少し残念ですが、類似のWebサービスを連携させるサービスのIFTTTやzapierはプランにより料金が発生するのに対し、n8nは社内のビジネス目的、または非営利目的または個人的な使用目的であれば無料で使用できます。*1

弊社から導入支援などはできませんが、導入自体それほど難しくはないのでとりあえずさわってみるというのも良いかもしれません。

https://n8n.io/

*1 クラウドサービスはプランによって料金が発生します。

 

最近のエントリー

OrangePi5にZabbixをインストールする

レビュー等の依頼について

オープンソースのノートアプリ「SiYuan」 - CasaOS AppStoreレビュー

お気に入りの色さがし1

創立記念日

現在の営業品目(2)

現在の営業品目(1)

SPDX License Listをデータ化した

Orange Pi5でC3TR-Adapterを試す

CasaOS上で会計システム「Hieronymus」を動かす

会計システム「Hieronymus」v1.0.0 リリースしました

CasaOSでファイル同期アプリSyncthingをセットアップする

第11回 Freshmeat

オープンソースノーコード「Activepieces」でワークフローを作る

RaspberryPiにパーソナルクラウドOS「CasaOS」を導入する

sequelize-cliでdb:migrateすると「SyntaxError: Unexpected token ':'」が出る

LED行燈の試作(2)

CMSの社内向けサービスのリニューアル

LED行燈の試作(1)

エントリを書くこと