全国の会計係に捧ぐ #GAS #JavaScript #合唱 #会計

## 会計係は取り立て屋さんじゃない！！

私は、とある合唱団に所属しており、そこで活動費を管理する会計を担当しています。
施設使用料や楽譜購入などの支払い、各団員からの団費の徴収が主な仕事です。

色々と面倒と思うことはあるのですが、中でもとりわけ面倒なのが **「団費支払いの督促」** です。
支払っていないのが先輩や目上の方だと、面倒に気まずさもプラスされます。
それなのに徴収をしっかり行うようにと他の団員からは言われたりします……。

支払っていないほうがいけないのに、督促しすぎると煙たがられ、
しっかり払っている他の団員にも申し訳なく……。
同じ思いをしている会計さん、結構いるのではないでしょうか？
<font color="Red">本当に全国の会計係さん日々お疲れさまです！！</font>

**合唱に集中したい！
こんな面倒で気まずくて嫌われ役になる督促なんてしたくない！**

そんな思いから、<font color="Red">**支払い状況を定期的にチェックし、自動でLINEにメッセージを送る機能**</font>を作りました！！

## LINEメッセージが送られてくる様子
未払いが多いとちょっと鬱陶しいです。

https://twitter.com/kk_puruzera/status/1460550088548184071?s=20



## 機能の仕組み
**【前提】**
・Googleスプレッドシートはリンク先を知っているユーザーに公開にしておく。
・[Integromat](https://www.integromat.com/en)にID登録しておく。
（GitHub、Google、Facebookの各アカウントでログイン可能です。）
・[LINENotify](https://notify-bot.line.me/ja/)に登録しておく。
（普段使用しているLINEアカウントでログインしてください。）
<font color="Red">・団員に自動メッセージでのお知らせを伝えておく。（ここわりと重要）</font>
・LINENotifyを合唱団のLINEグループに登録しておく。

**【仕組み】**
1.GoogleスプレッドシートのA列に団員名、1行目に年度を記入。
（うちの団は上期下期で2回徴収があるので上期下期を分けて記載しています。）
3.GoogleAppsScriptでスプレッドシートの空欄チェックを行うコードを作成。
4.プロジェクトのトリガーで月に一度実行するよう設定。
（今回は毎月20日に設定。1日にしていたけど元旦から督促は嫌だろうなぁ、と思い変更。）
5.Integromatを使用。webhookで空欄チェック結果を渡す。
6.webhookで受け取った内容をLINEに渡す。
7.LINENotifyでLINEにメッセージ送信。

**【概要図】**
![11171.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2122198/dca73522-45a9-4729-a2c2-564f09e38937.jpeg)

## 注意したいこと
Googleスプレッドシートに何かしらの値が入っていると「支払われた」と判断するため、
<font color="Red">スプレッドシートは限られた人のみ更新可能</font>としておいたほうがいいです。
逆に、更新されないと未払い判定されてしまうため、<font color="Red">徴収後は速やかに更新</font>しましょう。

## 得られた効果
**・気がとーっても楽になった！**
特に先輩に督促するときは気が重かったのですが、「自動メッセージです」としていれば自分ではない何かからの連絡となるので、本当に気が楽になりました。何回も督促するの本当にイヤだったんですよ……。よくやった私！！

**・他の役員にも状況を見てもらえる**
団員に公表する前に、団の役員に見せたところ「まだ払ってない人がいたのか！」という感想をもらいました。
誰がどのくらい滞納しているのか、他の役員にも知ってもらえるよい機会になりました。

**・別の仕事に集中できる**
督促は勝手にやってくれるので、団費の管理やその他の支払いにだけ集中できるようになりました。
より合唱練習に集中できるようになって良いことだらけです。

ローコード、ノーコードを意識して開発しましたが、こんな便利なものが作れるとは！
ちょっとの工夫で課題解決できるっていいですねぇ。

## 使用したもの
・Googleスプレッドシート
・GoogleAppsScript
・[Integromat](https://www.integromat.com/en)
・[LINENotify](https://notify-bot.line.me/ja/)

## GASコード
今回はコードはこれしか書いていません。
あとはGoogleAppsScriptとIntegromatの設定だけ！便利なものが多くて助かります～。

```js
function tokusoku() {
  // URLを使用してスプレッドシートを開き、その名前を記録します。
  // スプレッドシートはクライアント側で物理的に開かれずサーバー上でのみ開かれる。
  var ss = SpreadsheetApp.openByUrl('スプレッドシートのURL');
  
  var sheet = ss.getSheetByName("シート1");
  const lastRow = sheet.getLastRow(); // データの入っている最終行
  const lastColumn = sheet.getLastColumn(); // データの入っている最終列

  // B列目～データが入っている列が終わるまで
  for(let i = 2; i <= lastColumn; i++) {
    // 2行目～データ入っている行が終わるまで
    for(let p = 2; p <= lastRow; p++) {
      var kiroku = sheet.getRange(p,i).getValue();
      if (kiroku === ''){
        var name = sheet.getRange(p,1).getValue(); // 名前を取得
        var nend = sheet.getRange(1,i).getValue(); // 未払い年度を取得
        Logger.log(name + 'さん' + nend + 'の団費が未払いです。会計係に連絡してください。'); // このログは出さなくてもよい
        const URL = 'integromatのWebhookのURL?name=' + name + '&nend=' + nend; // WebhookのURL
        const res = UrlFetchApp.fetch(URL);
      }      
    }
  }
}
```

## 完成までのあれこれと参考先
例によってZennにまとめていますのでこちらをご覧ください。
参考URLもこちらに記載しています。

https://zenn.dev/puruzera/scraps/8f2771821351ef

## 反省会
ここからはお時間のある方のみどうぞ。

**・Googleスプレッドシートの更新チェックしたい**
スプレッドシートに値が入ると支払いOKと判定されるため、勝手に更新されても気づけるように「スプレッドシートが更新されたら通知する」仕組みと作りたいと思います。

**・メッセージをまとめたい**
未払いがなければいいんですが、多いと動画のようにメッセージがどんどこやってきます。
1人分のメッセージはまとめたいです。
支払いしていない年度をテキスト追加していけばいけそうです。
が、そもそもそんなに滞納しないでほしいです。（正論）

**・LINEBotにすればもっとメッセージ感がでるけど・・・**
仕様上メッセージの頭に[Integromat]と出てしまいます。
LINEBotにすれば出ないそうですが、<font color="Red">LINEBotはLINEグループトークに登録できません。</font>
うーん、痛し痒し……。

団員の意見も聞いてバージョンアップを図っていこうと思います。