Modeless and Modalを読む
- 作成
- 更新
- (1592日前)
- 公開範囲
- personal notes
モードレスとモーダル
- ユーザーインターフェースを
支配する 最も ハイレベルな2大思想 - ユーザーインターフェース
- 人と
システムの コミュニケーション 様式
- 人と
Syntax: CUI vs GUI
CUIとGUIの
- CUIは
「 動詞+目的語」 - ことを
優先
- ことを
- GUIは
「 目的語+動詞」 - ものを
優先
- ものを
GUIの核: Direct Manipulation(直接操作)
「間接的な
- GUIの
特徴 - グラフィカルな
見た 目 (ただし本質は そこではない) - 「
目的語→動詞」のSyntax
- グラフィカルな
- 直接操作の
実現方法 ( 『ユーザー・インターフェースの 設計』 by Ben Shneiderman) - 操作対象および動作の
連続的な 表示 - 複雑な
構文ではなく、 物理的動作や ボタンに よる 操作 - 操作対象への
影響が 即座に 見られる 高速で 逐次的かつ 可逆的な 操作
- 操作対象および動作の
プログラミングという作業がどういうものか何のイメージも持っていなかった僕にとって、そのイベントドリブン(もちろん当時はそんな言葉は知りませんでしたが)な世界は、いったいどうやってできているのかとても不思議でした。膨大な反応のバリエーションがあらかじめ裏に用意されているのだとは(そんなめんどくさいことをする人がこの世にいるとは)、思いもよらなかったのです。
ポインタと「いつでも始められる」感覚(モードレス感の源泉)
マウスポインタの
- カーソル
位置とは 独立して 任意座標に 移動できる - 意味を
持つのは クリック と いう 明示 ジェスチャの 時だけ - 気が
変われば 何もしなくてよい
- 気が
- 意識の
所在は カーソル ではなく、 むしろ マウスポインタ 側に ある
「いつでも
- 「今は
自分は 何を すべき」と いう 決まりが なく - 「これから
自分が 何を するか」だけが ある
速い人=ショートカットで「Syntaxの段差」を消している
- 作業が
速い 人に 驚愕した 話
その人の左手は、常に親指をコマンドキーに乗せていて、それがホームポジションになっていました。そしてキーボードショートカットを多用しているのです。右手は常にマウスを持っていてアクセラレーションをうまく使って最小限の動きでターゲットの座標にポインターを移動します
- GUIの
「 目的語→動詞」の うち 動詞 を 「手が 覚えた ショートカット」で 実行できる - 操作が
「 段階的」 でなくなり、 手続きを 計画する 認知負荷が 下がる - 対象物と
一体 が化した 感覚=フロー 起きやすい
- 操作が
- そもそもGUIには
「目的語」と 「動詞」が 一体化した ジェスチャが 多い - ダブルクリック = 対象選択+開く
- ドラッグ&ドロップ = 対象選択+移動
- 端へ
ドラッグで 自動 スクロール = 選択+移動+スクロールの 合成
これらのジェスチャが自然に実装されていて、思い通りの振る舞いをしてくれる時、ユーザーは手続きとしてのリニアな操作ステップを意識しなくてもよくなります。その時 GUI は最も強力なツールとなるのです。
ボタン批判(直接操作の「挫折」としてのボタン)
ボタンが
- ボタンはGUIの
メタファーと して 優秀 - 操作対象と
して 目に 見える、 現実世界の 比喩が 強い
- 操作対象と
- ただしボタンの
入力は 0/1の 「1」 (極端に デジタル) - 無限段階の
アナログ 操作から 最も 遠い
- 無限段階の
- ボタンが
便利な 理由 - ノイズの
ない 単純操作で 複雑処理を 起動できる - 内部の
複雑さを ユーザーから 完全に 隠せる
- ノイズの
- しかし
本質的には 「バッチ処理の 開始合図」 =間接操作 - 直接押せる
意味では 直接操作だが - ボタンは
「 操作対象」 ではなく、 Syntax上の 動詞の 選択肢に すぎない
- 直接押せる
- 動詞指定は
インタラクションの フロー感を スポイル しやすい - 意識が
「対象物の 状態」から 「コマンド 選択」へ 移る ため
- 意識が
Modelessness(モードレス)とは何か?
アプリケーションは
- モードが
ない = ユーザーが 好きな 時に 好きな ことができる - モードは
行動を 制限し、 「一つの 作業を 終えるまで 次へ 行けない」を 作る - モードが
減る ほど ユーザーは コンピュータを コントロール できる
Object-Oriented(オブジェクト指向)と「文脈」
subject vs object
「事よりも
- subject
(サブジェクト) - 文脈的 / 暗示的 / リンク / 事
- object
(オブジェクト) - 宣言的 / 明示的 / ノード / 物
部品と文脈
- 共通部品は
使い回す - 一定の
部品集合で 全体を 構成 - 部品は
文脈に 依存せず 存在できる - 部品は
部品に よって 呼び出される - 文脈は
「 呼び出し方」で 決まり、 文脈に 応じて 部品の 状態が 変わる
- 一定の
「文脈をユーザーに解放する」
- システムは
機能を 体現するだけで、 使い方を 指示すべきではない - 道具が
役に 立たないのは 「道具が 状況に 適していない」 のであって - ユーザーの
使い方が 悪いのではない
- ユーザーの
エンジニアリング比喩(if地獄 vs オブジェクトの独立)
- if を
重ねた 条件分岐で 処理を 変えると 簡単に ぐちゃぐちゃに なる - あらゆる
状況を 想定して テスト しないといけない
- あらゆる
- コツ
- オブジェクト
同士が 互いの (あるいは ユーザーの) 文脈に できるだけ無関心 で いられるように する - GUIでは
状況は 無限に あるから
- オブジェクト
タスクベースUI批判(=「動詞→目的語」に戻ってしまう)
エンジニアが作ったモックアップのポンチ絵を見て、僕は強烈な違和感を覚えました。このシステムの基本要件は、画像(メタ)データの照会、追加、変更、削除、他システムへの送信といったものだったのですが、モックアップでは、初期画面において、「照会」「追加」「変更」「削除」「送信」というボタンがそのまま並んでいるのです。そして例えば「照会」ボタンを押すと、画像データのサムネール一覧が検索機能などと共に表示され、そのうちひとつを選ぶと画像の内容が表示されます。初期画面に戻って今度は「変更」ボタンを押すと、同じように画像のサムネールが表示され、ひとつを選ぶとメタデータ変更フォームが表示されます。いずれも同じ対象データを同じように一覧表示するのですが、そこでできることは初期画面で選んだ項目(タスク)に依存していて、別なことをやろうとしたら一度初期画面に戻らなければならないのです。
- s もの
すごく タスクベースUIだ - 対象データの
一覧 表示は 同じでも、 できる ことが 「最初に 選んだ タスク」に 縛られる - 別の
ことを やるには 「戻る」が 必要=モードの 強制
- 対象データの
それでもモードが必要になるパターン
- 「
動詞→目的語」の 壁を 破れず、 モードを 作らざるを 得ない とき - タスクに
よって 処理対象 オブジェクト 集合が 異なる - タスク選択が
「アプリ 選択」に 近くなる
- タスク選択が
- タスクごとに
提示すべき プロパティ/メソッドが 大きく 異なる - 先に
オブジェクトを 出すと 情報過多でUIが 破綻
- 先に
- 対象
オブジェクトが 存在しない ・ 1つで 選択不要 - 引数入力が
タスクの 大部分 (例:券売機)
- 引数入力が
- 創造的作業を
禁止し、 順序を 限定したい (ウィザード) - 整合性/セキュリティ
上 トランザクションを 一元化したい - モード
退出 タイミング=トランザクション 確定が 望ましい
- モード
- タスクに
これを打破するためには、業務手続き自体をもっと自由にするか(これは企業ガバナンス的にあり得ない方向性ですが)、もしくは、業務アプリケーションの役割を「業務手続きのオンライン化」から「業務のオンライン化」に変えていく必要があるのではないかと思います。
比喩: 自動車(OO) vs 電車(タスク)
GUIは
- オブジェクト
指向UIと タスク 指向UIの 対比 - 自動車
- ルートも
寄り道も 変更も 自由 (改善も できる) - ただし迷子
リスク (ゴールが 自明で ないと 詰む)
- ルートも
- 電車
- 目的地を
最初に 選べば 確実に 着く - 途中
変更や 工夫は できない
- 目的地を
- 自動車
OOUIの要件
- 良い
ユーザーインターフェース とは OOUI - オブジェクトと
それらの ビューの 協調で 構成 - タスク
入出力より オブジェクト 入出力 を重視 - ユーザーは
自分なりの 方法で タスク 遂行・ 改善できる - 限定的
オブジェクトを 複数タスクで 使い回す - 状態が
リアルタイムに 視覚 フィードバック される - 1オブジェクトは
複数ビューを 持てる - 直接操作・
可逆的 (Undo前提) - 全
オブジェクトが 常に アクティブ - 内部仕組みを
隠匿 - 目的語 → 動詞
- ユーザーが
見るのは アプリではなく オブジェクト - オブジェクトが
役割を 体現する
- オブジェクトと
オブジェクト指向UI とかタスク指向UIというのは、方式として機械的に設計できるようなものではなく、もっと感覚的なというか、思想的なものなのだと思います。ある機能をどちらのシンタックスで実現するかは、自由に選択できるわけではなく、そのシステムの基本的なコンセプトから必然的に決まってくるものです。だからどちらが優れているということはないのですが、コンセプトが曖昧だったりインタラクションの一貫性が意識されていなかったりすると、両者がコンフリクトを起こして、不合理でちぐはぐな操作性になってしまうのです。