last modified: Sep./09th/2002; Since: Feb./3rd/2002
前節ではボタンをアプレットに貼り付けましたが、二つのボタンが自動的に配置されました。自動的に配置してくれるので、ウィンドウの大きさが変化しても、開発者がアプレットソースを変更する必要が無いので簡単です。この自動的な配置方法には幾つかの種類があり、開発者が自由に選択することができます。前節の例は、明示的な指定がなされていなかったので、デフォルトのものが使われただけです。このような、コンテナへの部品の配置方法を管理し、部品の大きさを自動的に調整してくれるインタフェースをレイアウトマネージャと呼び、これを実装したクラスが幾つか用意されています。
本節では、次の三つのレイアウトマネージャを紹介します。
他にももっと複雑で柔軟なレイアウトを実現するレイアウトマネージャが用意されていますが、本稿では紹介しません。また、 JFC/Swing でも幾つかのレイアウトマネージャが追加れています。詳細は API 仕様書の java.awt.LayoutManager インタフェースの項を参照ください。
アプレットに限らず、現在使われているソフトウェアの殆どはGUIを備えています。GUIはグラフィカルなユーザ・インタフェース(UI)、ユーザと機器を仲介する界面です。見栄えをクールでグラフィカルに作成することが目的なのではなく、提供する情報に素早くアクセスし、利用者の生産性を高めることが目的です。ソフトウェアの目的はデータを情報として意味付けして利用することにあるため、提供する情報の種類に応じて、最適なデザインは異なります。また、利用者によっても、習得しやすく、習得後に最大限の生産性が得られるデザインは異なります。一見のカッコヨサだけを追求すれば、情報の全体を把握しづらくさせ、生産性を低めるでしょう。一見アーティスティックでクールに見えても、次の動作の予測がつかないインタフェースは全然クールじゃないのです。初心者の利用のしやすさだけを求めれば、習得後の生産性が犠牲になるでしょう。また、事務とITエンジニア、生産と開発、文系と理系、男と女、大人と子供では培った経験に応じて直感が異なるのも当然です。
インタフェースのデザインは初心者に優しい直感的モデルと熟達者の生産性を向上させる理論的モデルの二つに分類できますが、いずれにしても、利用者が「当然期待する」機能性を提供することが重要です。当然期待するところのものは利用者の経験に応じて異なりますが、これを認知心理学ではメンタルモデル(mental model)と呼び、ソフトウェアのインタフェース・デザインでは必須の概念になっています。メンタルモデルとは利用者が情報に対して心的に構築する動作のモデルのことであり、メンタルモデルに合致したシステムは直感的に把握しやすく、人の生産性を向上させます。反対に、メンタルモデルを裏切る動作があると、当該の作業に関する部分だけではなく、システム全体に対する不信感を生み、利用者に全体の見直し/メンタルモデルの再構成を迫ります。その結果、利用者の生産性が著しく減退することは言うまでもありません。
以上の意味で、優れたGUIとは、利用者のメンタルモデルに合致、または利用者にメンタルモデルを構成しやすくするものであり、更には利用者に快感を与えるものを指します。後者は特にユーザエクスペリエンス(user experience)と呼ばれます。突き詰めれば、GUIの目的は、提供する情報を利用者に最大限の効率で利用させ、人を含めたシステム全体の生産性を最大化することです。そのためには、想定する利用者に対して、比喩、暖色/寒色、文字や部品の大きさ、リスト、テーブルなどを適切に選択し、提供する情報に対して最適なメンタルモデルの構築を促す必要があります。例えば、ナビゲーション方法を通して、逐次アクセス、階層型、マトリックスなど、情報の種類に応じた最適なイメージを構築するように促す必要があります。
以上の概念は広く情報デザインと呼ばれます。
GUIをクールにすること、即ち、人を含めたシステム全体のスループットを最大化し、使ってキモチイイということと同時に、万人にアクセス可能であるように配慮する必要もあります。万人というのは、個人的に構築したメンタルモデルの異なる全ての人、ということではなく、身体的ハンディキャップ、文化的/宗教的/世代的差異を持つあらゆる人々ということです。このようなコンセプトに基づいた設計/デザインをユニバーサルデザインといいます。アクセッシビリティという言葉も遣われます。
情報システムにおけるユニバーサルデザインは、情報デザインとユーザ・インタフェースを分離することで実現されます。提供する情報の最適な構造を設計しておき、これを利用するためのインタフェース部分は、複数用意しておいたり、必要に応じて変更可能にしておいたりします。逆に、情報デザイン/システムロジックとユーザ・インタフェースを一体化すると、ユーザの要求に応じて柔軟にインタフェースを変化させることが不可能になります。
システムの目的は情報を整理/処理することにあり、ユーザ・インタフェースはその目的を果たすための従属です。結論を繰り返しますが、まず、想定する利用者に使ってもらうこと、次に、その生産性を最大限に高めること、この二つがUIの目的です。