【パパ必見】おつかい上手になるためのアプリ　#ローコード #GAS #LINE

##「おつかいアプリ」#

<font color="Red">**今回は色々と頼まれごとの多いパパのためのアプリを作ってみました！
その名も、「おつかいアプリ」！（パシリアプリ！）
これでもう、しょうもない買い損ねは発生しない！はず！**</font>

https://twitter.com/taka_xedge/status/1460402655969243138?s=20

上記の動画だと「みかん」攻めにあってますが、品目部分は可変です。
LINEで入力された内容がスプレッドシートに格納されますが、入力にはちょっとしたルールがあります。

![Inked画像4_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2122173/464c9d93-4ca0-294a-38ab-cc7512910519.jpeg)
<img width="500" alt="画像5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2122173/e9afee50-7f31-354a-5143-b84c8a60fc78.png">



**<font color="blue">＜使い方/ルール＞</font>**

<font color="blue">ママ：ふと気づいたとき、LINEに**「＋」を付けて**買ってきてほしいものを投稿。（するとスプレッドシートに自動的に行が追加されていきます）</font>


<font color="blue">パパ：仕事帰りや週末にスプレッドシートをみながら購入。購入したらチェック。その場で買えないものは「近日中に買います」でも選択しておきましょう。</font>


<font color="blue">※**「＋」を付けずにテキトーな文字を送信すればスプレッドシートのリンクが返ってくる**ので、そちらで最新のおつかいリストを確認できます。</font>

図にすると、こんな感じです。↓

<img width="500" alt="画像3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2122173/44f62785-fe9a-d0e8-4d0d-c8b7e1c7f4b2.png">


##企画の背景##

僕はよく妻の書いたメモを片手にイ〇ンやマツ〇ヨに買い出しにいくわけですが、まぁまぁよく買い損ねます。

そもそも、メモする時点で書き損ねるってこともありますよね。お互い人間なので致し方ないことです。

そこで、<font color="Red">**買わないといけないものを日常的に（気づいたときに）LINEに放り込んでおいて、勝手にスプレッドシートでチェックリスト化されるツール**</font>があれば、双方のミスを減らせるのではないかと考えました。

僕は一覧を観ながら買い物できるので、これでもう<font color="Red">**漏れ安心**</font>です:angel_tone2:

今回は<font color="Red">**GASとLINEmessagingAPI**</font>を使ってみました。


##ベース##

LINEのメッセージをスプレッドシートに自動追加する方法はすでにありましたので参考にさせていただきました。リスペクト:pray:

https://chusotsu-program.com/line-gas/

##修正手順##

①「$」で始まる場合は処理を行うというものだったので「＋」に変更しました。
②「$」で始まる場合は処理を終了してしまう仕様だったので、スプレッドシートのURLを返す仕様に変更しました。
③スプレッドシート側にチェック欄を設けました。チェックボックスを30行分とかあらかじめ用意しておくと、GASの「最終行に追加」を邪魔してしまうので、プルダウンにしています。

##ソースコード(GAS)##

```js
var ACCESS_TOKEN = "★★★アクセストークン★★★"
var URL = 'https://api.line.me/v2/bot/message/reply'; // 応答メッセージ用のAPI URL

function doPost(e) {
  // 投稿されたメッセージを取得
  var userMessage = JSON.parse(e.postData.contents).events[0].message.text;
  var post_message = "";

  var json = JSON.parse(e.postData.contents);
  var reply_token = json.events[0].replyToken;
  if (typeof reply_token === 'undefined') {
    return;
  }
   
  if(userMessage.match(/^\＋/)) {
    // ＋から始まるメッセージの場合、＋を除いた文字列を再代入
    userMessage = userMessage.substr(1);
  } else {
    // ＋から始まらない場合はURLを返却する
     {
        post_message = 'https://docs.google.com/spreadsheets/d/★★★スプレッドシートのID★★★/edit#gid=0';
    }

    UrlFetchApp.fetch(URL, {
        'headers': {
            'Content-Type': 'application/json; charset=UTF-8',
            'Authorization': 'Bearer ' + ACCESS_TOKEN,
        },
        'method': 'post',
        'payload': JSON.stringify({
            'replyToken': reply_token,
            'messages': [{
                'type': 'text',
                'text': post_message,
            }],
        }),
    });
    return ContentService.createTextOutput(JSON.stringify({ 'content': 'post ok' })).setMimeType(ContentService.MimeType.JSON);

  }
   
  // スプレッドシートへ保存=======================================
  var response = e.postData.getDataAsString();
  var spreadsheetId = "";
  var sheetName = "log";
  var spreadsheet = SpreadsheetApp.openById('★★★スプレッドシートのID★★★');
  var sheet = spreadsheet.getSheetByName('★★★シートの名前★★★');
 
  // 空白・タブ・改行で区切り配列に変換  
  var arr = userMessage.split(/\s/);
 
  // 配列の先頭に日時を代入
    arr.unshift(new Date());
 
  // セルの最下部に配列を転記
  sheet.appendRow(arr);
  // =======================================
 
  return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
 
}

```

##使用感##

実際に使用してみて、（僕側に）欠点が見つかったので、改善のための追加機能をつけました。
別記事にしていますので、よろしければご覧ください。

https://qiita.com/TAKA_xedge/items/9a8915e76185a0c979ed