IFTTT + Gasで簡単にLINE連携ができるようになった

## はじめに
最近、**IFTTT**というサービスを利用したローコード開発が流行っているみたいです。
あったら便利だなと思っていた**ゴミ出しの通知**を解説している記事[^1]を見かけたので、自分も作ってみました。
[^1]: 参考記事：[燃えないゴミの日をLINEで通知する](https://qiita.com/shinjimorimoto/items/dac2584230a71357dc84)
今まではLINEと連携するにはLine Developersでボットを作成して、Messaging Apiを利用して通知しなければならなかったので、かなり簡単になったと思います。
手軽に実際のサービス同士の連携を体感したり、簡単なプログラミング入門におすすめです。

## 使用サービスについて
### IFTTT
以下は公式のヘルプから翻訳したものの抜粋です。
> お気に入りのアプリやデバイスを接続、統合、自動化します。IFTTTで簡単にできます。
IFTTTとは、If This Then Thatの略で、アプリやデバイス、サービスを統合するための最適な方法です。IFTTTは、お気に入りのスマートホームデバイス、セキュリティシステム、ソーシャルメディア、その他のインターネット対応サービスが、新しく強力な方法で連携するのを支援します。

> IFTTTは、「あらゆるものは一緒に使うとより良く機能する」という信念に基づいて設立されました。スマートホームを構築したり、生活の中に自動化された習慣を作ろうとする人にとって、技術的な非互換性は困難なものになっています。IFTTTはそれを簡単にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379491/932afc42-579f-b08d-7d7f-73afc8319076.png)

> 各サービスには、トリガー（If then）とアクション（that that）の組み合わせが用意されています。このトリガーとアクションを組み合わせることで、目標達成や効率化、スマートホームの向上に役立つ自動化を実現することができます。使いたいサービスがIFTTTに登録されているかどうかをチェックしてみましょう。

このように、さまざまなサービス同士をローコードで簡単に連携させることができるのがこのサービスの特徴です。
ちなみに、読み方は**イフト**になります。
> 私たちの名前は、"Gift "から "G "を取り除いたような発音をします。

### GAS (Google Apps Script)
[Google](https://developers.google.com/gsuite/aspects/appsscript?hl=ja)が提供するJavaScriptベースのスクリプト言語でGoogleドキュメントやスプレッドシートから拡張できます。
個人的にはOfficeとVBAがクラウドになったような感覚だと思っています。
ブラウザベースでのコードエディタが用意されており、VSCodeまでの利便性はないですが自動フォーマットや定義への移動など、最低限の機能が揃っています。
スクリプトはGoogleのサーバーで実行されるので、自分でサーバーを用意する必要がない点が手軽でよいと思います。

## ゴミ出しの通知について
我が家では前日に出すゴミを用意するので、目的のゴミ出しの内容を前日の22時くらいにLINEで知らせるようにします。
上記の使用サービスの組み合わせは以下のようになります。

1. Gasからスプレッドシートに登録されたゴミ出しの内容をPost
1. IFTTTでPostされた内容をトリガーとする
1. IFTTTのアクションからLINEにSend Message
1. LINEの**明日のゴミ出し**グループに通知される

では実際に上記の流れになるように各サービスを構築していきます。

### IFTTTの構築
#### IFTTTの登録
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379491/8a2b48d8-acd8-cf32-c204-b0a7d4752fe0.png)

https://ifttt.com/

トップページの**Start for free**から登録して始めます。

#### アプレットの作成
ホーム画面の右上にある**Create**ボタンからアプレットを作成します。

#### トリガーの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379491/06e0c6ae-4391-4b30-4b41-2fbab40bfd54.png)
トリガーとなるサービスはGasからのPostとしたいので**Webhooks**を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379491/b3e4a94d-e912-d7a5-2e59-a9840c7d8831.png)
受け取る内容はゴミ出しの種類だけなので、右を選択します。

#### アクションの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379491/0b53a615-dbaf-3044-0cfb-7158dedc3fb8.png)
アクションで利用するサービスはLINEです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379491/58c01e4c-a268-f48d-5a45-6d2e988a5071.png)
LINEで通知を受け取るためにあらかじめグループを作成しておく必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379491/a11fb9eb-2d25-dcc6-50fa-28ba8f2db5ab.png)
**Recipient**の項目に作成しておいたグループを設定します。
**Message**にGasでPostされた内容を表示するようにします。

#### IFTTTでの構築が完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379491/288743a0-5fb7-1704-bfb8-02e9974d95bf.png)

#### Webhooksのアドレスを取得
トリガーとなるWebhookのアドレスを取得します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379491/44a632f1-f266-c131-744d-4e2195c15ac9.png)
ホーム画面からExplore -> Webhooksと遷移し、Dobcumentationボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379491/9b4616f5-a8cd-477f-32b4-1b1c79814b75.png)

遷移後の画面で表示される`https://maker.ifttt.com/trigger/{event}/with/key/{Your key}`が目的のアドレスになります。
また、このページでは`crul`のコマンドが利用できるので、Webhooksの動作テストが行えます。

### Gasの構築
#### スプレッドシートの作成
まず各曜日ごとのゴミ出しの種類をスプレッドシートに作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379491/2a45fab8-6e09-9646-53ba-a8fcdd5d0351.png)

#### スクリプトの作成
スクリプトの作成は上記のスプレッドシートのメニュー(拡張機能 - Apps Script)から遷移した画面で行います。

```javascript:trashEventReminder
function trashEventReminder() {
  var sheet = SpreadsheetApp.getActiveSheet(); // シートを取得
  var trashEvent = sheet.getDataRange().getValues()[new Date().getDay() + 1][1]; // 曜日からゴミ出しの種類を取得
  if (trashEvent === "") return;
  var url = "https://maker.ifttt.com/trigger/{event}/with/key/{Your key}?value1=" + trashEvent;
  UrlFetchApp.fetch(url);
}
```

URLはIFTTTで取得したWebhooksのアドレスになります。

#### トリガーの設定
作成したスクリプトを走らせるトリガーを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379491/7725291f-41e8-98ab-9807-e0705d3c3be8.png)
右下の**トリガーを追加**ボタンから以下のように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379491/56f1c5f3-aa55-dfd0-e8ba-44fcb7172413.png)
これで毎日午後10時くらいにスクリプトが走る設定が完了しました。

### LINEでの受け取り
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379491/f4f4e47a-1588-5ddd-c1c2-c7a679b356ef.png)
指定の時間に翌日のゴミ出しの種類が通知されました！

## まとめ
今回IFTTTを利用してかなり簡単にサービスの連携ができることが実感できました。
やはり、LINE連携がノーコードで簡単に構築できる点がとてもよかったと思います。
今回は最初のトリガーはGasを利用しましたが、他のサービスを利用すれば完全にノーコードで上記の通知システムは構築できそうです。

無料では5個のアプレットが利用できるようなので、色々と試してみたいです。