チャット・ボットのためのフレームワークを開発してみた。序章

GASでChat Botを動かすためのFrameworkを作成する。

背景

ここで言うチャットとは、LINEやTelegramのような、グループチャットのことです。
また興味の対象としては、アプリとしてよりも、プラットフォーム(サービスの基盤)として、見ています。

チャット・ボット(Chat Bot、単にBotと呼ぶ場合が多い)とは、そのようなチャットの中で、機能的、あるいは非機能的な振る舞いをする、自動的なプログラムのことを指します。

各チャットのサービス(プラットフォーム)を提供する事業者は、そういったBotを作成・動作させるための仕組みを、一般の第三者に対して提供しています。
つまり利用者(私、Botの開発者)がプログラムを作成し、動かすことによって、チャットの中に独自の機能や価値を、組み入れていくことができます。

課題

独自のBotを動かそうとしたとき、Botのプログラムを動作させる場所(いわゆるサーバー)が必要になってきます。
この点が比較的大きめの障壁であると感じられます。

簡単なテストの目的で動かすとか、あるいは開発をする段階では、普段使っている自分の(自宅の)パソコンだけで十分です。
しかし本格的に、継続的・安定的に動かし続けるのであれば、それでは足りず、サーバーで動かしたくなってきます。

でも、公開のサーバーを管理するのは、何かと手間やリスクがつきもので、できる限り避けたいものです。
そこで昨今の情勢としては、いわゆるパブリック・クラウドと呼ばれる、フルマネージド型(管理を代行してくれる、利用者は手間が少ない)のサーバー運用サービスが主流です。
その中でも、サーバーレスと言われるタイプのヤツでは、「サーバーの管理」という概念が、利用者(Bot開発者)側にまったくありません。

多くの場合で、サーバーレスと言えば、AmazonのAWSや、GoogleのGCP、MicrosoftのAzureといったプラットフォームの中で提供されているモノを指していることが多いと思われますが、さらにお手軽なモノがあります。
それが、Google Apps Script、通称GASです。

GASでは、利用者が用意したプログラムを24時間動かすことができます。
それは、チャットのサービスや、それ以外の外部のサービスと連携させる事も可能で、さらにGoogleが持つ多くの製品との連携がかなり簡単にできるようになっています。
具体的には、スプレッドシートの内容を読み書きし、またチャットのサービスから送信されるリクエストを待ち受けて、また逆にメッセージ等を送り返す(チャットのメンバーに届ける)ことができるわけです。

GASの特徴と利点、そして制約

Googleアカウントを持っているならば、それを使ってすぐに始められます。
GmailやGoogleドライブ、Google Play等を利用したことがあるならば、Googleアカウントは既に利用可能な状態です。
また、普段使っているものとは別に、Googleアカウントを作成しても良いです。

利用は基本的に無料です。これは大きいです。
例えば同じGoogleでも、GCPやFirebaseでも無料枠の中でそれなりのことが可能だろうと思いますが、クレジット・カードの登録が必要であり、その部分の違い(GASなら請求のおそれがない)は大であります。

何よりGoogleブランドの安心感。サーバーの運用面は一切おまかせです。

しかし何でも可能というわけではなく、一定の制約があります。
コンピューター資源の使用量や回数に上限が定められています。
また、普通はありませんが、極端に負荷がかかる状態を継続していると、前記の無料という話に関わらず、上位の有料プランにアップグレードする必要が発生する可能性があるようです。

また、個人的に使う、あるいは一定の人数のグループで使うためのチャット・ボットという程度であればさしたる問題になりませんが、処理の速度、パフォーマンスという面では、「まぁまぁ、そこそこ」程度です。

シビアな反応速度(レイテンシ)が求められる用途には向いていないです。
また、個人的なざっくりとした感覚ですが、チャットの参加人数は延べ100人程度までにしておくと良いかと思われます。
それを超える規模で必要であれば、別のGoogleアカウントを併用するなど、工夫が必要です。が、そうなると管理の手間が増えてしまいますし、GAS以外の選択肢が視野に入ってくるかと思われます。

それと可用性の面ですが、GASはときどき止まります。これも感覚ですが、半年に1回とか。
トラブル(Googleが攻撃を受ける)等で停止することもありますし、全体的に問題なく動いている場合でも、不意に処理が抜け落ちる(応答がない、タイムアウトする)といった現象が起こりえます。
そういう「不意落ち」は、数ヶ月に1回位は見る気がします。これはプログラム側の問題や、その他の外部要因もあるだろうと思われ、一概にGASのサービス・レベルの問題とは言えないのかもしれませんが、それでも他のより本格的なクラウドサービスと比べた場合、割り引いて見ておくと良いかと思います。

目的

前提条件

必要な要素

現時点までの状況

今後の目標