オブジェクト指向UIデザイン

使いやすいソフトウェアの原理

いわゆる、銀の弾丸を読んだ。

オブジェクト指向UIとはまず対象となるオブジェクトを選択して、それに対するアクションを行う。例えば、デスクトップで書類ファイルを削除したければ、マウスなどで対象の書類ファイルをクリックし、「削除する」などのメニューを選ぶ。つまり、「名詞 -> 動詞」の流れだ。これに対しタスク志向UIというのは、例えば、CLIでdeleteコマンドみたいなものをまず打ち込み、次に対象となる書類ファイルのパスを入力するといった「動詞 -> 名詞」の流れだ。

CLIアプリケーションなら理解できるが、GUIのアプリケーションにおいてこういったものをあまり目にしたことがないような気がする。

タスク志向UI(モード)を作らざるを得ない状況として、次のような場合だという。

  • タスクによって処理対象となるオブジェクト集合が異なる場合。この場合、タスク選択はアプリケーションの選択と同じような位置づけとなる。
  • タスクによって、ユーザーに提示すべきオブジェクトの属性やアクションが大きく異る場合。この場合、先にオブジェクトを提示しようとすると、情報量が多くなりすぎてUIに収まりきらなくなる
  • オブジェクトが(ユーザーのメンタルモデルにおいて)意識されてない、あるいはオブジェクトがひとつだけで選択の必要がなく、アクションの引数としての入力がタスクの大部分である場合。たとえばATM
  • ユーザーの創造的な作業を禁止し、一定の順序で限定的な操作をさせたい場合

いわゆる業務アプリケーションで多いという。確かに、C向けアプリケーションを作ってきた経験が多い自分にとっては、あまり悩んだ記憶がない。だからといって、気にしなくてよい問題かというそうでもない。

タスク志向は「動詞 -> 名詞」の流れと説明したが、その動詞を選択するとモードになる。ビデオカメラで「録画する」ならば、そのときは録画モードで、録画に関すること以外、システムは受け付けないだろう。これはユーザーからコントロール権を奪う行為であり、あまりよろしくない。

GUIでモーダルな代表例としてはモーダルダイアログであろう。モーダルダイアログと言われると、たしかになにも考えず使ってる気がする…

モードレスにする方法としては以下のようなことがある。

  • 「名詞 -> 動詞」の操作をひとつのジェスチャで行う
  • パラメータを保存してオブジェクト化する
  • アクションを分割する
  • サブミットボタンをなくす
  • モーダルダイアログなくす

昨今、React/Vue/AngularなどのMVVMフレームワークを使用していると、状態を変更してUIにすぐに反映することができるので、「サブミットボタンをなくす」といったことができる。以前の記事・マイクロインタラクション事始め以前でもちょっと解説したが、やはりモードレスを意識してないと、惰性的に「モーダルダイアログ展開して〜」といった実装をしがちである。気をつけないと。

全体的に、toC向けのサービスを作っているデザイナーであれば、まぁそんな画面デザインにはならないだろうと思うが、なぜそうなのかと言われるとうまく言語化できないので、そういった意味で明快に解説している本書は一読の価値があると思う。