心のもやもや、記録してみませんか？【初心者のLINEbot作成チャレンジ】


## 初LINEBot「こぎつね🦊ほっとLINE」
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/protoout?src=hash&amp;ref_src=twsrc%5Etfw">#protoout</a><br>はじめてのLINEbot作成チャレンジ<br>こぎつね🦊ほっとLINE <a href="https://t.co/pIWf7Hjgar">pic.twitter.com/pIWf7Hjgar</a></p>&mdash; dx_熊谷 (@dx_kumagai) <a href="https://twitter.com/dx_kumagai/status/1675808870390976512?ref_src=twsrc%5Etfw">July 3, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

おはこんばんにちは。
三度の飯よりテレビゲームが大好きな会社員(♀)です。
今回はプログラミング初心者の私がノーコードでLINEBot作成にチャレンジした模様をお伝えしたいと思います。

## 「LINEBot」とは？
そもそも **「LINEBot」** とは一体何でしょう？
ずばり **「ユーザーの書き込んだチャットメッセージに対して、自動返信をするLINE用のロボット」** です。
身近なところだと、郵便物の時間変更や再配達を行うときに各会社の専用アカウントがありますので使用しています。
すぐに応答してくれるのでとても便利ですよね。

## LINEBot作成チャレンジの背景
タイトルにもありましたが、皆さんは心のもやもやをどうやって解消していますか？
趣味に没頭する、おいしいものを食べる、たくさん寝る…いろんな答えがあると思います。でもやっぱり **「誰かにこのもやもやを聞いてほしい。」** 
そんな時私はSNSに書き込んでしまうことがあるのですが、ふと振り返った時に「これは良くないな」と思ったのです。
なぜかというと、SNSは世界中の知らない誰かが見ているからです。どうせならハッピーなことを積極的に共有したいですよね。
また友人に見られていると思うと、あまりネガティブなことを書き込んで心配はかけたくないなとも思います。
そこで **心のもやもやを書き込む場所を作るため、今回のLINEbot作成にチャレンジしました。** 

## 使用したツール
- [Make](https://eu2.make.com/)
- [GoogleSpreadSheet](https://docs.google.com/spreadsheets/)
- [ChatGPT API](https://chat.openai.com/)
- [randomfox API](https://randomfox.ca/)

## 作成手順
Makeを使用してLINEとあらゆるツールを繋げていきます。
全体のイメージ図がこちら。ざっくりと流れを書き込んでみました。
![make.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457665/9685ca64-dfbf-a188-4754-51c999065001.png)
ChatGPTに関しては全く無知でしたので、[こちら](https://techleap.jp/articles/chatgpt-make-linebot)を参考にしました。
何事もまずは「マネしてみる」というのが大切ですよね。

ここでおそらく皆さん気付いたと思います。
　**「きつねの写真？なぜ？」** 
順番に説明していきますね。

#### ChatGPTを使用するための事前準備
ChatGPTを使用する際、APIキーが必要になる為あらかじめ発行しておきます。
※APIキーは一度しか表示されないため、どこかにメモして残しておくと良いです。私はこれを知らずにやったので再発行することになりました💦
また、会話履歴を記録していくためのフォーマットをGoogleSheetsで作成しておきます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457665/b8628ea6-b6b0-75a0-dc1a-da91a2124aec.png
" width=40%>
 **A1には「role」** 、 **B1には「content」** を入力しておきます。これだけです。とても簡単ですね。
2行目以降の文章は、例としてChatGPTが実際に返答してきたものを入力しているだけですので必要はありません。

#### randomfox APIと連携
動物には癒し効果があり、触れ合うだけでなくその画像や動画を見るだけでも効果があるとされています。
そこで、動物の画像を使用することで **もやもや解消度をUP** させようと考えました。
なぜ **”きつね”** なのかというと、私がきつねのぬいぐるみを大切にしているので身近に感じられていいなと思ったからです。それだけです🦊。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457665/d5a767b7-0c87-3552-a494-7322fc00c233.jpeg" width=50%>
randomfox APIは、 **きつねの写真をランダムに返してくれるAPI** です。
きつね🦊以外に、猫🐱や犬🐶の画像をランダムで返してくれるAPIもありますのでぜひ検索してみてください。とってもかわいいです。
HTTPモジュールにrandomfoxのURLをセットし、取得したデータが画像と分かるように **ParseJSON** で変換しておきます。
 **ここでは返信のLINEモジュールは置きません。** ChatGPTが返す文章の後に、画像が送られるようにするためです。

#### GoogleSheetsへの書き込みとメッセージの取得
LINEから受信したメッセージが事前準備で用意したフォーマットの **「content」** に入力されるよう設定します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457665/7aa2a53e-df15-54bb-8dca-093e602bfb67.png
" width=40%>
次のモジュールではGoogleSheetsに書き込まれたメッセージをすべて取得できるように設定します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457665/af7cc6f4-e398-dbdd-8d6b-1c6914793056.png" width=40%>
ここでも取得したデータをChatGPTが読み取れる形にするため、 **Aggregate to JSON** と **Array aggregator** を使用しています。

#### ChatGPT APIと連携
HTTPモジュールでChatGPTをセットします。 **「APIキー」** の入力をお忘れなく。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457665/5a8e7b93-a1d9-cf4c-05f8-65383ed34ba7.png
" width=40%>

#### LINEでメッセージと画像を返信
LINEモジュールに **ChatGPTからの返信** と、 **randomfoxから受け取った画像** を設定します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457665/a9d210e3-e2a4-d0f2-bc86-0f01288f5af2.png
" width=40%>

#### GoogleSheetsに返信内容を書き込み
最後に **ChatGPTが返信した内容をGoogleSheetsに記録** していきます。

## こぎつね🦊ほっとLINE完成！
送られてきたメッセージに対してChatGPTが具体的な解決策をいくつか提案してくれます。
番号を指定して質問をすると、さらに深堀して説明してくれます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457665/1d6aed48-a91a-5ce8-046b-cba6097161e3.jpeg" width=35%> <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457665/71423e16-608f-b0e2-90e9-3387fe41dcbf.jpeg" width=30%>

## まとめ
心のもやもやをLINEに記録していくことで、自分の感情の波が少しずつ分かるようになるかもしれません。
また、これに **感情分析** も加わるともっと自分の感情を客観視できるような気がします。
画像では長文の返信がきていましたが、動画だと文章が途中で切れてしまっているようでした。読み込むのに時間がかかっているのかもしれません。
また、LINEの返信モジュールで何度もエラーが起きてしまいました。おそらくChatGPTの文章が完成する前に、LINEの返信を実行してしまっている可能性が考えられます。
 **前の動作が終わるまで返信を待機させる** などの工夫が必要かと思います。こちらは今後の課題です。

以上、長い文章にお付き合いいただきありがとうございました！