トレーニングLINE Botで憧れの体型に？！初めてのLINE Bot作成🌟

LINE Botって便利ですよね！
再配達の依頼ができたり、お得な情報が配信されたり、おしゃべりできたり。
この記事は、プログラミングを学んだことの無い素人が1週間＋αでLINEbot作りに奔走した記録です。
現時点でどこまで作れたかをお知らせします！

## 1週間でできたLINE Botがこちら

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">トレーニング予定を教えてくれるLINEbotが何とかできました…！ <a href="https://twitter.com/hashtag/protoout?src=hash&amp;ref_src=twsrc%5Etfw">#protoout</a>　<a href="https://twitter.com/hashtag/linebot?src=hash&amp;ref_src=twsrc%5Etfw">#linebot</a> <a href="https://t.co/g55scQrpTn">pic.twitter.com/g55scQrpTn</a></p>&mdash; Narumi Ishii (@Rs_n_ishii) <a href="https://twitter.com/Rs_n_ishii/status/1676474038984785922?ref_src=twsrc%5Etfw">July 5, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


このLINE Botでは、日付を送るとあらかじめ作っておいたスプレッドシートを、呼び出して、その日に計画されているトレーニング内容を教えてくれるというものです。
なんとなく形になりました！！！とりあえず嬉しいです！！！

## さらに4日経って修正したLINE Botがこちら
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">何とか修正して、トレーニングbotとYES･NO君を一緒にできました…！！！🥹<br><br>この日は、筋トレしたくないのは認めてくれたけど、ケーキはダメだと言われました笑<a href="https://twitter.com/hashtag/protoout?src=hash&amp;ref_src=twsrc%5Etfw">#protoout</a> <a href="https://t.co/a2QN8OL5vb">pic.twitter.com/a2QN8OL5vb</a></p>&mdash; Narumi Ishii (@Rs_n_ishii) <a href="https://twitter.com/Rs_n_ishii/status/1677949516572663808?ref_src=twsrc%5Etfw">July 9, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">トレーニングをやったかを確認するメッセージも定時に送れるようになりました！<br><br>毎日、決まった時間に確認してくれます😌<a href="https://twitter.com/hashtag/protoout?src=hash&amp;ref_src=twsrc%5Etfw">#protoout</a> <a href="https://t.co/5TyzCSXBRU">pic.twitter.com/5TyzCSXBRU</a></p>&mdash; Narumi Ishii (@Rs_n_ishii) <a href="https://twitter.com/Rs_n_ishii/status/1677951123947409409?ref_src=twsrc%5Etfw">July 9, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

課題を修正して何とか理想の形にできました！
1\. 日付を入力するとその日のトレーニング予定を教えてくれる（初期でクリア）
2\. 日付以外を入力するとランダムでYES・NOを返してくる(初期課題１）⇒修正後クリア
3\. 決まった時間にリマインドしてくれる（初期課題２）⇒修正後クリア

初期のシナリオと修正後のシナリオについて下記に記します。




## なぜLINE Botのテーマをトレーニングのリマインドにしたのか
<img width="300" src="https://2.bp.blogspot.com/-VNrRiSYpsyc/W5IARYQyteI/AAAAAAABOzU/DHVOkH-saI0ZuOumDhgGCHVSo5tmVoKmQCLcBGAs/s800/undou_squat_woman.png">

リマインド系のBotであれば、業務のシフトなどを最初に思いましたが、
私に今必要なのは何か、を考えた結果、**運動の習慣**でした…
コロナ禍では在宅勤務や出張控えが多くなり、外出する機会が減り、大きく成長しました。
さらに、コロナが落ち着いてきた今、外食する機会が増え、さらに大きく成長しました。
いつも運動しないと！と思っていても忘れてしまう…それを毎日使うLINEでリマインドされれば一度決意した計画を実行することができるのでは？！という思いの元、作成することにしました。


## やりたかったこと
私が今回のLINE Botを作成する上でやりたかったことは次の3点です。
1\. 日付を入力するとその日のトレーニング予定を教えてくれる
2\. 日付以外(弱音など）を入力するとランダムでYES・NOを返してくる
3\. 決まった時間にリマインドしてくれる

**結果、１週間でちゃんと実現できたのは１のみでした。**
２はエラーが続き、実装できず、
３は1週間ではやり方がわからず…

やりたかった２のイメージ
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">トレーニングBotにつなげたかったYesNo君…<a href="https://twitter.com/hashtag/protoout?src=hash&amp;ref_src=twsrc%5Etfw">#protoout</a> <a href="https://twitter.com/hashtag/linebot?src=hash&amp;ref_src=twsrc%5Etfw">#linebot</a> <a href="https://t.co/4r32AdShnu">pic.twitter.com/4r32AdShnu</a></p>&mdash; Narumi Ishii (@Rs_n_ishii) <a href="https://twitter.com/Rs_n_ishii/status/1676475800953196544?ref_src=twsrc%5Etfw">July 5, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


「やりたくないな…」とか「ケーキ食べたいな」とかを送ると、ランダムで「YES」か「NO」が返ってくる仕組みを入れる予定でした…が、
~~現時点で、なぜかエラーは出ずに、LINEに返事が来ないという悲しい現象が起きている状態です。
連結しなかったらできているのであと一歩でしょうか😥
２と３については今後の課題としました！~~
**無事、解決しました！**
　⇒「初期のシナリオ」と「修正後のシナリオ」にて解決方法を記します！


## 初期のシナリオ
<img width="1000" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478655/984ac5dc-a380-56f5-e4e5-f4cbe7e53e45.png">
（※分岐した下側の「YesNo」の部分は前述したように、なぜが動きません。）

こちらの記事を参考に作成しました。
88Eqvさんの記事
[勤怠リマインドしてほしい！文系初心者のノーコードLINEbot作成録（Make）](https://qiita.com/88Eqv/items/9ca66d28599b9712b9b9)

### 使ったもの


* [LINE Developers](https://developers.line.biz/ja/)　(公式LINEの作成、API連携設定）
* [Make](https://www.make.com/en)　（API連携の設定）
* [Googleスプレッドシート](https://www.google.com/intl/ja/sheets/about/)（トレーニング予定の書き込み）
* [SSSAPI](https://sssapi.app/)（スプレッドシートのAPI化）
* [Yes No API](https://yesno.wtf/)

あらかじめトレーニング予定を入力したGoogleスプレッドシートをSSSAPIでAPI化し、それを連携する流れです。

### 初期モジュールの中身
![トレーニング予定初期.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478655/b7005fa9-e25f-c119-b849-33044cd0f8ce.png)

スプレッドシートに入っていない文言(日付）を入力した場合は図のように分岐する作りです。
![YESNO初期.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478655/1c79ac29-f78b-ba51-bdda-b762e6b2b72c.png)

しかし、こちらのシナリオでは下の分岐の内容がLINEに反映されず、エラー表示も出ないため、私の知識では原因を見つけることができませんでした。

そこで、
rbmktstさんの記事
[お酒の種類をつぶやくだけで、適量を教えてくれるLINE Botを作ってみた](https://qiita.com/rbmktst/items/aa3b2862ae2811607e52)
を参考に、再度シナリオを作り直してみることにしました。



## 修正後のシナリオ
<img width="1000" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478655/f372bebb-9548-dbdf-ec15-67a06feec231.png">


### 修正後に使ったもの

* [LINE Developers](https://developers.line.biz/ja/)　(公式LINEの作成、API連携設定）
* [Make](https://www.make.com/en)　（API連携の設定）
* [Googleスプレッドシート](https://www.google.com/intl/ja/sheets/about/)（トレーニング予定の書き込み）
* [Yes No API](https://yesno.wtf/)


**SSSAPIを使用するのをやめて、直接Googleスプレッドシートのモジュールで連携する**ことにしてみました。


### 修正後のモジュールの中身

![トレーニング予定のシナリオ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478655/9aaf5d1c-acb7-6542-cbcc-385cc31d785c.png)

分岐は修正前と全く同じ内容で作成しました。
![YESNOのシナリオ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478655/92d82fa4-16cd-03cb-abc2-83732f72f575.png)

これでエラーなく、「やりたかったこと」の
１：日付を入力するとその日のトレーニング予定を教えてくれる（初期でクリア）
３：決まった時間にリマインドしてくれる（初期課題2）⇒修正後クリア
がクリアできました。

このシナリオで成功できたので、
初期シナリオのエラーについて、問題だったのはSSSAPIとの連携の部分だったのかもしれません。

## 決まった時間にメッセージを送る
残すところは
２：決まった時間にリマインドしてくれる（初期課題1）です。

上記とは別のシナリオを作成することにしました。

### スケジュール設定のシナリオ
![リマインドのモジュール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478655/6648f158-396c-841a-d20e-af62d24f3af0.png)
一つだけです。
ただ、前述のメインのシナリオとは違い、使用しているモジュールは
**「Send a Push Message」** です。


### スケジュール設定のモジュールの中身
![スケジュール設定１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478655/b7007cdf-40bd-6321-a25e-e20f7b3eba27.png)
・時計のマークを押して、どのくらいの頻度で、いつメッセージを送るか設定します。
・「to」の部分にLINEのアカウントIDを入力しメッセージの送信先を設定します。
・送りたいメッセージの文言を、textの部分に入力します。

これで完了です！一番簡単でした。

ちなみに、メッセージの送信予定は、モジュールの時計のマークからではなく、シナリオの設定画面からでも設定することができました。
![スケジュール設定２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478655/0d4e5b87-d1b5-c0cf-0e58-c8f1f50e9db5.png)







## 全体を通しての作成手順

主な作成方法は、**真似をする**です。
Qiitaでいろんな先人の記事を読み漁り、使えそうな方法を真似させていただきました！
ありがとうございます！
今回の制作の中で一番大事なポイントと言っても過言ではありません。

大まかな流れとしては、
1\. LINEdeveloperで公式LINEを作成する
2\. フリーで使えそうなAPIを探す
3\. Makeというモジュールで感覚的にプログラミング的な作業が出来るツールをLINEに連携してbotを動かす
4\. 自分のやりたいことと似ている記事をQiitaで探す 

といった感じです。


イメージしていたプログラミングは、**真っ黒な背景に英数字の羅列**、と思っていましたが、こんなにかわいくできるとは思っていませんでした。
動かすのもぼよんぼよんってしててかわいいので、初心者でも苦手意識が軽減されました！

見てわかるように、たったこれだけ。簡単です。
**いや、簡単ですが、全然簡単じゃなった・・・。**
プログラミングが全く分からなくても、なんとなくできてしまうのが素晴らしい！！！
なんですが、エラーの連続…

## よく起きたエラー原因
<img width="300" src=https://4.bp.blogspot.com/-_iUvNtQ49LE/WWxNfpDLUoI/AAAAAAABFlY/udWpQ3c_OIQFOu_xOmPeYlFA8HYZthzZACLcBGAs/s800/nayamu_girl2.png">

・APIアドレスを貼り間違えている
・最初のLINEモジュールと最後のモジュールのコネクション先が間違えている
・JSONではなくXML形式だった
などなどでした。原因を探すのに本当に時間がかかりました…。:cold_sweat:
ぜひ、この記事で興味がわいた方は、ぜひたくさんの方の記事も参考にしてみてください！
エラーにぶつかっても、きっと同じようなエラーを解決した人がいるはずです。


## 作成してみて
なんとか目標としていた課題をクリアすることができました。

最初の作成の時点でずっとエラーで躓いていましたが、別の方法に転換することによって解決することができました。たくさんの方の事例を見ることによって、他の方法や同じようなエラーの解決策を見つけることができ、情報を集めることの重要性を学びました。

リマインド機能についてはメッセージだけでなく、その日のトレーニング内容を送ってくれる仕組みの方が便利なので、引き続きやり方を模索しようと思います。

また今回のLINE BotをきっかけとしていろんなAPIを試してみたいと思います！

- 2023/07/09
    - 「修正後」について部分を大幅に追記しました。
    - Markdown記法を修正しました。

## 余談
途中、テーマを決定する前にいろんなAPIを触りまくり、トライ&エラーを繰り返しまくった結果、Makeから有料プランをおすすめするお知らせが来ていました。
※**MAKEの無料プランは月1000回まで**のようなので実行しすぎに気を付けてください笑