【即席】自分だけのAI公式ラインbotを作ろう

**「自分がカスタマイズしたAIが応答してくれるラインBot(LINE公式アカウント)があったら面白いのではないか？」**
そんな思いがふと頭をよぎったので実行に移してみました。

丁度、個人的に下記のような背景があったこともあり、年末年始の暇な時間に作業するモチベーションが大きかったというのもあります。

- 個人的に秘書AIボットにラインでマネジメントしてもらえると便利かな、と思っていた
- 最近Go言語に興味をもっていたので何かを作りながらGoに慣れたかった
- 会社のプロダクトでLine Messaging APIを扱いはじめたので、それに慣れたかった

一番目の理由について少しだけ詳しく話しておきましょう。

私は山の手線で通勤しているのですが、先日いざ出勤しようとしたときに山の手線が運休していて困ったことがありました。

「こんな時に、マネージャー的な何かが自分に『今日は山の手線遅れてますよ』と教えてくれたらな〜」とその時思いました。

勿論「山手線が遅延しているかどうか」という情報自体はJRのサイトを見ればすぐ分かりますが、家を出る前に毎日わざわざ調べるのは現実的でない気がします。
「それならJR東日本のXでもフォローして通知くるようにしとけばいいじゃん」と思われるかもしれません。
しかし個人的には他にも「ジャンププラスで今週チェンソーマンが更新されたかどうか」といったような欲しい情報が何種類もあり、
それらの悩みを使い慣れた何かのアプリで一括して解決したい、という思いがありました(チェンソーマンは2部から隔週更新なので、「あれ今週は更新あるんだっけ？」が頻発する)。

ちょうど世の中ではAIがブームになっているので、自分だけの秘書AIボットを作成すればイイじゃん、という思いに至りました。

結果を先に書くと、この記事執筆時点で下記のラインBotが出来ました。

## 今回作ったもの
![Screenshot_20240101-174645.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3666530/8ab06026-bf31-98c2-9ed5-d7ccdf2469d9.png)

アイコン画像もAI生成しました。

![DALL·E 2023-12-31 16.45.50 - A charming and adorable Japanese moe character named Neomiko. She embodies a blend of traditional anime style with futuristic, AI-inspired elements. N.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3666530/f291421b-b6ad-64b8-8ba0-656cee937f0c.png)


### 概要
- ネオ・ミミコというAIボット
- 毎朝7時に山手線が大きく遅延している雰囲気があれば教えてくれる
- 他は一切メッセージを送ってこない（公式ラインは無料プランだと能動的に送れるメッセージに上限があるためこの仕様にしてます）

下記から誰でも友達追加できるので、他にこんな機能をつけて欲しいという要望あれば是非メッセージしてください。

![M_gainfriends_2dbarcodes_GW.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3666530/29681934-aa1a-2c3d-3797-9eac8c80d7ae.png)

[ネオ・ミミコを友達追加](https://lin.ee/bBIqLbo)

もしくは[X(旧ツイッター)](https://twitter.com/yk_llm_gpt)に連絡していただいても可。


※友達登録後、メッセージすると私はそのメッセージを見ることが出来るので、個人情報などは送らないようにお願いします。

機能的には現状山手線の遅延通知しかありません。
しかし原理的には、例えば以下のような機能を搭載することが可能です。

・YouTubeのXXのチャンネルに新規投稿があったら教える
・株価が急騰した銘柄があれば教える（仮想通貨や為替も可）
・web漫画のXXに更新があったら教える
・XXの地域で天気が悪くなりそうだったら教える

それぞれのユーザーが欲しい機能を選択したら、そのユーザーにだけメッセージでお知らせすることが可能です。
（手間の問題とインフラなどの費用の問題により今回はやってませんが、もしこのAIマネージャーに興味がある人がいそうだったら順次実装していきます。）

またOpenAIのGPTなどの言語モデルと連携させることで、普通に会話する機能をつけることも技術的には難しくはありません（OpenAIのAPIを叩く際に課金されるという経済的な難しさはある）。

## AIボットの仕組み

さて、せっかくなのでこのAIボットの構成も紹介しておきます。
ざっくり言うと、下記のような構成になっています。

1.毎朝7時にGCP上でCloud Functionsが起動する
2.JR東日本のサイトをチェックして山手線の運行状況を確認
3.運行状況に問題があるか判定する
4.遅延などがあると判断される場合、ラインのAPIを叩いてユーザーにメッセージを送る（遅延なしと判断した場合は何もしない）

[必要だった作業]
・ライン公式アカウントの作成（アイコンの作成なども含む）
・GCPのプロジェクト作成 (cloud functionを使う関係で一応有料プランにする必要あり)
・GCPのCloud Functionsの作成(コードはGPTに大体書かせればOK)
・GCPのPubsubの作成（cloud function作成時に一緒に設定して1分くらいで作れる）
・GCPのCloud Schedulerの作成 (cron書くだけ)

あまり技術的に目新しいことはやっていないので、ソースコードなどは載せません。

ただ、個人的にはChatGPTに生成させたCloud function用のGoコードをこねくりまわす中で少しGoに慣れられたかな、と思っています。

また今回普段業務で触っていないGCPをいじることができたのも良かったです。
はじめはAWSのLambdaで良いかなと思っていたのですが、Goの個別ランタイムのサポートが丁度切れるそうなので、GCPにしました。

ただ、GCPのCloud Functionsは定期実行のジョブを作成するためにPubsubとCoud schedulerを連携する必要があり、そこは少し面倒に感じました。
Lambdaは、Lambdaのコンソール上でcronを指定して定期実行のジョブを作成できるので、そっちのほうが個人的には楽ですね。

ちなみに3で運行状況に問題があるか判定する部分は、色々作り込みができると思っています。

今回は、単純にJR東日本のサイトの文言などを機械的に判断しているのでガバガバです。
が、サイトから取ってきた情報をGPTに入力して、GPTが「遅延している」と判断したら遅延していると判断する、というようなことも可能です。
この場合、かなり柔軟に遅延を判断できるようになると思います。
（繰り返しますがこのプロジェクトは完全趣味なのでOpenAIへの課金を恐れて現在はGPTは連携はしていません。）

他にもAIボットがユーザーと日本語で会話し、

「最近『チェンソーマン』にハマってるんだよね〜」

「『チェンソーマン』面白いですよね！次回から『チェンソーマン』が更新されたら通知しましょうか？」

「お、お願い！」

みたいなやりとりが出来てたら、めちゃくちゃ面白いと思いませんか？

というわけで、何かこういうことしてくれたら嬉しいんだけど、みたいな意見があったら是非教えてください。

下記から友達追加してメッセージ送ってくれてもいいですし、私に直接連絡くれてもOKです。
需要が多いものがあればどんどん対応してきたいと思います！

![M_gainfriends_2dbarcodes_GW.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3666530/35d8d7a0-7501-156b-443f-59e0a4f8173b.png)


[ネオ・ミミコを友達追加](https://lin.ee/bBIqLbo)

https://twitter.com/yk_llm_gpt