さまざまなウェブサービスを連携して作業を自動化してくれるツールにはIFTTTやZapierなどさまざまなものが存在しています。その中でも、「Huginn」はオープンソースで開発されており、自分でサーバーを立てることでデータを傍受される心配なく利用できる自動化ツールとのことで、実際に使ってみて使い勝手を試してみました。

GitHub - huginn/huginn: Create agents that monitor and act on your behalf. Your agents are standing by!

https://github.com/huginn/huginn



Huginnのページによると、一番簡単なのはDockerを利用したセットアップとのこと。DockerがインストールされたPCのターミナルで「docker run -it -p 3000:3000 huginn/huginn」と入力するだけでHuginnが利用可能です。



コマンドを打ち込むと自動でdockerイメージがプルされ、サーバーが起動します。



ブラウザを立ち上げて「localhost:3000」を開くとHuginnにアクセス可能。「Login」をクリック。



デフォルトではユーザー名が「admin」で、パスワードが「password」となっています。入力して「Log in」をクリックします。



ダッシュボードが開きました。Huginnではデータの処理を「エージェント」と呼ばれる単位で行っていき、外部からのデータを受け取るエージェントや、外部へ送り出すエージェントを組み合わせてデータを連携していきます。「View」をクリック。



エージェントの一覧ページが開きました。「New Agent」から新しいエージェントを作成してみます。



「Tweetを検知」「内部でブラウザを立ち上げてスクレイピング」「メールの受信・送信」「CSV・JSONなどの解析」「RSS受信」「ファイル読み込み」「天気予報を確認」「データ整形」など山のようにエージェントの種類が用意されています。今回はGIGAZINEの新着記事をまとめてメールで送信する仕組みを構築してみることに。まず「Rss Agent」タイプのエージェントを作成していきます。



タイプの他に、名前やスケジュールを決めていきます。分かりにくい概念の欄にはヘルプが付いており、それによると、Controller欄ではそのエージェントを起動できるエージェントを設定することができ、「Sources」「Recievers」「Scenarios」は主に他のエージェントとの連携に利用する模様です。Keep events欄ではイベントの残存時間を設定できます。他のエージェントと連携する際に、このエージェントが発行したイベントを利用したい場合は他のエージェントの起動時までイベントが残っている必要があるとのこと。



Options欄でその他の設定をします。設定可能な項目については右側で詳しく説明されているので、この説明を見ながら入力すればOK。



URLをGIGAZINEのRSSフィードに設定して、「Save」をクリックします。



今回は「1時間おき」というスケジュール設定にしましたが、作成したエージェントの「Actions」から「Run」をクリックすることで手動で起動することも可能です。



上のタブから「Events」ページに切り替えることで、発行されたイベントを一覧で見ることができます。



続いてメールを送信するエージェントを作成していきます。種類を「Email Digest Agent」に設定し、名前を付けて「Sources」欄に先ほど作成したエージェントを追加。



公式ドキュメントの例を参考に、Options欄を設定していきます。



早速メールを送ろうとしてみたところ、メールサーバーが設定されていないというエラーになりました。サーバーの環境変数で設定すればOKなのですが、環境変数を反映するにはサーバーの再起動が必要で、サーバーを再起動するとこれまで作成したエージェントのデータが消えてしまうので先にエクスポートしていきます。



上のタブから「Scenarios」を選択し、「New Scenario」をクリック。



名前と説明を入力し、先ほど作成した二つのエージェントを追加して「Save Scenario」をクリックします。



「downloading and sharing your export file」をクリックすると、データファイルがダウンロードされるので保存しておきます。



メールサーバーの設定については、公式の例を参考に、環境変数で設定すればOK。ここで外部のSQLサーバーとの接続設定もしておけば毎回データが消えてしまうことはないのですが、今回は使い勝手を試すだけなのでメールの設定だけにします。



環境変数を読ませるために「--env-file」のオプションを追加して再度起動。



今度は「Scenarios」の「Import Scenario」をクリックし……



先ほど保存しておいたファイルを選択し、「Start Import」をクリックします。



プレビューが表示されるので確認ボタンにチェックを入れて「Finish Import」をクリック。



無事メールが送られてきました。しかし、生のRSSデータがそのまま送られてきているため非常に読みにくくなっています。



そこで、間にデータを整えるためのエージェントを用意します。「GIGAZINE新着記事チェッカー」からイベントを受け取って処理し、イベントの送信先として「メール送信エージェント」を選択。



「Options」の「message」でどんなデータにするかを設定後、「Save」をクリックして保存します。



「Agents」タブの「View Diagram」を見るとデータの流れが確認可能です。今回はこんな感じになりました。



「メール整形エージェント」にイベントを読ませるために、「GIGAZINE新着記事チェッカー」のイベントを再送信し……



メール送信エージェントを手動で起動。



比較的読みやすい形式に整えることができました。



一度設定しておけば、後は定期的にHuginnがエージェントを起動して自動で処理をしてくれるようになるというわけ。公式に用意されているエージェントは下記の通りです。これだけでも十分さまざまな作業を自動化することが可能ですが、オープンソースというだけあってエージェントを自作することも可能で、データを外部に流さずにすむだけでなく非常に拡張性に優れているアプリとなっています。

CSV Agent

Webhook Agent

Tumblr Likes Agent

Twilio agent

Javascript Agent

Dropbox Watch Agent

Aftership Agent

Manual Event Agent

Telegram Agent

Attribute Difference Agent

JSON Parse Agent

Jabber Agent

De Duplicate Agent

Google Translation Agent

Data output Agent

Adioso Agent

Email Digest Agent

The Tumblr Publish Agent

Weibo User Agent

Pushover Agent

S3 Agent

Post Agent

Twitter Action Agent

Twitter Favourites

Twitter User Agent

Twitter Search Agent

Twitter Stream Agent

Twitter Publish Agent

Delay Agent

RSS Agent

Google Calendar Agent

Local File Agent

User Location Agent

Wunderlist Agent

Weibo Publish Agent

Growl Agent

IMAP Folder Agent

Evernote Agent

Twilio Receive Agent

Hipchat Agent

Commander Agent

Peak Detector Agent

Dropbox File URL Agent

Liquid Output Agent

Read File Agent

Change Detector Agent

Witai Agent

Public Transport Agent

Shell Command Agent

Phantom JS Cloud Agent

Digest Agent

PDF Info Agent

Human Task Agent

Stubhub Agent

Website Agent

Sentiment Agent

Gap Detector Agent

Email Agent

Boxcar Agent

FTPSite Agent

Scheduler Agent

Pushbullet Agent

Trigger Agent

Jira Agent

Event Formatting Agent

MQTT Agent

HTTP Status Agent

Basecamp Agent

Weather Agent

Slack Agent

Google Flights Agent