LoginSignup
5
2

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-04-22

きっかけ

とある方向けに、プログラミングの初歩を教えておりまして、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

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2