Application Window

GUI においてモードを表す最も基本的なコントロールがウィンドウです。このウィンドウというものを、Apple がどのように定義付けているのか、ガイドラインを見てみます。

まずウィンドウというものは、アプリケーションやデータを見たり、それらとインタラクトするためのフレームであると言っています。そしてウィンドウには次の四種類があると言います。

  • ドキュメントウィンドウ
  • アプリケーションウィンドウ
  • パネル
  • ダイアログ&アラート

ドキュメントウィンドウはファイルと対応していて、そのファイルの内容を表示します。ワープロソフトなどで用いられるものです。

アプリケーションウィンドウはアプリケーションと対応していて、そのアプリケーションで行う作業に必要なオブジェクトをひとつのウィンドウの中にまとめて表示します。Windows における MDI とは違い、複数のペインをタイル状に配置した表現になります。iTunes などがこのタイプです。アプリケーションウィンドウは、インスタンスとして、同時に複数開くことができます。

パネルはいわゆるフローティングパレットで、補助的なコントロールをモードレスに提示するのに用いられます。Keynote のインスペクタなどがこれに当たります。パネルも、インスタンスとして複数開けるようになっている場合があります。

ダイアログ&アラートはユーザーからのレスポンスを要求するためのもので、いわゆるモーダルダイアログです。

ここで注目したいのが、アプリケーションウィンドウです。最近の Mac および Mac 用アプリケーションでは、このタイプのウィンドウが増えています。前回書いたとおり、Finder も、かつてはフォルダと対応したドキュメントウィンドウだったのが、Mac OS X になってアプリケーションウィンドウになりました。システム環境設定もこのタイプですし、iTunes、iPhoto、Mail、iCal、iMovie ’09、アドレスブックなどもこれです。

アプリケーション選択とは、すなわち作業対象のクラスを選択することであると前に書きました。アプリケーションウィンドウはこの考え方をビジュアルに体現していて、特定クラスのデータ集合を管理するダッシュボードとなっています。

アプリケーションウィンドウの中では、デスクトップメタファが提供してきた空間概念がありません。データはファイルとしてパッケージングされた存在ではなく、抽象的なオブジェクトとして表現されます。実際には iTunes で扱う音楽データも iPhoto で扱う画像データも個々のファイルとしてどこかのディレクトリ階層の中に保存されているのですが、アプリケーションウィンドウの中では、各オブジェクトが持つファセット属性によって動的にグルーピングされて見えています。

扱う対象のデータが増えると、デスクトップメタファにおける空間的な、排他的なフォルダ階層では管理が難しくなります。この問題に対する積極的な解決策として、ファセット分類をベースとしたダイナミックな一覧表現を全面的に採用しているわけです。

動的なグルーピングでは、ひとつのオブジェクトが同時に複数のビューに見えていてもメンタルモデルとして破綻しません。同じ曲が複数のプレイリストに入っていてもおかしくないのです。プレイリストやスマートフォルダは「保存された条件で検索する」というタスクを意味しているわけですが、これらをファイルやフォルダといった従来のオブジェクト表現で提示することで、モードをオブジェクトのように感じさせることができます。また、アプリケーションウィンドウはインスタンスとして複数存在できるので、アプリケーションというモード自体もオブジェクトのように扱うことができるわけです。

ところで、前に、一般的なアプリケーションでは「開く…」というメニュー項目において「動詞 → 目的語」のシンタックスが入り込んでいるということを書きました。とは言っても、ファイルを開くための操作としては、対象のファイルアイコンをまず選択してから「開く」コマンドを実行するとか、ダブルクリックするとか、アプリケーションアイコンにドロップするといった「目的語 → 動詞」の方法もあるので、大した問題にはなりません。

では、一般的なアプリケーションにある「新規作成」というメニュー項目はどうでしょうか。例えばワープロソフトでこのメニューを実行すると、普通は、まっさらな書類のウィンドウが開きます。そして何かを書き込み、ウィンドウを閉じようとすると、保存するように促され、ファイル名や保存場所を指定させられます。このような作業をアランクーパーは「課税タスク」と言って、コンピュータの都合でやらされている二義的なものであると批判しています。別な見方をすれば、この「新規作成」から「保存」までの一連のイディオムは、何かの設定ダイアログを開いて値を指定し、最後に「OK」ボタンを押して確定する、という電車式イディオムと基本的に同じで、モーダルなものです。入力した内容を失わずにモードを出るためには、保存という特定の操作をしなければならないのです。その意味で、僕の「モードレスモード」の定義から外れます。

CRUD のうち「Create」に該当する操作、つまり新規にデータオブジェクトを作成するという場面では、その操作を開始した時点でまだ対象オブジェクトが存在していないため、必然的にモーダルなシンタックスになってしまうのです。

一方、すでに一度保存されてデスクトップに見えているファイルについては、それを選択して開くという「目的語 → 動詞」の自動車式シンタックスを適用できます。ワープロ書類であれば、開いた直後から編集可能になっているので、「編集モードに入る」という手続きはあまり意識されません。ただし、ファイルに変更を加えた場合はやはりそれを保存しなければモードから出られないので、結果的にこれもモーダルなイディオムになっていると言えるでしょう。

OOUI では、操作のシンタックスは常に「目的語 → 動詞」であることが理想です。デスクトップにあるファイルを選択して開いて、編集して、保存して閉じる、という作業をオブジェクト指向のシンタックスにするには、単純に、「ダブルクリックでオープン → 編集(自動保存)→ 閉じる」というイディオムを実現すればよいのです。自動保存を前提にするならば、同時に、多段階アンドゥも実装する必要があります。

では、新規作成の作業をオブジェクト指向のシンタックスにするにはどうすればよいでしょうか。OVID メソッドではこの課題に対して、「テンプレートからの新規作成」方式を提案しています。書類のテンプレートファイルがいくつかデスクトップに見えていて、そこから目的のものを選択して(目的語指定)、インスタンスを生成する(動詞の指定)、という操作を全てのアプリケーションで採用するというアイデアです。インスタンスを生成する時には、ダブルクリックでテンプレートと同じ場所に作るか、ドラッグ&ドロップで任意の場所に作れるようになっていればよいでしょう。いずれにしても、保存場所の指定はインスタンス生成のためのジェスチャと同化しているので、手続きとして意識する必要がありません。

このテンプレート方式を用いれば、「テンプレートを選択してインスタンス生成(保存場所が自然に決定)→ 編集(自動保存)→ 閉じる」というように、新規作成の操作をモードレスにすることができます。

ちなみに、Mac の iWork や Microsoft Office などでは、アプリケーションを起動するとまずテンプレートの一覧が提示されます。これは上記の考え方に近いインタラクションです。しかし自動保存ではないため、あまり意味が無く、むしろ煩わしい感じになってしまっていると思います。

iPhoto や iMovie ’09 や iCal などのアプリケーションウィンドウを採用したソフトでは、データに変更を加えた際に、保存という操作をする必要がありません。つまり自動的に保存されるわけですが、「保存ボタンを押すという行為を自動的にやってくれる」という感覚とは違います。編集作業の結果はリアルタイムに記録されていくので、入力内容がメモリにバッファされて確定のタイミングを待っているという感じがないのです。これはアプリケーションウィンドウの世界観がディレクトリ型の二次元空間から解放され、もっとモードレスな、自然な状態を作り出しているからです。ある意味、OSに対するメンタルモデルを混乱させる要因とも言えますが、この不統一には、HyperCard をはじめて使った時のような肯定的な違和感を覚えます(HyperCard は、通常の Mac アプリケーションとは色々な面で違う振る舞いをしていました)。

アプリケーションウィンドウのイディオムが提供するモードレスな感覚は、操作の結果がリアルタイムに反映されることで生まれています。このリアルタイム性というものが、OOUI を実現するためのもうひとつのヒントとなっています。

This entry was posted in Uncategorized. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>