Fukuoka」が開催されました。オルターブース、さくらインターネット株式会社の協業により9月19日にリリースされた「福岡市粗大ごみ受付(@fukuokacity_sdg)」LINE公式アカウントの開発秘話と技術的裏側について、開発者たちがすべてを語ります。ごみ受付Botの開発にまつわるキーパーソンたちを招き、開発の舞台裏を語ります。Chromeの活用法を解説。ともに開発を行った株式会社オルターブース、さくらインターネット株式会社の2社が、本プロジェクトでの役割について語りました。快適なUXを実現するために工夫したことチャットボットがもたらすもの中嶋一樹氏(以下、中嶋):もう1つは、見た目の部分ではなくて、機能的な部分でのユーザーエクスペリエンスです。ちなみにニュースで出た時にけっこう「AIによる粗大ごみの受付が......」とニュースキャスターの方がよく言ってらしたのですが、先ほどのデモを見るかぎり「AIってどこにあるのかな?」と思われる方もいらっしゃると思うんですね。実はこのチャットボットは、パネルをタップしなくても、ちゃんとユーザーが言ったリクエストを理解するように設定されています。一度デモに戻ってそれを確かめてみようと思います。とあるユーザーからのフィードバックとしてあったのが、「チャットボットを作ってLINEから申請できるのはわかるけど、これ電話したほうが早いんじゃないか?」と言われたことがあります。それはなぜかというと、その人はベビーベッドを出したいと思っていたのですが、そのベビーベッドを出すということをリストから選ばなきゃいけないじゃないかと。「電話したら電話口の人に『ベビーベッド出したいんですけど』と言ったらそれで終わるのに、自分で探さなきゃいけないのは面倒くさい」とおっしゃっていて、なるほどなと思いました。「ただ、こういうやり方もあるんだよ」とお伝えしたのがこれです。先ほどまでは、パネルをタップするとその機能を開始できると紹介しましたが、そこではなくて、普通にキーボードで「扇風機を捨てたいのですが」と言っていただくと、「粗大ごみの申し込みですね。少々お待ちください」「扇風機の個数を選択してください」というかたちで、「これは粗大ごみの受付なんだ」ということと「ごみが扇風機だ」ということをちゃんと理解してくれています。これは決まった言い方があるわけではありません。アプリケーションには決まった使い方がありますが、チャットボットの場合は、決まった使い方があるわけではなくて、自分の意思を伝えることによってチャットボットを動かすことができるようになっています。先ほどは「扇風機を捨てたいんですが」と言いましたが、例えばこの表現を変えて「粗大ごみで換気扇を出したい」と言っても、このように「換気扇の個数を選択してください」とちゃんと意図を理解してくれて、さらにその中の「粗大ごみ」というエンティティをちゃんと抽出してくれるようになっています。これで同じように個数を選択していけば、それで進んでいけるわけなんですね。これならわざわざリストから選ぶ必要もなく、電話口でオペレーターに話すのと同じような感覚で伝えていただければ、それでOKかなと思います。ここ、先ほど「キャンセル」と言いましたが、例えば「やっぱやめておきます」と言っても、「了解しました。キャンセルします」と返答します。キャンセルするのも「キャンセル」という言葉で認識しているわけではなくて、その意味合いを理解してちゃんと判断しています。いった意味で、個人的にチャットボットをおもしろいなと思い、ここ2〜3年開発を続けているんですが、これは従来のアプリケーションとは完全に異なるパラダイムだと思うんです。アプリケーションは、あくまでもユーザーが使い方を覚えて使っていくものだったと思うんですが、チャットボットの場合は、ユーザーが使い方を覚えるのではなく、チャットボットがユーザーが言っていることを理解して学習していくことによって機能を提供するものです。ユーザーのリテラシーが高くても低くてもこのシステムに対してアクセスを提供できるという点で、チャットボットはこれまでのアプリケーションの概念を大きく覆せる可能性があるんじゃないかなと思っております。この自然言語解析の部分はすごくこれから伸びてくる分野ではないかと思います。チャットボットの構成とスキル中嶋:あと、ここはサラッと流しますが、スキルですね。これは従来のアプリケーションにおける機能や仕様といった部分ですが、チャットボットの場合はちょっと擬人化して表現することが多いので、その機能を「スキル」と表現します。今回のチャットボットの場合は、当然ながらそのスキルは「粗大ごみの申請」になるんですが、実際にはそれをキャンセルするスキルなど、いくつかのスキルが備わっています。そのなかで、構成としてはこんな感じになっています。ユーザーはLINEとコミュニケーションをとっています。Chatbotの本体はWebサーバになっていて、それがLINEからのリクエストを受け付けて適切に処理を行っています。いろんなコンポーネントと連携しながらその機能を提供しています。自然言語解析といったエリアではDialogflowというサービスを利用していますが、そういったサービスに連携してユーザーがなにを言っているのか判定したり。これはただのデータベースですが、ユーザーの情報を記録しておいたり、あるいは申し込みのWebフォームなどを一つひとつプラグインすることによって、チャットボットを最終的には成立させています。チャットボットのコーディングは正直難しいです。アプリケーションであれば、そのフィールドにはなにが入っているのかが決まっているのでエラーを出すのは簡単なんですが、チャットボットの場合は、数を聞いているのに「キャンセル」と言ってこられることもあるわけです。柔軟に対応しなければいけないので、コーディングの難易度は低くありません。中嶋:ただ、その部分をできるかぎりすっきり開発するために、今回は開発フレームワークを使っています。その中で連携のパターンとしては、Dialogflowでいったんこのユーザーがなにをしたいのかを判定してから、その判定した結果に応じて、どのスキルを使うかをフレームワーク側に教えてあげるようなかたちで組んでいます。開発者はスキルを開発するところにフォーカスして、今回の場合は1スキル1ファイルみたいなかたちでプログラムを作っていきました。Chromeを使った部分だと思います。Chromeを聞いたことがあるという方、どれぐらいいらっしゃいますか?(会場挙手)なるほど。20パーセントぐらいの方は聞いたことがあるようですね。Seleniumとかと同じような類のものだと思っていただければと思います。Chromeの場合は、実際には画面は開かずブラウジングするようなかたちになります。Chromeを使っているんですね。そんなものを使っているかというと、現在インターネット受付というWebシステムがあって、申し込みデータを保存するデータベースが存在しています。それに、今回チャットボットを追加するにあたり、チャットボットのWebサーバと、チャットボットから入力された申し込みを保存するデータベースが当然必要になるであろうと。最終的にはごみの業者さんが(粗大ごみの)収集にうかがうわけなので、そこにデータを集めなければいけません。データを連携させる必要があったんですけれども、これはかなり難しいんですよね。自治体のシステムにおいて、外から穴を開けるであるとか、データを連携するであるとか、APIを作るであるとか、そういったことはかなり難しい話になります。このプロジェクトもそこで頓挫しそうになりました。家庭ごみの分別機能はいくつかの自治体でLINE経由で使えるものがありますが、この粗大ごみの受付は全国でここが初めてなんです。この部分がすごくハードルが高いわけです。今回の場合、個人情報も一緒に入れなければいけないので、それをどこに置くかという問題で、だいたいのプロジェクトは頓挫してしまうんだろうなと思います。今回の場合はデータベースを置かないという選択をとりました。このチャットボットに、いまあるインターネット受付のWebフォームから、普通にユーザーが入力するみたいに入力させるということを行ったんです。することによって、裏側の人は普通にインターネット受付から入力されたデータだと思うので、いままでの運用フローをまったく変えなくていいというかたちになります。このプロジェクトがスタートすることができました。この部分は作る側はかなり面倒くさいので、作る側としてはあんまりやりたくはありませんが、ただ、このWebフォームに連携する、要はAPIではなくてWebフォームに連携するのが発想の転換だったんじゃないかと思います。中嶋:これは福岡市ではなく、ほかのテストで作っていた「目黒区の図書館で本を予約する」というテストの仕組みなんですが、それがどのように動くのかは見ていただければおわかりになると思います。又吉」とやると本が検索できるわけなんですけれども、「火花を選択」すると、『火花』は現在貸出中でした。「予約する」というボタンを押したら、そのあとWebブラウザが立ち上がったと思います。これは私が入力しているわけではないんですが、チャットボットがまさにいま入力しているんですね。この入力が完了して予約できたら、LINEのほうに「予約しましたよ」というメッセージが来る仕組みになっています。Webでもできるんです。Webで予約すればいい話なんですけれども、いま見ていただいたとおり、かなり多くのステップがあります。それを、LINEでただ「予約する」というボタンを押しただけで、Webでやっていた作業を全部行うことができるようなかたちになります。作るのはちょっと大変なんですが、こんなやり方もあるのではないかという1つのアイデアになります。Chromeを使う場合はいくつか留意点があります。当然ながらHTMLの構造にかなり深く依存しますので、サイトのWebフォームの構成が変更されると動かなくなる可能性が多々あります。Selectorで選択しているので、そこが変わってしまうとやっかいです。Chromeを中で立ち上げますので、非常にメモリを消費します。1ユーザーあたり20MByteぐらい消費するので、システムによってはまったく適用できない構成だと思います。粗大ごみの受付の場合はもともと全体の数を見てもそこまでの流量であるわけではなかったので、それを計算していくと「これぐらいのサーバであればいけるな」というところにあたりをつけて、システム構成を組んでいきました。通常であればチャットボットはPaaSを利用することが多いですが、今回はいわゆるIaaSの上にVMを立てて、そのVMの中にしっかりとシステムを構成していきました。私が担当したのはあくまでBotのアプリケーション構造の部分で、インフラの部分はさくらインターネットさんとオルターブースさんに完全にお任せをして作っていただきました。このメモリ消費の部分があったからこそ、そのシステムが必要になったんですが、それがどんな構成であったのか、さくらインターネットさんとオルターブースさんからお話をいただければと思います。さくらインターネットの横田さんと櫻井さんからシステムについてお話をいただければと思います。横田真俊氏(以下、横田):残りあと8分で我々2社、がんばりましょう(笑)。「さくらのクラウドについて」ということでお話しさせていただきたいと思います。