![]() | |||||
|
Joel on Software このページは"ジョエル・オン・ソフトウェア
| |||||
|
プログラマのためのユーザインタフェースデザイン ※新しい翻訳はJoel on Software Translation Projectにあります。 その他の "Joel on Software" の記事(日本語) |
Joel Spolsky ジョエル・スポルスキ 翻訳: Yasushi Aoki 青木靖 2000/9/5 私たちは良いデザインの原則について話してきたが、原則は既存のデザインの評価と改善のための手段を与えるだけだ。しかし・・・そもそもデザインがどうあるべきかどうやって見出せばいいのだろうか?多くの人は、大きな、考えつく限りの機能のアウトラインを書く。それから各機能をデザインし、メニューアイテム(あるいはWebページ)にくっつける。それが終わったとき、プログラム(あるいはWebサイト)は望んでいたすべての機能を持っているが、正しく遷移しない。人々はそれが何をするのか分からず、彼らの望むことをどうやって実現できるのか知らない。 Microsoftのこれに対する解法は、アクティビティベース プランニングと呼ばれるものだ。(私に言える限りでは、このコンセプトはExcelチームのマイク・コンテが発明したものだ。彼はそれに飽きてカーレースドライバに転職した。) 鍵となる洞察は、ユーザがしているアクティビティを見出すことで、そのアクティビティの達成を容易にすることに努力を集中するのだ。これは例で説明するのが一番いい。 あなたはユーザがグリーティングカードを作成できるWebサイトを作ることにしたとする。あなたはいくぶんナイーブなアプローチを取って、以下のような機能リストを作るかもしれない:
この問題について考えるもっと良い方法がないため、これは1984年頃の典型的なMacintoshのユーザインタフェースに導かれるかもしれない:プログラムは白紙のカードで始まり、メニューを使って文章と画像を追加し、ライブラリからカードをロードし、カードを送る。次にユーザがしなければならないことは、座ってメニューを一通り眺め、使えるコマンドを全部理解しようとし、そして、これらの基本的なコマンドをどう組み合わせたらカードが作れるか考えることである。 一方、アクティビティベース プランニングでは、最初にユーザがするだろうアクティビティのリストを作る。そこであなたは潜在的なユーザたちと話し、「トップ3」のリストを作る:
プログラマのようにプログラムについて考える(カードを作るためにはどんな機能が必要か)のではなく、具体的にユーザがするアクティビティは何かという言葉で、ユーザのように考えてみる:
突然、あらゆる種類のアイディアがあなたの頭に飛び込んでくるだろう。空白のカードから開始するのでなく、次のようなメニューであなたは始めるかもしれない:
ユーザはあなたのプログラムの方がずっと楽にやり始められることに気づくだろう。アクティビティを完了するためにプログラムがユーザを各ステップを通してリードしてくれるので、メニューを見て回る必要もない。(あなたがアクティビティを正しく選択しなかったなら、ユーザを遠ざけたり混乱させたりするというリスクは存在する。たとえばユーザがハヌカー祭のカードを送ろうとしたけれど選択肢にないといったような。だからアクティビティの選択は、あなたがターゲットとするマーケットの大多数をカバーするよう、注意深く行うこと。) 3つのアクティビティのリストを見ているだけで、あなたが追加したいと思うすばらしい機能が見えてくる。たとえば、バースデーカードか記念日カードを送ろうとしているのなら、翌年も同じ人にカードを送るのを思い出させてほしいと思うかもしれない・・・そしてあなたは「翌年も送る」チェックボックスをつけるかもしれない。パーティの招待状には参加の可否を確認する方法が必要なので、電子的に出欠情報を集める機能をつけるかもしれない。これらの機能のアイディアはアプリケーションの機能ではなく、ユーザの行うアクティビティを見ていて出てきたものである。 この例は簡単だが、重要なアプリケーションでアクティビティベース プランニングから得られるものはもっと大きなものとなる。プログラムをスクラッチからデザインする場合でも、ユーザがどんなアクティビティを行うだろうかについてのビジョンを、あなたはすでに持っている。このビジョンを見つけるのは難しいことではない。同僚とちょっとブレーンストーミングをし、可能性のあるアクティビティについてのリストを書き出し、その中のどれにフォーカスするかを決めるということにさほどの努力は必要とならない。これらのアクティビティを必ず紙に書き出すようにしておくと、デザインの過程全体を通してとても助けになるだろう。 アクティビティベース プランニングは、人々がすでに使っている製品の改訂版の作業をしているとき、より重要になる。その場合には、サンプルに選んだ顧客があなたの製品を何に使っているのか観察する、ということになるだろう。 Excel1.0から4.0までの間、Microsoftのほとんどの人がExcelのもっとも一般的なユーザアクティビティは、インフレ率を変えると収益性にどう影響するか見てみる、というようなファイナンスに関するもし-ならばシナリオ分析をすることだと考えていた。 私たちがExcel 5.0をデザインしていたとき、これはアクティビティベース プランニングを本格的に適用した最初のメジャーリリースだったが、5人ほどの顧客が製品を使っているところを見ただけで、たいていの人はExcelをただ表の管理のためだけに使っているということが分かった。彼らは数式を入れたり何か計算をしたりといったことを全然してなかったのだ!私たちはこんなことをそれ以前にはまったく考えていなかった。Excelにおいては表の管理がほかのどんなアクティビティよりもずっとポピュラーだということが明らかになった。そしてこのことから、私たちは表の管理を簡単にするためのおびただしい数の機能を作った:より簡単に行えるソート、データ入力の自動化、表のスライスを見ることができるオートフィルタ機能、そして複数のユーザが同時に同じ表を使って作業ができるようにExcelが自動的に調整するマルチユーザ機能など。 Excel 5がデザインされていた間に、LotusはImprovという、「ニューパラダイム」表計算ソフトを出荷した。プレスリリースによれば、Improvはまったく新世代の表計算ソフトで、それ以前にあったすべてのものを吹き飛ばすだろう、ということだった。さまざまな奇妙な理由により、Improvは最初、売上げには貢献しないだろうNeXTコンピュータ向けのものが売り出されたが、多くの賢明な人々が、NeXTにとってImprovはApple IIにとってのVisiCalcになるだろうと信じた:そのプログラムを走らせるだけのために、人々が新しいハードウェアを買いに行くキラーアプリケーションになるだろうと。 もちろんImprovはいまや歴史にわずかに名をとどめるにすぎない。Webで探してみれば、見つかるリンクは、組織化過剰な在庫管理者が何かの理由で作った在庫の総目録のWebサイトくらいなものだ。 なぜか?それはImprovでは表を作るのがほとんど不可能だったからだ。Improvのデザイナは、人々は表計算ソフトを複雑な多次元ファイナンスモデルを作るのに使うと考えた。彼らがユーザに尋ねていたなら、多次元ファイナンスモデルより表作成のほうがずっと一般的であることが分かっただろうに。そしてImprovでは表を作るのが不可能と言わないまでも非常に面倒だったのだ。 アクティビティベース プランニングは、ユーザが何をしたいだろうかと想像する必要のあるアプリケーションのファーストリリースにおいて有用なものだが、アップグレード時には、開発者は顧客が何をしているのかわかるので、さらに有用となる。 Webの世界における別な例として、deja.comの進化がある。それはdejanewsと呼ばれるUsenetの巨大な検索インデックスとして始まった。もともとのインタフェースは、エディットボックスに「Usenetでこれこれについて検索」と入力するだけのものだった。1999年に、少しばかりのアクティビティベースプランニングにより、一般的なユーザアクティビティの一つは製品やサービスについて、「どの車を買ったらいいか」といったたぐいのことを調べることだとわかった。Dejaは完全に再編成されて、今日ではどちらかといえば製品についての意見を調べるサービスとなっており、Usenet検索機能はほとんど完全に隠れている。これはMatroxのビデオカードがRedhat Linux 5.1で使えるかどうか調べるような少数のユーザを煩わせたが、単に一番いいデジカメを買いたいと思っているような大多数のユーザには喜ばれた。 アクティビティベース プランニングのもうひとつのすばらしいところは、いらない機能の一覧を作れるということだ。あなたがどんな種類のものであれソフトウェアを作るときには、作るのに使える時間より三倍多くの機能を思いつく、というのが現実だ。どの機能を作るか決める最良の方法は、どの機能がもっとも重要なユーザアクティビティをサポートするか評価してみることだ。 想像上のユーザこの業界の最高のUIデザイナたちは次のことに同意している:あなたは想像上のユーザを作り出して記述することなしにUIをデザインできない、ということだ。あなたはこの本のイントロダクションで、想像上のユーザ、ピートを導入したことを思い出すかもしれない:
これを読むと、あなたはひとりのユーザを想像することができるだろう。私はまったく別なタイプのユーザを作り出しても良かった:
ソフトウェアをピートのためにデザインするのとパトリシアのためにデザインするのとでは、全然違うのが明らかだ。パトリシアはまた、自宅でLinuxを走らせ、何時間もIRCチャットし、"Micro$oft"のソフトを使わない16才のマイクとも全然違っている。 こういったユーザを作り出すと、あなたのデザインが適切であるか考えるのがずっと簡単になる。たとえば、多くのプログラマは典型的なユーザの理解力を過大評価している。私がコマンドラインインタフェースの使いにくさについて何か書くといつも、コマンドラインインタフェースは非常に強力で、'gunzip foo.tar.gz | tar xvf -'みたいなことができるといった内容のemailの集中砲火を浴びる。しかしパトリシアに"gunzip..."とタイプさせることを考えてみるとすぐに、そのようなインタフェースは彼女のニーズをけっして満たさないだろうことが明らかとなる。"実在感のある"人物について考えることは、その人のニーズを満たすために何かの機能を作らなきゃいけない、と感じさせる。(もちろん、あなたが上級システム管理者のためのLinux用バックアップソフトを作っているなら、"フランク"のようなキャラクタ--Windowsにさわることを拒み、それに言及するときはただ括弧付きで「オペレーティングシステム」と呼び、自分で手を入れたtcshを使い、一日中4つのxtermを並べたX11を走らせている--を作り出す必要があるだろう。) 要約すると、良いソフトウェアのデザインは6ステップからなる:
よいUIはソフトウェアが売れるようにするが、それは人々を幸せにもする。なぜならやりたい仕事を達成できたとき人々は幸せになるのだから。それがUIデザインがこうもやりがいのある分野である理由なのだ。ほかのどんなことで何百万もの人々を少しばかり幸せにしてやることができるだろう? この記事の原文(英語)は User Interface Design for Programmers Chapter 9: The Process of Designing a Product です。 | ||||
![]() ジョエル・スポルスキは、ニューヨーク市の小さなソフトウェア会社 Fog Creek Software の設立者です。イェール大学を卒業後、マイクロソフト社、Viacom社、 Juno社でプログラマとして働きました。 | |||||
このページは著者の個人的な意見を掲載したものです。
All contents Copyright ©1999-2005 by Joel Spolsky. All Rights Reserved.