プログラマが知るべき97のこと/ユーザの操作ミスを防止する
エラーメッセージは、ユーザとシステムの間の重要なコミュニケーション手段です。エラーメッセージが出るのは、ユーザとシステムの間のコミュニケーションに危機が生じている時である、とも言えます。
ユーザが入力の際に何かミスをしたことが、エラーの原因かもしれません。ミスする方に責任があると思ってしまえば確かに話は簡単です。しかし、人間のミスには一定の傾向があります。それを知っていれば、どこでミスをしそうか、あらかじめ予測することもできるはずです。つまり方法によっては、ユーザのミスを事前に予防することも可能ということです。これを、ユーザとシステムの間のコミュニケーションの「デバッグ」と考えてもいいでしょう。デバッグとは何もシステム内部の話だけではないのです。
たとえば、ユーザがシステムに日付を入力する場面について考えてみてください。日付は一定の範囲内のものしか受けつけないとします。この場合は、ユーザに日付をすべてゼロから手入力させるのは得策とは言えません。それよりも、カレンダーやリストを表示し、その中から日付を選ばせる方がいいでしょう。カレンダーやリストに、受けつける範囲内の日付しかなければ、範囲外の日付を入力してしまうというミスは起きなくなります。
フォーマット間違いのエラーもよく起きます。しかし、たとえば日付のテキストフィールドに"July 29, 2012"と入力されたとして、これが指定のフォーマット(“DD/MM/YYYY"など)とは違っているからエラーにしてしまうのは理不尽ではないでしょうか。他の日付と誤解しようはないわけですから、フォーマットが違うというだけでは理由として弱いです。もっとひどいのは、"29 / 07 / 2012"という入力を、余分なスペースが入っているからといってエラーにしてしまうようなやり方です。ユーザにしてみれば、なぜエラーにされてしまったのか分かりにくいでしょう。「ちゃんと指定のフォーマットで入力したはず」と思うユーザは多いに違いありません。
指定のフォーマットと少しでも違っていればエラーにするという方法を採れば、確かに作る側は楽です。少しくらいの違いは許容するようにしようとすれば、あらかじめユーザがどういうフォーマットで入力しそうかを予測して、それと一致しているかを確認するコードを書くという手間がかかるからです。しかし、ほんの少しのフォーマットの違いでエラーにされてしまうと、ユーザにとっては大きなストレスになります。ストレスで操作がぞんざいになり、さらにエラーが続くということにもなりかねません。そうならないように日付に限らず何か情報の入力を求める際は、ある程度のフォーマットの違いは許容できるようにすべきです。「入力して欲しいのはあくまで情報であり、データではない」ということを考慮すべきでしょう。
この種のエラーを予防するには、入力時に指定のフォーマットをユーザに知らせるという方法も使えます。たとえば、はじめから"DD/MM /YYYY"という文字列が入った状態で入力フィールドが表示されるようにしておく、というのもその1つです。ユーザは"DD"や"MM"の部分を上書きすればいいわけです。また、入力フィールドを日、月、年の3つのテキストボックスに分け、それぞれ2文字、2文字、4文字を入力できるようにしてもよいでしょう。
「事前に使い方を指示すればいいのでは」と考える人もいるかもしれません, しかし、文章で長々と説明されても理解は難しいものです。実際に使ってみなければわからないこともあります。その点、入力フィールドにあらかじめ文字列を入れておくという方法なら、自分がいま何をすればいいのかがわかるので、ユーザにとってはこの方がありがたいのです。
使い方の指示をしても、エラーの発生を防ぐことにはまず役立ちません。ほとんどのユーザは、過去に似たようなインタフェースを使った経験から何をどう入力すべきかを推測するだけで、指示など読まないからです(前に"July 29, 2012"と入力して大丈夫だったから、今度も大丈夫だろう、というふうに考えます) 。それに対し、これから入力するまさにそのフィールドに、フォーマットについてのヒントがあれば、ユーザはすぐにどう入力すればいいか理解できます。それでエラーの発生が防げるのです。
デフォルト値を提供することも、エラー防止の方法としては有効です。フォームに日付を入力する際、よく入力されるのは、今日の日付や明日の日付、自分の誕生日、何かの期日、前回同じフォームに入力をした日付などでしょう」状況に応じて、そのいずれかをデフォルトにしておくのが賢明です。
その原因に関係なく、システムはユーザの操作ミスに対し寛容で、あるべきです。そのために役立つのが「アンドゥ機能」です。あらゆる操作、特にユーザのデータを破壊したり、データに変更を加えたりする可能性のある操作を、いくつもさかのぼって無効にできると、操作ミスが起きても安心です。
アンドゥ操作をログに記録してそのログを解析すれば、どういうところでユーザがうっかり操作をミスしやすいか探ることができますの何度も間違えてクリックしているボタンなどを知ることができるわけです。そういうミスは「指示が表示されているが理解されていない」さりげなくユーザを誘導しようとしているが、かえって誤解を招いている」といったことが原因で起きていることも多いので、ミスが起きないよう改良を加えるべきでしょう。
どういう種類のシステムであっても、ユーザのミスには一定の傾向があるものです。多くの場合、ミスはユーザとソフトウェアがお互いを誤解した結果として生じるのです。そうしたミスを防ぐには、ユーザがデータを入力する際、どのように考え、情報をどのように解釈し、どのように判断を下しているかを知ることが重要なのです。