スプレッドシートとLINEを連携して変更があったら通知する【GAS・IFTTT・Zapier】

今回はスプレッドシートとLINEを連携して送信するっていうことをやっていきたい。発想次第でいろんなことができそうだけど、こんなことをやろうかな。

スプレッドシートとLINE連携
  • スプレッドシート内のボタンをクリックしてLINE送信
  • スプレッドシートの列が追加されたらLINE送信
  • スプレッドシートが更新されたらLINE送信

    スプレッドシートだけの機能ではできなそうだから、GoogleAppsScriptとIFTTT、Zapierを使ってスプレッドシートで何らかの操作をしたらLINEに通知させるっていうことをやっていこう。IFTTTはLINEに送信するアクションが用意されているから、スプレッドシートに列が追加されたり更新されたら通知する際には一番楽かもしれない。

    LINE通知はLINENotifyを使う

    LINE Notify

    スプレッドシートで何か操作をしたらLINEに送信したい!っていうことだけど、LINEに送信するにはLINENotifyっていうやつを使って通知します。このLINENotifyの設定はこっちの記事で書いたから使ったことない人は参考にしてみておくれ。

    アクセストークンをゲットしてLINENotifyアカウントをLINEから追加しておきましょう、

    ボタンをクリックしてGoogleAppsScriptを使ってLINEに送信する

    LINE送信する文言は後で考えるとして、スプレッドシートにボタンをまずは用意しよう。[挿入→図形描画]から図形を作成することができる。

    この作ったボタンをクリックしたらLINEに送信するっていうことをしたいんだけど、送信する文言は選択しているセルの中の文言にしよう。「撃っていいのは、打たれる覚悟のある奴だけだ」と書かれたセルを選択している状態で作成したLINE送信ボタンをクリックするとLINEに送信するようにしたい。

    これはボタンをクリックしたら、LINE送信するGoogleAppsScriptを実行すればできそうだからボタンにスクリプトを割り当てよう。

    GoogleAppsScriptを記述する

    ボタンを用意したからそのボタンをクリックしたら実行するスクリプトを作ろう。[ツール→スクリプトエディタ]からGASを書いていく。

    で今回LINEに送信したいからLINENotifyっていうやつを使うんだけど、これは以下の記事の中で設定方法を書いた。

    LINE送信するにはアクセストークンが必要になってくるから取得しよう。そしたらコードを書いていく。

    const sendLine = (body, lineToken) => {
      let options ={
            "method"  : "post",
            "payload" : {
              'message': body
             },
            "headers" : {"Authorization" : "Bearer "+ lineToken}  
          };
      UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
    }
    
    const getValue = () => {
      var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = spreadsheet.getActiveSheet();
      return sheet.getActiveCell().getValue();
    }
    
    const main = () => {
      const lineToken = "xxxxxxxxxxxxxxxxxxxxx"; //LINE notify token
      const val = getValue()
      if (!val) {
        return
      }
    
      sendLine(val, lineToken)
    }
    

    これで送りたい文言が記載されているセルを選択して、LINE送信ボタンをクリックすると選択しているセルの文言がLINEに送信されるはず。ボタンの右側をクリックして[スクリプト割り当て]からmainを入力してOK。

    これでボタンをクリックしたらスクリプトが実行されてLINEに送信されると思うから見てみよう。セルを選択してボタンをクリックすると、LINENotifyからメッセージが来ますね。

    LINEを覗いてみるとこんな風に来ている。

    うまいこと動くGASを書いてしまえば、スプレッドシートとGASだけでいろいろできそうでいいよね。LINEの送信を今回はやっているけど、Slackなんかにも送ることができるから結構便利。スプレッドシートは仕事なんかで結構使いそうだから仕事で役立ちそう。

    関連記事

    スプレッドシート関連でもいくつか記事書いた気がした。

    IFTTTを使ってLINEに送信する

    IFTTTを使えば、特にコードを書かなくてもいろんなサービスを連携して目的の動作をさせることができたりする。IFTTTってなんだよ?っていう場合にはこっちの記事を見ておくといいかもしれない。

    で今回はスプレッドシートとLINEを連携して使うんだけど、自分でコードを書かない分できることは限られてくる。スプレッドシートに何か操作があったらLINEに通知したい!って思うけど、その操作っていうのが限られますね。これがIFTTTがスプレッドシートで受け取ることのできる操作。

    これを見る限りできることはこんな感じだろうか。

    IFTTTでできそうなスプレッドシート×LINE連携
    • フォルダに新しいスプレッドシートが追加されたらLINE通知
    • 新しいワークシートがスプレッドシートに追加されたらLINE通知
    • 新しい行がスプレッドシートに追加されたらLINE通知
    • 特定のセルが更新されたらLINE通知

      うーん、割と使えそうなのは「新しい行がスプレッドシートに追加されたらLINE通知」「特定のセルが更新されたらLINE通知」かな。ここでは新しい行がスプレッドシートに追加されたらLINE通知っていうのをやっていこう。

      新しい行がスプレッドシートに追加されたらLINEに通知する

      IFTTTにアクセスしたら、CreateボタンからAppletsを作成しよう。

      まずはIf Thisをクリックして、何が起きたらっていうのをセットする。今回はスプレッドシートで列が追加されたら・・・っていうのをしたいからスプレッドシートから「New row added to spreadsheet」を選択しよう。

      ここで対象となるスプレッドシートを設定するんだけど、パスとファイルネームを記載する方式とURLを記載する方式があるね。面倒だからURLコピペした。

      次はThen Thatの方でLINEに送信するやつを追加する。

      ConnectでIFTTTとLINEを連携できる。そしたらLINEでどんなメッセージを送るかなんだけど、Message欄に好きな文言を入れればOK。「Add Ingredient」からいろんな要素を追加することができるけど、これはスプレッドシートで何か入力しながらどの項目がどれに対応するのかっていうのは見たほうがよさそうです。

      ちなみに今回のメッセージはこんな感じでやることにする。

      終わったら[Continue]から[Finish]で作成完了。

      作成し終わったので、スプレッドシートで何か値を入力してみよう。するとLINEに通知が来ますね。

      ただこれ29行目に入力したのに27とか28行目のメッセージも来ちゃってますね。空行も追加されたとみなすのだろうか。うーーーん。Add filterでfilter追加すれば除去できそうだけど、これ無料だと使えないみたいだから残念です。。

       

      IFTTT便利だけど、やはりコードで書くときの柔軟性はないから自分の求めている操作がある場合には使ってみるといいかもしれない。ちなみにIFTTTはスマホアプリでも使える。

      IFTTT

      IFTTT
      開発元:IFTTT
      無料
      posted withアプリーチ

      スマホでIFTTTを使ったものだと、ショートカットと連携してちょっと便利そうなこともできたりしますね。

      Zapierを使ってLINEに送信する

      次はZapierを使った方法。ZapierもIFTTTと同じようなものなんだけど、「Zapier?よくわからん、なんそれ」っていう場合にはこっちでも見ておいてくれ。

      Zapierなんだけど、トリガーとして設定できる項目はこんな感じ。

      IFTTTと同じような感じだね。「New or Updated Spreadsheet Row」っていうのをここでは試してみよう。対象のスプレッドシートとトリガーとなるカラムを選択する。

      カラムは指定してもいいけど、指定しないとどの行に変更があっても検知できるようだから何も指定せずにany_columnでいこう。

      Code by ZapierでLINEに送信するコードを書く

      ZapierではLINEと連携して云々っていうのはできなそうなので(LINEが見当たらない)、コードを実行してLINEに送信するっていうことをやります。ActionのCode by ZapierではJavaScriptかPythonを選んで実行することができるから好きな方で書けばOK。

      でコードを書いていくんだけど、以前こっちの記事で似たようなことをやっていたからこっちのコードをほとんどコピペでやってしまおう。

      Zapierで書くコードZapierで何ができるのか気にして書かないといけないからちょっと面倒かもしれん。

      fetch('https://notify-api.line.me/api/notify', {
              method: 'POST',
              headers: {
                'Authorization': 'Bearer' + ' ' + '取得したアクセストークン',
                'Content-Type': 'application/x-www-form-urlencoded'
              },
              body: `message=${inputData.message}`
          })
          .then(function(res) {
            return res.json();
          }).then(function(json) {
            callback(null, json);
          });

      コードを書いて作成が終わったらスプレッドシートに何か値を入力してLINEに通知が来るか確認してみる。

      しばらくするとLINEに通知が来るね。

      ただ14とか15とか16とか入力がない行まで通知が来てしまっていますね。これはIFTTTでも同じ現象起きたんだけど、今回入力してみたのは18行目で14行目からは入力が空なんですよね。

      これZapierよく見たら書いてありましたね。

      Trigger on changes to cells in this column only. Leave this field blank if you want the Zap to trigger on changes to any cell within the row. Please note: All new rows will trigger the Zap even if the Trigger column is empty. Add a Filter step to stop the Zap from continuing if this column is empty in a new row.

      Filter追加しろってあるからActionからFilter選択して追加してやればいいんだけど、これやるとActionが3つになってしまって無料プランだと有効化できない・・・

      うーん悲しい。。。

      無料でスプレッドシートに変更があったら通知したいなら・・・

      IFTTTとZapier使ってスプレッドシートに列が追加されたり、更新されたらLINE通知するっていうことをやってみたけど、無料の範囲だとちょっと使いづらいなあ・・・っていうのが個人的なところ(空の値まで検知してしまったりね)。このままでは終わりたくないからもうちょっと良い方法を考えよう。スプレッドシートに変更があった時に無料でLINEに通知したい・・・!っていうときに困ってしまう。

      GASのトリガーを使ってスプレッドシート変更時にLINE通知する

      GASにはトリガーっていう何かが起きたら指定した関数を実行するっていう機能がある。だからこれを使ってスプレッドシートに変更があったらLINE通知する関数を実行するっていうことを行えばできるはずだ。ちょっとコードを改造して入力のあったセルの値や行を取得してLINEに送信するコードにしよう。

      const sendLine = (cell, lineToken) => {
        let options ={
              "method"  : "post",
              "payload" : {
                'message': 
                "入力:" + cell.getValue() + "\n" +
                "行:" + cell.getRow() + "\n" +
                "列" + cell.getColumn()
               },
              "headers" : {"Authorization" : "Bearer "+ lineToken}  
            };
        UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
      }
      
      const getWritedCell = () => {
        var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
        var sheet = spreadsheet.getActiveSheet();
        return sheet.getActiveCell();
      }
      
      const main = () => {
        const lineToken = "アクセストークン"; //LINE notify token
        const cell = getWritedCell()
      
        sendLine(cell, lineToken)
      }
      

      コードを書いたらトリガーを設定する。

      • 実行する関数を選択・・・main
      • イベントのソース・・・スプレッドシートから
      • イベントの種類を選択・・・変更時

      これでスプレッドシートをいじってLINEに通知が来るか確かめてみる。

      LINE通知入力したら来ましたね。

      そしてやはりIFTTTやZapier使うよりも通知の来る速度が段違いに速くて素晴らしい。やはりプログラム書いていろいろいじった方がいいな・・・もしやるならコードは色々変えてみるといいですね。

      まとめ

      ちょっといろいろやってみたけどやっぱりGoogleAppsScript使うのが個人的に一番良いな。自分の好きな操作をさせることができるし通知が来る速度も速い。ただコード書きたくねえ・・・っていう場合にはIFTTTやZapier便利だから使うのもありかなあ。ちなみに今回やってみたのはこんな感じ。

      • スプレッドシート内のボタンをクリックして選択したセルの内容をLINE通知(GAS)
      • 新しい行を追加したらLINE通知(IFTTT)
      • 更新されたりしたらLINE通知(Zapier)
      • セルの値を変更したらLINE通知(GAS)

      やり方はいろいろありそうだけど、柔軟にできるのはやっぱりコードを書いてやることだと思う。グーグル系のサービス使う場合にはGoogleAppsScript使えるね。

      関連記事

      おすすめの記事