Zapierとn8nでの自動化を比較してみた 新着RSSフィードをSlackへ

タスク自動化ツールの「Zapier(ザピエル/ザピアー)」と、OSSのタスク自動化ツールである「n8n」を比較してみました。ワークフローの設定手順も含めて解説します。

# お題

Webサイトの新着情報RSSフィードを取得し、新着があればSlackへ通知する。
今回は「Yahoo!ニュース IT」にしてみました。

# 結論

結論から申し上げます。
今回のお題で比較してみたところ、**Zapierは簡単！便利！**という結論に至りました。
定期実行で新着を確認する必要もなく、トリガーで自動的に新着をキャッチしてくれるのも大変便利でした。

|  | Zapier | n8n |
|:-----------------|:-----------------|:------------------|
| 価格 | 無料〜有料 | 無料 |
| 連携サービス | 2000以上 | 150程度 |
| 難易度 | 易しい | 難しい |
| 拡張性 | 低い | 高い |
| コーディング | NoCode | LowCode |
| サーバー | 不要 | 必要 |

Zapierの場合、無料では月の実行数がかなり限られるので、毎月のコストは必要ですが、コスト削減に十分寄与できるパフォーマンスであると考えています。

Zapier Pricing（2020/05 執筆時点）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/0981bc14-b6e3-6567-3cd3-8ddeaa2322b5.png)

一方、n8nはOSS(Open Source Software)ですので、全て無料で使用できるところは魅力ではありますが、

- サーバー構築が必要
- 接続可能なサービス数がZapierには及ばない
- ワークフローがプログラミングチックで多少のコーディングが必要になる

という点から、ある程度のエンジニアリングスキルが必要になります。


# タスク自動化

今回のお題で作成したワークフローを先に記載します。
Zapierは2ステップであるのに対してn8nは5ステップとなりました。

- Zapier
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/de843496-7880-1e79-a545-90e9c88680b7.png)

- n8n
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/404f8329-8368-6fa0-5ed1-665aea6a72d2.png)

## Zapier

Zapierでのワークフロー構築手順です。

### 1. Zapを新規作成

ダッシュボードから「Create Zap」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/35bda4e6-fcd4-7a1a-6a34-e0868bc89d14.png)

### 2. トリガーを設定

「When this happens」を選択します。
※トリガーとは「引き金」を指します。要は「何かが起きた時に何かをする」の「何かが起きた」の設定です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/be04cff1-cd93-39d8-a62a-df1d3ae8ff63.png)

「Built-In Apps」の中から「RSS by Zapier」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/38c14dbb-e3f0-3d22-e829-9c9713ee43b9.png)

「Choose Trigger Event」で「New Item in Feed」を選択します。
新着フィードが発生したら、というトリガーです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/41f174e4-372e-62c4-827f-48f9a3bb09ce.png)

選択したら「CONTINUE」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/af54ecd4-68df-b5ec-5d4f-65130459d13e.png)

「Feed URL」にYahoo!ニュース ITのURLを入力します。
[Yahoo!ニュース - RSS](https://headlines.yahoo.co.jp/rss/list)
https://news.yahoo.co.jp/pickup/computer/rss.xml

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/09a12a9e-2cca-1504-7eb1-87ce60e06483.png)

※今回はログイン不要の公開RSSなのでUsernameとPasswordは設定しません

「CONTINUE」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/8d095329-e48a-52e9-e372-582decd0a679.png)

「Test trigger」を押下してテストします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/81f8815c-e655-8da0-fdcc-fceb90e20e93.png)

こんな感じで結果が表示されればOKです。「CONTINUE」で次に移ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/7d614283-80e3-20a6-8f4f-6b18a862d3cd.png)

### 3. アクションを設定

「何かをする」のActionを設定します。(Do this)
今回は「Slackへ通知」するという設定を行います。

「Your Apps」から「Slack」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/e8df023c-1fd9-b37b-4e7e-c60defd5487e.png)

今回は通知先はチャンネルにします。
「Send Channel Message」を選択します。

設定したら「CONTINUE」で次へ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/bfcae7f0-f58d-eb51-88d3-9ab1aa6cb1c3.png)

「Slack account」を選択します。
※このアカウントを使ってフローを実行します。

設定したら「CONTINUE」で次へ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/59d892ca-2f01-a51d-8f39-fb6bbabc64cf.png)

「Channel」で通知先のチャンネルを選択します。
「Message Text」にフィードの項目(Item)を入力します。（Insert Data内の項目を選択するとMessage Textに追加されます）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/973f4774-0c2a-2ecd-0c35-8a8881e034a6.png)

「TEST & CONTINUE」でテストしてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/d4ce8f32-2505-f0eb-7d8d-2ccf55abbabb.png)

Slackに通知されればOKです。

（引用元：Yahoo!ニュース）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/10500d91-fa66-1165-f655-295667c45ff0.png)

「Done Editing」で設定完了します。
すると、冒頭のワークフローと同じものができあがります。

このワークフローを動作させるためにスイッチを「ON」にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/a25b52d7-49a8-2fde-cf76-bff7d1bf305c.png)

これで完成です。


## n8n

n8nでのワークフロー構築手順です。

まずはサーバーを用意します。ローカルPCでも構いません。

[n8n公式サイト](https://n8n.io/)の手順にはCLIとDockerでの2通りの構築方法がありますが、
今回は手軽なDockerで構築しました。（1コマンドです)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/ce4bd54b-c9d4-226f-2e56-f72e1602872c.png)

### 1. ワークフローを作成

「New」で新規にワークフローを作成します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/46bd4ec8-18da-d5b5-b81a-0bfbae2e9f7c.png" height="250">

### 2. トリガーを作成

#### Cron

ワークフローにアイテムを追加します。「+」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/659050e5-bcce-b165-cfd0-f4ee12db19f8.png)

「Trigger」の中から「Cron」を選択します。
※Cronとは決められた日時に定期実行してくれるものです

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/9a9408ab-d2b6-fe13-74b6-f25e7345fcd3.png" height="350">

「Parameters」に以下の設定をします。
新着1件のみを取得する設計にしたいため、1分おきに実行するようにしました。

| 項目 | 設定値 | 説明 |
| :-- | :-- | :-- |
| Mode | Every Minute | 毎分 |

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/4b6ab4f5-bfcf-704b-f8f4-a2b600205913.png" height="250">

#### RSS Feed Read

RSSフィードの読み込みアクションを追加します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/babe8978-acb1-a4df-7eaf-b6f08f98ade4.png" height="200">

「Parameters」に以下の設定をします。

| 項目 | 設定値 | 説明 |
| :-- | :-- | :-- |
| URL | https://news.yahoo.co.jp/pickup/computer/rss.xml | RSSフィードのURL |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/096008c1-d15c-d487-2312-469bd93ce713.png)

これを実行するとこんな感じになります。
8件の結果が出てきました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/44fed71c-1527-3eff-89de-989a533d7e4f.png)

#### SplitInBatches

RSSフィードの結果配列から先頭の1件だけを抜きます。
「Split In Batches」を作成します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/99d69203-5dc0-e29f-f9c9-02a9f1683ae8.png" height="250">

| 項目 | 設定値 | 説明 |
| :-- | :-- | :-- |
| Batch Size | 1 | 先頭1件のみ |

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/32b51061-6cd7-42c0-0f32-220c12ebb01a.png" height="250">

実行後、Resultsが1件になっていればOKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/9d9e053d-432f-18ec-207a-64b17997472d.png)

#### Function

ここまでの設定だと、毎分同じものが流れてしまうので、重複を排除します。
「Function」を作成します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/6f094c2a-f397-fd55-4dae-2fc41a6eb083.png" height="250">

| 項目 | 設定値 | 説明 |
| :-- | :-- | :-- |
| Function | 下記コード | 前回日時と異なる（＝新着）の場合は新着データを返却 |

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/59816017-d56d-2637-8240-b93d6520bc9c.png" height="300">

```javascript:Function
const staticData = getWorkflowStaticData('global') // グローバル変数を取得

const lastIsoDate = staticData.lastIsoData // 前回の日時

const currentIsoDate = items[0].json.isoDate // 今回の日時

if (lastIsoDate != currentIsoDate) { // 更新があったら処理
  staticData.lastIsoData = currentIsoDate
  return items // 新着を返却
} else {
  return [] // 何も返さない
}
```

#### Slack

Slackへの通知を設定します。
※事前にSlack側でbotの作成が必要ですが、割愛します

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/496b9138-4084-e1e5-4f43-d03213396ac9.png" height="250">

「Slack API」の設定をします。

| 項目 | 設定値 | 説明 |
| :-- | :-- | :-- |
| Credentials Name | 任意の名前 | Slack Credentailsの名前 |
| Access Token | アクセストークン | Slackのアクセストークン |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/a54df4e1-5911-50da-032e-0a72c877a3cf.png)

「Parameters」の設定をしていきます。

| 項目 | 設定値 | 説明 |
| :-- | :-- | :-- |
| Resource | Message | メッセージ |
| Operation | Post | POSTメソッドで送信 |
| Channel | 任意のチャンネル名 | 投稿先のチャンネル |

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/424c8563-bec3-9818-6aee-2b0b0ba62b01.png" height="350">

「Text」の設定です。
「Nodes」からひとつ前の「SplitInBatches」を選択し、「Output Data」の「JSON」「enclosure」から取得要素を選択します。
※SplitInBatchesの実行結果が0件だとOutputDataが表示されないので要注意

「Expression」にSlack通知の本文を設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/287314f2-fbe0-1fab-c6ec-5d55d0de53cd.png)

Activeを「ON」にして完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/869f4458-54b7-cec8-6fdf-51b5cdd206d2.png)

# おわりに

以上でZapierとn8nの設定はおしまいです。
Zapierの方が設定内容が楽だったと思います。

（完成形を再掲）

- Zapier
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/de843496-7880-1e79-a545-90e9c88680b7.png)

- n8n
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581277/404f8329-8368-6fa0-5ed1-665aea6a72d2.png)


実際、n8nで構築中もOutput Dataが取れないなど、問題と解決が必要なことが何回かありました。
その点、Zapierはサクサクと設定できたので「もう終わり？」というくらいあっという間でした。

ワークフロー自動化ツールは他にもありますので、ぜひ比較の参考にしてみてください。
ありがとうございました。