【Integromat】Developers IOブログの投稿を友人に通知してみた

2020.05.30

CX事業本部の山本です。

5月1日に入社し、ブログを書き始めたのですが、友人からブログを更新したことを通知してほしいと言われました。ただ、Developers IOブログには、筆者ごとの投稿に対するRSSがない模様です(あったら申し訳ございません)。

5/31追記: https://dev.classmethod.jp/author/yamamoto-hiroki/feed/ のようにして、アクセス可能と教えていただきました。

そこで今回は、Integromatというサービスを利用して、ブログの投稿があったら自動的に友人のメールに通知するように設定していきたいと思います。

Integromatの概要

Integromatは、いわゆる"SaaS自動化サービス"(呼び方が定まってないようなので、今回はこのように呼びます)の1つです。世の中のSaaS同士をつなぎ合わせることで、強力なサービスを簡単に作成することができます。AWSで言うところのLambdaに近いところがありますが、SaaS自動化サービスでは、基本的にプログラミングは必要なく、クリックのみで作成することも可能です。(もちろんプログラミングのようなことも可能です)

下の図のように、あるイベントをトリガーとして、処理をつなぎ合わせて行くことで、実現したい機能を構成します。GUIでグラフィカルに構成することができます。どんな処理が起きているかわかりやすく、実行した結果もこの画面に表示されるため、データの流れも把握しやすいです。Webブラウザ上で処理を構成していきます。

Integromatのページから引用)

ノードがModuleエッジがLinkを表します。Moduleでは、Integromatが対応している数多くのSaaSから、利用したSaaSを選択し、実行したい処理を選択します。各Moduleの処理結果の出力は、Linkで接続された後続のModuleの入力とすることができ、処理を組み合わせることができます。Linkは流れるデータにFilterをかけて、絞り込むことができます。この処理全体をScenarioと呼びます。

SaaS自動化サービスとしては、Integromat以外にも、ZapierIFTTTというサービスがあり、それぞれで機能の得意/不得意がありますが、今回は詳細については割愛します(いつか別の記事でまとめます)。簡単に比較しておくと、Integromatは、構成できる機能の自由度が高く、利用料金も安いという利点があります。

料金は月額制で、選択するプランによって、主に以下が変わります。今回作成するような簡単な処理を実行する(動画ファイルなどを扱わない)範囲では、データサイズが上限に引っかかることはほぼなく、Operationの数が関わることが多いです。

  • Moduleを実行できる回数(=Operation)の上限
  • 入出力されるデータサイズの合計量の上限
  • シナリオを自動実行(予約実行)できる時間間隔の下限

Freeプランでは、1000Operations・100MBまで無料です(2020/05/30現在)。ぜひとも触ってみてはいかがでしょうか?(一番月額料金が低いプランでも、9$/monthで 10000 Operations なので、およそ 0.1円 / Operationです。自分でコードを書く時間を考えたら破格の安さですね)

Scenario作成:通知メールの自動化

処理の概要は以下な手順です。

  1. 山本が執筆した記事のページをHTTPで取得(GET)する
  2. 取得したHTMLから投稿記事の日付部分を取り出す(複数取り出されます)
  3. 日付部分が昨日の日付だけのものを取り出す
  4. 取り出された日付の数が0でないことを確認する(0だったら以降を実行しない)
  5. 通知メールを1回送る
  6. (上記を毎日、特定の時刻に実行します)

作成したScenarioは以下のようです。4つのModuleを組み合わせています。

今回作成したScenarioをエクスポートしたものは以下のとおりです。Scenario編集画面の下にある白いアイコンのうち、一番右の「…」の「Import blueprint」からインポートできます。(注:利用する場合はメールの送信元の認証設定と、メールの送信先のアドレスは、指定し直す必要があります)

以下、それぞれのModuleについて簡単に解説します。

HTTP(Get a file)

「URL」に先程のページのアドレスを入力することで、ページを取得します(手順1)。左下の時計マークは定期実行(予約実行)を設定するものです(手順6)。今回は毎日9時に実行するように設定しました。

Text parser(Match pattern)

正規表現を利用して、投稿の日付部分を取り出します(手順2)。また、後続のLink部分で、取り出したデータが前日の日付であるかどうかを判定して、フィルタイングしています(手順3)。このModuleからは、正規表現に該当する箇所分(複数)出力され、以降の処理も複数回実行されるようになります。(こういった後続の処理を複数回実行するという機能は、すべてのSaaS自動化サービスに存在するわけではなく、Integromatの利点の1つです)

Array aggregator

このModuleは、複数回出力される結果を1つのArrayにまとめて出力し直すことができます。今回実現したいことは複数回メールを送ることではなく、1回メールを送れば良いので、一度出力をまとめる必要があります。Arrayにまとめ直すことで、以降の処理を無駄に繰り返すことがなくなります。

さらに今回は更新されてなかったらメールを送らないようにしたい(手順4)ので、後続のLinkで出力したArrayの持っているデータ数が0よりも大きいときのみデータを通すようFilterを設定しました。

Integromatは実行されたModule回数(=Operation)で料金がかかります。この回数は、Text parserや(Flow Control内にある)Iterator・Repeaterといった、複数回繰り替えして処理を行うModuleの後は、繰り返した分も加算されます。なので、できる限り早めにaggregatorで閉じた方が、節約になります。

また、上のfilterのような処理は、Set variableなどのModuleでも可能ですが、これもOperationとして加算されてしまいます。しかし、FilterであればOperationに数えられないため、同じ処理であっても節約が可能です。

少しコツがいるようなところですが、覚えるとかなり節約できるポイントです。

Email(Send an Email)

最後にメールを送ります(手順5)。このModuleの設定では、送信元メールの認証を行いますが、メーラの認証ページに飛んでくれるので簡単に設定できます。(Integromatは、EmailのModuleに限らず、認証が必要なものはすべて認証ページに飛ばしたり、APIキーの置き方を指示してくれるので、連携がものすごく簡単です)

補足

今回はHTMLを利用したため、正規表現などの少しむずかしい処理が出てきました。しかし、Integromatが対応しているサービスやJSONを出力するAPIを利用する場合は、取得するデータの形式が解析されGUI上で表示され、その中から欲しいデータをクリックするだけで選択することができるため、今回よりもさらに簡単に作成することができます。

おまけ

Twitterでもツイートする機能も追加しました。以下のようにRouterというModuleを追加することで、処理結果を分岐(正確には、複製)することができます。こちらでツイートしています。

(Emailの後ろにTwitterのModuleを追加することもできますが、今回はあえてRouterを使ってみました。こっちの方が自然な気もしますし、Emailでエラーが起きてもツイートはしてくれるのでこちらの方が良い設計だと思います。)

まとめ

今回は、Integromatの簡単なScenarioを作成し、HTTPの取得・データ処理・メール送信を簡単に自動化することができました。非エンジニアの方が使えるという点でも利点がありますが、エンジニアも自身の作業を効率化するという点でも有用だと感じられました。