63 ユーザの操作ミスを防止する(Giles Colborne) 『プログラマが知るべき97のこと』

プログラマが知るべき97のこと

本記事は、株式会社オライリー・ジャパンより出版された『プログラマが知るべき97のこと』の中からひとつのエッセイを取り上げ、そのエッセイをクリエイティブ・コモンズ表示3.0の条件下で転載したものです。

本書の各々のエッセイは、オープンソースモデルに従い、ほぼ無制限で利用が可能です。クリエイティブ・コモンズ表示3.0の条件下で、自由に使用することができるのです。つまり、どのエッセイも、著者の名前を明記すれば、自由に転載、改変が可能であるということです。

『プログラマが知るべき97のこと』はじめに(p.XII)

なお、原書(英文)のエッセイは、下記のWebサイトで公開されています。
Contributions Appearing in the Book - Programmer 97-things

63 ユーザの操作ミスを防止する
ジャイルズ・カルバン(Giles Colborne)

ユーザのミスを事前に予防する

エラーメッセージは、ユーザとシステムの間の重要なコミュニケーション手段です。エラーメッセージが出るのは、ユーザとシステムの間のコミュニケーションに危機が生じている時でもある、とも言えます。

ユーザが入力の際に何かミスをしたことが、エラーの原因かもしれません。ミスする方に責任があると思ってしまえば確かに話は簡単です。しかし、人間のミスには一定の傾向があります。それを知っていれば、どこでミスをしそうか、あらかじめ予測することもできるはずです。

つまり方法によっては、ユーザのミスを事前に予防することも可能ということです。これを、ユーザとシステムの間のコミュニケーションの「デバッグ」と考えてもいいでしょう。デバッグとは何もシステム内部の話だけではないのです。

カレンダーやリストを表示し、その中から選ばせる

たとえば、ユーザがシステムに日付を入力する場面について考えてみてください。日付は一定の範囲内のものしか受けつけないとします。この場合は、ユーザに日付をすべてゼロから手入力させるのは得策とは言えません。それよりも、カレンダーやリストを表示し、その中から日付を選ばせる方がいいでしょう。カレンダーやリストに、受けつける範囲内の日付しかなければ、範囲外の日付を入力してしまうというミスは起きなくなります。

フォーマット間違いのエラー

フォーマット間違いのエラーもよく起きます。しかし、たとえば日付のテキストフィールドに"July 29, 2012"と入力されたとして、これが指定のフォーマット("DD/MM/YYYY" など)とは違っているからエラーにしてしまうのは理不尽ではないでしょうか。他の日付と誤解しようはないわけですから、フォーマットが違うというだけでは理由として弱いです。

もっとひどいのは、"29 / 07 / 2012" という入力を、余分なスペースが入っているからといってエラーにしてしまうようなやり方です。ユーザにしてみれば、なぜエラーにされてしまったのか分かりにくいでしょう。「ちゃんと指定のフォーマットで入力したはず」と思うユーザは多いに違いありません。

入力して欲しいのはあくまで情報

指定のフォーマットと少しでも違っていればエラーにするという方法を採れば、確かに作る側は楽です。少しくらいの違いは許容するようにしようとすれば、あらかじめユーザがどういうフォーマットで入力しそうかを予測して、それと一致しているかを確認するコードを書くという手間がかかるからです。

しかし、ほんの少しのフォーマットの違いでエラーにされてしまうと、ユーザにとってはかなり大きなストレスになります。ストレスで操作がぞんざいになり、さらにエラーが続くということにもなりかねません。そうならないように、日付に限らず何かの情報の入力を求める際は、ある程度のフォーマットの違いは許容できるようにすべきです。「入力して欲しいのはあくまで情報であり、データではない」ということを考慮すべきでしょう。

入力時に指定のフォーマットをユーザに知らせる

この種のエラーを予防するには、入力時に指定のフォーマットをユーザに知らせるという方法も使えます。たとえば、はじめから "DD/MM/YYYY" という文字列が入った状態で入力フィールドが表示されるようにしておく、というのもその1つです。ユーザは "DD" や "MM" の部分を上書きすればいいわけです。また、入力フィールドを日、月、年の3つのテキストボックスに分け、それぞれ2文字、2文字、4文字を入力できるようにしてもいいでしょう。

自分がいま何をすればいいのか

「事前に使い方を指示すればいいのでは」と考える人もいるかもしれません。しかし、文章で長々と説明されても理解は難しいものです。実際に使ってみなければわからないこともあります。その点、入力フィールドにあらかじめ文字列を入れておくという方法なら、自分がいま何をすればいいのかがわかるので、ユーザにとってはこの方がありがたいのです。

使い方の指示をしても、エラーの発生を防ぐことにはまず役立ちません。ほとんどのユーザは、過去に似たようなインターフェースを使った経験から何をどう入力すべきかを推測するだけで、指示など読まないからです(前に "July 29, 2012" と入力して大丈夫だったから、今度も大丈夫だろう、というふうに考えます)。それに対し、これから入力するまさにそのフィールドに、フォーマットについてのヒントがあれば、ユーザはすぐにどう入力すればいいか理解出来ます。それでエラーの発生が防げるのです。

デフォルト値を提供する

デフォルト値を提供することも、エラー防止の方法としては有効です。フォームに日付を入力する際、よく入力されるのは、今日の日付や明日の日付、自分の誕生日、何かの期日、前回同じフォームに入力した日付などでしょう。状況に応じて、そのいずれかをデフォルトにしておくのが賢明です。

システムはユーザの操作ミスに対して寛容であるべき

その原因に関係なく、システムはユーザの操作ミスに対して寛容であるべきです。そのために役立つのが「アンドゥ機能」です。あらゆる操作、特にユーザのデータを破壊したり、データに変更を加えたりする可能性のある操作を、いくつもさかのぼって無効にできると、操作ミスが起きても安心です。

アンドゥ操作をログに記録してそのログを解析すれば、どういう所でユーザがうっかり操作をミスしやすいか探ることができます。そういうミスは「指示が表示されているが理解されていない」「さりげなくユーザを誘導しようとしているが、かえって誤解を招いている」といったことが原因で起きていることも多いので、ミスが起きないよう改良を加えるべきでしょう。

ユーザの考え、解釈、判断を知ることが重要

どういう種類のシステムであっても、ユーザのミスには一定の傾向があるものです。多くの場合、ミスはユーザとソフトウェアがお互いを誤解した結果として生じるのです。そうしたミスを防ぐには、ユーザがデータを入力する際、どのように考え、情報をどのように解釈し、どのように判断を下しているかを知ることが重要なのです。

プログラマが知るべき97のこと
オライリージャパン
売り上げランキング: 19,886