これは Mastodon Advent Calendar 2017 の記事では**ありません。**気付いたら全部埋まってました。 ちなみに、昨日の晩ごはんは立川マシマシ総本店のエクストラバージンマシライスでした。
##で、あんただれ
-
takenokoと申します。
- きのこではありません。
- 大学生です。
- 合法的に飲酒可能な年齢です。
- 芋焼酎が好きです。
- 最近はMastodonの**個人鯖**に居ます。
- 4月の例の記事でMastodonを知り、中規模インスタンスを渡り歩いた末に、**ベイブレー丼**を開設、その後先述の個人鯖を立ち上げました。
Qiitaに記事を投稿するのは今回が初めてで、しかも今まで自分のホームページもブログも持たずに生きてきたので、長文の記事を作成するのに慣れてなさ過ぎてすでにしんどいです。
##Webサービス連携ツールあれこれ
今回はタイトルにもある通り、Webサービス連携ツール「Integromat」を紹介します。
似たようなサービスとして「IFTTT」「Zapier」「Microsoft Flow」などがありますが、SNSの流行やスマートフォンの普及、じわじわと進むIoT化に伴ってこのような異なるWebサービス同士を連携させるツールの注目度も高まっています。
特にIFTTTは、7年間もサービスが続いているということもあり比較的知名度が高く、基本的な使い方や活用方法を解説した記事も多く出回っています。
Mastodonユーザーの間でも、mstdn.jpの管理人であるぬるかるさんがIFTTTを利用してMastodonのトゥートをTwitterに転送するアプレットを公開したことで、その名前が広まりました。
###IFTTTと比較
今回紹介するIntegromatはIFTTTと比較すると多機能で、それ故に最初はやや玄人向けのサービスだなといった印象でしたが、使っていくうちに「こんなこともできるのか!」と驚かされました。
例えば、IFTTTでは
「Aという状態になったらBを実行する」
くらいの単純な動作しかできない(無理矢理数珠つなぎにもできますが動作遅延などを考慮すると現実的では無い)です。なにより、IFTTTはややサーバーが不安定なのか、それともユーザーが多いためにわざと処理速度を下げているのかは分かりませんが、とにかくエラーが多発したり、定期的にデータを取得する動作を設定してもその間隔が適当だったりするので、ヘビーな使い方はできないと思ってください。
一方、Integromatだと
「毎日午前4時にAの状態をチェックし特定の状態である場合にはBの値を新しい物から10個取得し、それぞれの値から取り出したいデータのみを正規表現で抽出してからCというサイトにHTTPでPOST、返ってきた値を10個結合しまとめたものをDに投稿、同じ内容をEにも投稿し、最後にAの状態を書き換えて終了」
くらいの複雑な動作ができちゃいます。
###ZapierやMicrosoft Flowと比較
また、ZapierやMicrosoft Flowと比較すると、多機能であることや有料プランが存在すること(IFTTTには個人向けの有料プランが無い)など、いくつかの点は似ていますが、Zapierは無料プランだと使い物にならない上に一番安い有料プランが$20/月という導入のハードルの高さ、Microsoft Flowはそもそも連携可能なサービスが少なくUIも分かりづらい、というデメリットがあります。
その点、Integromatは無料プランでもそれなりに動かせますし、**一番安い有料プランだと$9/月から始められます。**UIも、多機能さが仇となってごちゃごちゃになりがちなところを上手くまとめていて、比較的洗練されていると思います。
###Integromatでの動作の一例
Integromatの連携動作の一例。Gmailに新着メールが来たら、Googleスプレッドシートに行を追加しセルにデータを挿入、メールの添付ファイルをZipでまとめてGmailに添付、そのデータはDropBoxにも補完しつつ、別途画像ファイルに関してのみFacebookにも投稿、という流れになっています。(多分)
しかも、各サービスのサーバーが落ちていてデータが取得できなかった場合などの、**エラー時の動作も設定できます。**例えば上記の例で説明するなら、Googleがサーバーダウンして上手く動作しなかったときにiPhoneへ通知でメッセージを飛ばす設定を付け加えることで、いち早くエラーに気付くことができます。
###Integromatは使い方の習得に時間が掛かる
そんなIntegromatですが、洗練されているとはいえIFTTTと比較すると圧倒的に複雑怪奇ですし、そもそもシステム言語がチェコ語と英語しか対応してない(本社がチェコのプラハにあるらしい)ので英語がさっぱりなユーザーにとってはハードルが高いです。
そんなわけで**「使い方を解説した記事を作ればIntegromatの利用率が高まって、日本語の解説記事がもっと増えるんじゃないかな~」**という淡い期待を込めて記事を書くことにしました。言い出しっぺのクセして最終的に他力本願なタイプのクズです。
ただ、Integromatくんはあまりにもいろいろな事ができちゃうので一体どこから解説すればよいのやら……と悩みました。今回は、一応Mastodonユーザーに向けて記事を書くことに決めたので、分かりやすくシンプルに**「毎日特定の時間になったらあらかじめ指定しておいた内容のトゥートする」**という動作を自動で行ってくれるように設定します。
##Integromatを使ってみよう
なにはともあれ、まずはアカウントを取得しないことには始まりません。実際にIntegromatを開き、アカウントを新規登録しましょう。
###アカウントを作成する
トップ画面に出てくるフォームに入力してもいいですが、もしGoogle、Facebook、GitHubのいずれかのアカウントを持っていて、連携を行いたい場合は左上のSign upに進んでください。
当該のサービスをクリックして連携させてから、フォームを入力し、規約を読んでチェックボックスを入れてSIGN UP FOR FREEをクリックすれば登録完了です。右側にも書かれていますが、基本料金は永久的に無料、クレジットカードの登録も強制ではありません。
その後、チュートリアル画面が出てきますが、これはスキップしても構いません。恐らく初歩的な英語スキルがあれば説明の内容は理解できますし、書いてある内容がわからなくても直感的に学べる部分もあるかと思います。ですが、Integromatの公式がYouTubeにラーニング用の動画をアップロードしているので、まずはこの記事の以下のプロセスを試してみてから、動画を見ながら手を動かして基本的な操作方法を覚えていく、というやり方もオススメです。
###Scenarioを作成する
次にこの画面が出てくると思います。これが、Dashboardページになります。ここで、現在のプラン、残りOperations数と残り転送可能データ容量が確認できます。右上のCreate a new scenarioをクリックして、早速新しいScenarioを追加してみましょう。まだ説明していませんでしたが、Integromatでは1回に実行する動作の流れのことをScenarioと言います。IFTTTでいうところのAppletにあたります。
クリックすると、*何のサービスを連携させたいですか?*という画面になります。下にスクロールすると、大量のWebサービスのアイコンが並んでおり、具体的にどんなWebサービスと連携可能なのかが分かると思います。で、いくら探しても肝心のMastodonがどこにも見当たりません。これでは意味が無いと一瞬思ってしまうかもしれませんが、IntegromatではHTTPリクエストが送信可能です。MastodonのAPIの叩き方はGitHubにありますが、Mastodon以外のWebサービスでIntegromatが個別に連携可能としていないサービスでも、APIが公開されておりHTTPリクエスト等でデータを送受信できる場合は連携できる可能性があります。ひとまず右上のSkipをクリックし、次の画面に進みましょう。
さて、いよいよこの画面までたどり着きました。この画面が、ScenarioをEditする画面です。ここからは実際に新しいScenarioを作っていくので淡々と解説します。まずは真ん中のでっかい**?**をクリックしてください。
すると四角いウィンドウが現れるので、下部の入力欄に**「http」と入力し絞り込みを行い、HTTPを選択してください。今回はMastodonにTootするScenarioを作りますが、例えばTwitterにTweetするScenarioならここでTwitterを選択するし、EvernoteやInstagramなんかも選択できます。連携可能なサービスが多いので、スクロールで見つからないときは適宜絞り込んでください。この丸の事をmodule**といい、Scenarioの中でmoduleをいくつも連結させることで、異なるサービス同士を連携させることができます。
一口にHTTPでデータの送受信といっても、単純にHTTPリクエストを送るのか、指定したURLのファイルを取得するのか、あるいはOAuthのリクエストの送信もできちゃったりします。今回はHTTPリクエストを送信したいので、Make a requestを選択しましょう。
まず最初に、MethodをPOSTに、Body typeをApplication/x-……dに変更してください。次にURLに
https://(インスタンスのドメイン名)/api/v1/statuses
と入力します。例えば、mstdn.jpでしたら
https://mstdn.jp/api/v1/statuses
と入力してください。ここまでできたらその画面は一旦放置して、別のウィンドウで連携するMastodonのいつものページを開き、設定画面に行きましょう。
今回はMastodon側の設定で新規にアプリを作成していきます。Mastodonのバージョンが1.6.0以降のインスタンスでは、いつものインスタンスのWeb画面の設定画面のアプリから、外部アプリとの連携に必要なアクセストークンが取得可能です。アプリ名は適当に、ここではhogehogeとしましたが、トゥートの詳細画面に記載されるので、例えば今回のようなBotを作成する場合はアプリ名からBotであることが分かるとよいかと思います。アプリのウェブサイトは省略可能ですが、設定すると詳細画面のアプリ名をクリックした際にそのページが開きます。例えば、スマホ用のクライアントアプリを作る際には、アプリの公式サイトや作者のホームページなどを設定しておくことでそのアプリの情報にアクセスしやすくなります。アクセス権は、今回作るアプリにどこまで権限を付与するかを設定できます。自分自身のみで使用するアプリであれば、基本的には3つ全てにチェックを入れて大丈夫です。設定を確認したら、送信をクリックしてください。すると、3つの64桁の文字の羅列が出てきます。今回使うのはアクセストークンですので、この欄の64桁の半角英数字をコピーしておきます。
そうしたら先程の画面に戻り、FieldsのAdd itemをクリックしてください。出てきた画面のKeyにaccess_tokenと入力し、その下のValueには先程コピーした64桁の半角英数字を貼り付け、Saveをクリックしてください。これと同じような入力を繰り返し行います。Add itemをクリックし今度はKeyにstatusと入力し、Valueにはトゥートしたい内容を入力します。同じように今度はKeyにvisibilityと入力するのですが、Valueにはpublic、unlisted、private、directの4種の中から1つ選んで入力してください。それぞれ、公開、未収載、非公開、DMという意味で、トゥートの公開範囲を決めることができます。ここで注意したいのが、インスタンスごとにBotを使って投稿可能な公開範囲が指定されている場合がある、ということです。詳しくは各インスタンスの管理者に聞くのが一番ですが、マナーとしてpublicでは投稿しないのが無難です。ここまで設定できたら、OKをクリックしましょう。
最後に、投稿する日時を決めましょう。時計アイコンのボタンをクリックするとSchedule setting画面が出ます。ここでScenarioが動作するタイミングを選びます。今回は、毎日午後10時に動作するように設定してみましょう。Run scenarioはEvery dayを選び、Timeは10:00 PMに設定しましょう。各項目を全て説明したい気持ちは山々ですが、それは流石に面倒すぎるので、英単語の意味が分からなければGoogle翻訳に聞きましょう。設定できたらOKをクリックして、左下の各種CONTROLSアイコンの右端のSaveボタンをクリックし、保存完了です。保存をしない限りはScenarioの変更が反映されないので、変更後は必ずクリックしましょう。左上の矢印の隣のIntedration HTTPの部分をクリックすれば、Scenarioの名前を変更することができます。自分なりに分かりやすい名前を付けておくのをオススメします。最後に左上の←をクリックして完了です。
おっと忘れるところでした、動作を自動で行って欲しい場合は必ずScenarioのスイッチをONにしてください!ここがOFFになっていると、いつまで経っても自動で動作してくれません。
###慣れたらどんどんScenarioを改造しよう
ここまで駆け足でやってきましたが、うまくBotは作れましたでしょうか?もし作れなかった場合は、Mastodonで私に質問するもよし、あれこれ試行錯誤して見るもよし、色々試してみてください。ただし、投稿しすぎてインスタンスに迷惑を掛けないように。そこは自己責任でお願いします。過去に、visibilityの設定をpublicにしたままScenarioのスイッチをONにしたら、溜まっていたJobが一気に作動してLTLに30トゥートくらい超爆速で連投するハメになってしまったことがあるので。よいこのみんなは必ずpublic以外を設定しよう。あれこれ試すときは、念のためdirectにした方が安全かも。
そもそも、今回作ったレベルのBotだったら、すでに存在しているMastodonのWebサービスで作れる気がするので、ここからどうやって改造していくかがミソになってきます。例えばTwitterと連携すれば、MastodonのトゥートをTwitterにクローンしてツイートできますし、ただクローンするだけじゃなくIntegromatなら140字以上のトゥートでも、例えばいくつかのツイートに分けて投稿するやり方もあれば、140字以降は切り捨ててトゥートへのリンクをツイートの文末に加えるやり方もあるわけで、自分で工夫してあれやこれやできる訳です。
###(参考)課金プランについて
課金をするとどんないいことがあるの?という疑問が湧いてきたかもしれません。大きい違いはプランによってoperationsの上限が変わることと、Scenarioを実行する間隔を短くすることができることです。operationsのカウントについてですが、Scenario内のmodule1つを動作させるごとに1operationを消費します。例えば20個のmoduleが連結されたScenarioがあるとして、このScenarioが実行されたときに全てのmoduleが動作したら20operationsが消費されます。Scenarioが実行されても、途中でフィルターに引っかかりそれ以上の動作がされなくなったり、エラーが発生して途中でignoreされた場合は必ずしも20operationsが消費されることはなく、途中までのmodule動作分のoperationsが消費される仕組みです。
無料プランは上限が決まっている(1ヶ月最大1,000operations)ので、先程の例のように1日に1回くらいの動作であれば余裕で動かせますが、10分に1回データを取得し、更新があったときのみ最後までScenarioを実行するような設定だとすると、最低でも1(operation)×6(回)×24(h)×30(d)=4,320(operation)となり、毎月$9の課金が必要になります。その代わり、きっちり10分間隔で動いてくれる上に、複雑な動作が可能ですし、サーバーが落ちることも滅多にありません。
##おわりに
それなりにコードが書ける方であれば、そもそもこんなサービスにわざわざ課金せずに自分でコード書いて動かしちゃうよ、って気持ちも分かるのですが、Integromatの良いところは「基本的にノンプログラミングで連携ができちゃう」ってところや「各サービスのAPIといちいちにらめっこする必要がない」ってところなので、細かいところに手が届く的なツールだと思います。
あとは、Integromatに一本化せずとも、簡単な連携はIFTTTで、ちょっと複雑な連携はIntegromat、サービスによってはZapier、という具合に使い分けするのも良さそうです。GAS(GoogleAppsScript)なんかと組み合わせても面白そうですね。とにかく、この手の連携ツールの中では飛び抜けて多機能なので、ちょっと触ってみて気に入った方はいじり倒してくれると嬉しいです。
個人的には、mailhookをトリガーにすることで無駄なoperationsを消費することなく、即時的にScenarioを作動させる方法が気に入っています。あとは、Mastodonのその他のAPIももちろん使えますので、TLを取得してfavしたり、特定のハッシュタグが付いたトゥートを一定時間経過後に削除したり、本当に色んな使い方ができるんです。
というわけで、ノリと勢いだけで書き殴ったので、色々ツッコミどころあるかと思いますが、見つけたらそっと教えてください。あとは、みんなIntegromatを使ってみて、もしいいなって思ったら記事書いてください。ここまでプッシュしてるとなんか怪しいけど、Integromat社からは1銭も受け取ってないです(((
以上、Mastodon Advent Calendar 2017に参加し忘れた人の戯れ言でした。
明日の晩飯はラーメンが食べたいです。
2017/12/23追記
誤字を修正しました。あと、次の日の晩飯はラーメンじゃなくてまぜそばでした。