bot
BotFramework

そのアプリケーションに Bot の技術が本当に必要か?


きっかけ

とある方向けに、プログラミングの初歩を教えておりまして、C にしたかったのですが、C# から始めてみました。


発見 - Step.1 Console App

まずは、Console アプリケーション から始めてみました。Console.WriteLine() からですね。

コンピューターに自分の事を呼んでもらいたいだろうから、名前と生年月日を入力してもらって、年齢を当てる、というアプリケーションを作りました。

幾つかのプログラミングの基本を盛り込むためです。


  • ユーザーとの情報のやり取り

  • 逐次実行

  • データ型の存在 - 日付の計算

  • 条件分岐 -> 繰り返し

以下、今、私が30分くらいで作ったサンプルコード。コード自体に大した価値はないので...

using System;

namespace ConsoleAppLikeBot
{
class Program
{
static void Main(string[] args)
{
// 1. あいさつ文作成
var greetingMessage = MakeGreetingMessage(DateTime.Now.Hour);
Console.WriteLine($"{greetingMessage}!");

var customeName = "";
while (customeName.Trim().Length==0)
{
Console.WriteLine($"お名前を教えてください");
customeName = Console.ReadLine();
}

// 2. 誕生日を聞く
DateTime? birthDate = null;
while (birthDate == null)
{
Console.WriteLine($"誕生日はいつですか?");
var inputDate = Console.ReadLine().Trim();
try
{
birthDate = DateTime.Parse(inputDate);
} catch (Exception e)
{
Console.WriteLine("入力したデータが日付の形式として処理できないか、存在していない日付の様です。");
birthDate = null;
}
}

Console.WriteLine($"{customeName}さん、ようこそ!");
Console.WriteLine($"現在 { getAge(birthDate)} 歳ですね?");

Console.WriteLine("ご利用ありがとうございました");
}

static string MakeGreetingMessage(int Time)
{
string message = "";
if (Time < 3) {
message = "深夜までご苦労さまです";
}
else if (Time < 11)
{
message = "おはようございます";
}
else if (Time > 15)
{
message = "こんにちは";
}
else
{
message = "こんばんわ";
}

return message;

}

static int getAge(DateTime? birthDay)
{
if (birthDay == null) return 0;
int age = DateTime.Now.Year - birthDay.Value.Year;
if (birthDay > DateTime.Now.AddYears(-age))
{
age--;
}
return age;
}

}
}

動かすと、こんな感じ。

こんばんわ!

お名前を教えてください
わたくし
誕生日はいつですか?
2000/1/1
わたくしさん、ようこそ!
現在 19 歳ですね?
ご利用ありがとうございました

で、気づいたのですが。

これって、Botのアプリと同じじゃない

という事なんです。


  • ユーザーの入力を待つ

  • 入力結果で、条件分岐をする

  • どこかで終了する

ま、LUIS も呼び出し出来ますしね。なんなら、喋らせる事も出来ますね。


発見 - Step 2. WindowsForm を作ってみた

画面があった方が楽しいので、同じ処理を WindowForms で実装してみました。コードは割愛します。

SimpleUI.jpg

で、画面にコントロールを置いて、気づいたのですが...

シーケンシャルでしか処理の書けない、Console Application と比較して、圧倒的にユーザーにも、プログラマーにも優しいじゃない!


  • ユーザーが入力状況を常に確認できる

  • 日付専用のコントロール。容易な入力値のチェック

  • 完結なプログラミングモデル

という事なんです。

プログラミングの進化をなぞっただけなのですが、改めて実感したわけです。


発見 - 自分の身の回りをみて

何でも、Bot という風潮が強いと思います。スマートスピーカーでもいいのですが、ぶっちゃけ、複雑な入力を処理できるわけじゃないです。

Chat Bot の弱点:


  • Bot とのやり取りが 5回 程度を超えると大多数の方が離脱する...

  • スマートフォンに話しかける人は、ほぼ不在

  • 一覧性が悪い。項目数が増えると、ユーザーが過去何を言ったのか、忘れやすい

で、やっぱり、スマートフォンなら:


  • ボタンで選ばせる。何なら画像で説明。

  • Q&Aは所詮検索なので、素直に検索に最適な画面構成にする

方がいいかな、と改めて思った次第です。


まとめ

私は以前から、Bot のアプリについて、こう考えています。

Bot は単なるWebアプリ

そして、その User Experience のデザインや、プロトタイプに、実は単純な Console Application が役に立つのではないでしょうか?

本当に Bot のアプリが必要なのか? 複雑なアプリ+インフラにする価値が本当にあるのか?

良く考えてみてもいいかと思います。

ボット設計の原則:

https://docs.microsoft.com/ja-jp/azure/bot-service/bot-service-design-principles?view=azure-bot-service-4.0