きっかけ
とある方向けに、プログラミングの初歩を教えておりまして、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 で実装してみました。コードは割愛します。

で、画面にコントロールを置いて、気づいたのですが...
シーケンシャルでしか処理の書けない、Console Application と比較して、圧倒的にユーザーにも、プログラマーにも優しいじゃない!
- ユーザーが入力状況を常に確認できる
- 日付専用のコントロール。容易な入力値のチェック
- 完結なプログラミングモデル
という事なんです。
プログラミングの進化をなぞっただけなのですが、改めて実感したわけです。
発見 - 自分の身の回りをみて
何でも、Bot という風潮が強いと思います。スマートスピーカーでもいいのですが、ぶっちゃけ、複雑な入力を処理できるわけじゃないです。
Chat Bot の弱点:
- Bot とのやり取りが 5回 程度を超えると大多数の方が離脱する...
- スマートフォンに話しかける人は、ほぼ不在
- 一覧性が悪い。項目数が増えると、ユーザーが過去何を言ったのか、忘れやすい
で、やっぱり、スマートフォンなら:
- ボタンで選ばせる。何なら画像で説明。
- Q&Aは所詮検索なので、素直に検索に最適な画面構成にする
方がいいかな、と改めて思った次第です。
まとめ
私は以前から、Bot のアプリについて、こう考えています。
Bot は単なるWebアプリ
そして、その User Experience のデザインや、プロトタイプに、実は単純な Console Application が役に立つのではないでしょうか?
本当に Bot のアプリが必要なのか? 複雑なアプリ+インフラにする価値が本当にあるのか?
良く考えてみてもいいかと思います。