ボタン不要の対話型インターフェースの作り方(後編)

Source

Meekanプロダクトデザイナー

デザインとはユーザーにとって自然なストーリーを作ること。スケジューリングツールMeekanのプロダクトデザイナーによる、対話型インターフェース開発のプロセスと考え方とは?

本記事の前編では、対話型インターフェイスの基本原則、そして対話型インターフェイスをプロダクトに取り入れることを考慮すべき理由について説明した。ここでは、より特定のパターンやどのように対話型形式に変換することができるかについて説明する。

対話型インターフェイスをデザインする上で、課題となる点を解説するために、例としていくつかのケースを提示し、Meekanを使って、思い付いたいくつかのソリューションを検証したいと思う。

入力の検証

一般的なGUIでは、ユーザーに追加情報を提供してもらうように催促する場合(通常はフォームへの入力)、プロセスを進めていく前に、明確で役に立つ回答を確実に得る方法はいくつもある。「これは有効なメールアドレスですか?」 「これは電話番号ですか?」 「このユーザ名はすでに使用されていますか?」 入力には数字だけや、既定のリストから選択するように制限することができる。

一方、対話型では、このような制限は存在しない。対話している相手は自由に何でも入力する(または話す)ことができる。つまり、適切な質問を構築したり、できるだけ賢い方法で回答を得るのは、こちら次第ということだ。

要求から情報を取り出す

例えば、Tシャツを提供するとしよう。この場合、ユーザーにサイズと好みの色を聞く必要がある。ユーザーが「Mサイズの赤いTシャツが欲しい」と入力すれば、必要な情報は全て得られることになる。

だが、インターフェイスが対話型である場合や、ユーザーが単純に「Tシャツをもらえますか?」と入力してきた場合は、足りない情報を集めなければならない。

ヒントを与える

どんな時も可能な限り、オープンエンド型の質問を避け、こちらが必要としている回答が得られる指示をするように心掛ける。想定される回答が限られる場合は、単純にその選択肢を挙げるようにする。

あなたのTシャツのサイズは何ですか? Mサイズ、Lサイズ、XLサイズがあります。

原則として、全ての項目は別々に質問すべきである。まずサイズを聞き、回答が得られたら、次に色を聞く。1文の中に複数の質問があると、正しい回答を得るのが困難になる。明確な回答が得られるように質問をするのだ。

肯定

回答が適切であれば、正しく理解できているかどうかを確認するために、復唱し次の質問に移る。

承知しました。Lサイズですね。それでは何色にしますか?

誤りを説明する

入力に誤りがあった場合は、(誤った回答を答えるのではなく)どのような回答が必要なのかを説明する。

何色にしますか?

申し訳ありませんが、紫はありません。白、グレー、茶、赤、オレンジ、ピンク、黒の中からお選びください。何色にしますか?

brbrbl

申し訳ありません。「brbrbl」は色ですか? 白、グレー、茶、赤、オレンジ、ピンク、黒の中からお選びください。何色にしますか?

グレー

承知しました。グレーのLサイズですね!

広く受け入れる

ユーザーは、リストの中から回答を選択しているのではなく、対話しているということを覚えておこう。ユーザーの回答方法は1通りだけではない。Tシャツのサイズを聞いた場合の回答方法は、「エクストラ・ラージ」、「XL」、または「一番大きなサイズ」などがあるが、全て同じ意味である。「木曜日」、「木」、「木用」(そう、変換ミスだ)、または「明日」としても指している曜日は全て同じだ。

タスクの切り替え

ではここで少し、古き良きGUIの話に戻ろう。従来のアプリでは、異なる機能は、通常個別のウィンドウ(またはページ、スクリーン)に分けられて実行される。例えば、予定表を開くとスクリーンに月例会の全ての予定が表示される。このうちの1つを編集する場合、別のスクリーンに切り替わり、編集が終わったら前のページに戻る。

だが、対話型の場合は、長い一連の文章だけである。異なる機能に切り替えるにはどうするのか? 今作業しているのはどのタスクなのか、どのように見分けるのか? 実際にやってみよう。


ユーザーが新規タスクを開始する。

Meekan、チームミーティングを明日スケジュールして。

ロボットは「新規ミーティングをスケジュールする」状態に入り、必要な情報を集め始める。しかしここで何かが起こる。ユーザーが新規ミーティングのスケジュールを取りやめ、木曜日のアジェンダを確認しようとする。

Meekan、私は木曜日どのくらい忙しい?

これは、「新規ミーティング」のウィンドウを”閉じる”、または”Escキーを押す”のと同じ意味である。他にもいくつかの対処法がある。

変更に抵抗する

異なるタスクに変更したいというユーザーの要求をロボットが感知すると、ロボットは、まずユーザーに対して現在のタスクを中止することを明確に伝える。

現在、処理中のミーティングがあります。このミーティングを中止したければ、「キャンセル」と言ってください。

現在のタスクが多岐にわたる作成を必要としていた場合、この手段をとるのが一般である。タスクを中止すれば、これまでの作業を全て失うことになり得るからだ。

フローに従う

改めて言うが、ユーザーはタスクの切り替えを要求している。現在行っているタスクはさほど重要ではないので、ロボットは素早く新規のミッションに移行する。この場合、何が起こっているのか、つまり現在のタスクを中止し、新規のタスクに移行することをユーザーに伝えることが大事だ。

ここでロボットは、招待されたミーティングに対して、ユーザーが返事をしてくることを期待しているが、ユーザーは全く関連のない新規のミーティングの設定を始めた。

ロボット: 金曜日午前10時からのランチミーティングにChrisがあなたを招待しています。「承諾」しますか? それとも「拒否」しますか?

ユーザー: 明日、@jesseとの新規ミーティングを手配して。

ロボット: 分かりました。返事はスキップします。

ロボット: 明日のミーティングを手配できるよう、予定表を調整します。

トラックバック

さて、私たちはタスクAを中止して新たなタスクBを優先することにした。タスクBが終了したら、タスクAに戻るべきだろうか?

前のタスクに戻ることは正しく、賢明なことのように思えるが、Meekanで分かったのは、これがしばしば混乱を招くということである(例えば、タスクAが中止されたことにユーザーが気付かず、再びタスクAを始めようとした場合など)。トラックバックするのであれば、適切なコミュニケーションが重要なポイントとなる。適切なコミュニケーションによって、ユーザーは今何が起こっているのかが分かり、対話している両者の予測に整合性が取れるのである。

先ほどのTシャツの例をもう一度見てみると、このことがよく分かるだろう。

あなたのTシャツのサイズは何ですか? Mサイズ、Lサイズ、XLサイズがあります。

Lサイズ。

承知しました。Lサイズですね。それでは何色にしますか?

やっぱりXLサイズにします。

分かりました、XLサイズですね。それでは何色にしますか?

タイムアウト

チャットでは、タイムアウトになることがよくある。何かについて話している途中に、昼食に出かけたりミーティングに呼ばれたりして、戻ってくる頃には、何について話していたのか忘れてしまう。また、他の人々が別のことを話すことでチャンネルがいっぱいになってしまい、あなたの話していた内容が忘却の彼方に追いやられてしまうという事態はよくあることだ。

ロボットはこのことを認識していなければならない。もしユーザーが丸1日置いてから戻ってきて何か新しいことをし始めた場合、ロボットは、昨日からのタスクは中止になるのだと考えて差支えないだろう。

重要な入力を待つ

処理を進めるのに必要な情報が欠けている場合がある。ユーザーのEメールアドレスはロボットの基本的操作に必要な情報と言えるだろう。最初に何かを削除する必要があり、ユーザーが確認しないとその先に進めない場合もあるかもしれない。

GUI環境であれば、モーダルウィンドウをポップアップさせることができる。「本当に全て削除してもよろしいですか」という質問にユーザーが答えるまでは、いかなるアクセスもブロックする。ユーザーが”はい”か”キャンセル”をクリックするまで、ウィンドウは画面から消えない。

こうした仕様を対話型で実現するには、ロボットは、ユーザーから必要な情報を入手できるまで他の処理を拒絶する必要があるが、そうするとすぐに、うっとうしいループが始まってしまうかもしれない。どんな情報がなぜ必要なのかを、ユーザーにきちんと説明しているのか確認してほしい。ユーザーが何度も処理を避けようする場合に備えて、説明にはいくつかのバージョンを用意しておく。そうすれば、ロボットが質問を繰り返すこと(さらに状況を悪化させること)がなくなる。

処理を行うには、あなたのスケジュールにアクセスする必要があります。あなたの予定表に接続するこのリンクに従ってください。

明日、新しいミーティングを入れて。

スケジュール機能をご利用いただくには、あなたの予定表にどうしても接続する必要があります。

明日は忙しい?

あなたのスケジュールを管理するのがとても楽しみです。どうぞ予定表に接続ください。そうすれば、私の素晴らしい機能をお見せできます。

これは理想的な状況とは言えない。特定の情報を取得するまで本当に処理を行えないのか、よく考えてほしい。可能であれば、知識に基づいて推測して処理を進めるか、少なくともある程度の限定的な機能を使えるようにして、どうしても必要であれば情報を提供してくれるように再度ユーザーに依頼する。

リストからの選択

ロボットが行う作業によっては、ユーザーに最終的にリストから選択してもらわなければならないケースがあるかもしれない。ご承知のように、ドロップダウンメニューも、コンボボックスも、ラジオボタンもない。アイテムのリストの中から、ユーザーに1つもしくはいくつかのアイテムを選んでもらう必要がある場合、ユーザーが好みのオプションを回答できるように、各アイテムにユニークな名前や番号をつけておく必要がある。

Meekan、明日のミーティングをキャンセルして。

明日は、3つのミーティングがあります。どれをキャンセルしますか?
(1) 午前10時からの、プロジェクト立ち上げミーティング
(2) 午前11時からの、チームのスタンドアップミーティング
(3) 午後2時30分からの、Jakeとの個人面談

(3) をキャンセルして。

分かりました。明日の「Jakeとの個人面談」をキャンセルし、Jakeに連絡します。

リストアップされたミーティングに番号を振ることで、ユーザーは注意を向けるべきアイテムを参照しやすくなる。

さらなる進化に向けて

この分野にはまだルールが無く、自分たちで作り上げなければならない。他の人たちに、有効なことや上手くいかないことを教えてあげよう。シェアし、話し合い、書き残していこう。今がパイオニアとなる素晴らしいチャンスだ。

私の実例が、何かの考察を引き起こすきっかけになればいいと思う。この投稿は、ロボットランドに向けた冒険の発射台だと思ってほしい。さあ、ロボットを作ろう!(そして人々に広めよう!)