2 ポイント 投稿者 GN⁺ 2024-09-22 | 1件のコメント | WhatsAppで共有
  • UIの完成度は実装直後ではなく、実際に繰り返しクリックして試す過程の中で高まっていくものであり、この記事はそれを木工のサンディングになぞらえている
  • ページ遷移やナビゲーションは、クリック、ブラウザの戻る、右クリックの「Back」、アプリ内の戻る、キーボードショートカットのような複数の入り口から確認する必要がある
  • labelinput type="radio"をflexboxで整列し、gapを入れると、ラジオボタンとラベルの間がクリックできないdead zoneとして現れる
  • 解決策はgapをなくしてlabelにpaddingを与える方法で、見た目の間隔を保ちながらクリック可能な領域を広げられる
  • 小さなインタラクションの欠陥でも積み重なるとユーザー体験を損なうため、UIを繰り返し使い、「とげ」がもう引っかからなくなるまで磨く必要がある

繰り返しクリックしてUIの粗い部分を見つける

  • UI作業は何かを作った後にたくさんクリックし、修正して、またクリックするという反復に近い
  • ページ遷移は1つのフローだけを確認していては不十分で、さまざまな方法で戻りながら見ていく必要がある
    • クリック後にブラウザの戻るボタンを使う
    • クリック後に右クリックのコンテキストメニューの「Back」を使う
    • アプリ内の戻るナビゲーションを使う
    • キーボードショートカットで戻る
  • この過程はQAのように「クリックして壊してみる」に近いが、木工でやすりがけをしながら粗い部分やとげを探す感覚により近い
  • ソフトウェアUIにはあまりにも多くの状態と変数があり得るため、繰り返し使いながら、もう「とげ」が引っかからなくなるまで磨くことになる

flexbox gapが生んだクリック dead zone

  • ラジオオプションの一覧で、<label>と関連付けられた<input type="radio">を同じ行に配置した
  • CSSはコンテナにdisplay: flexflex-direction: rowalign-items: centergap: .5remを適用したシンプルな構成だった
  • 繰り返しクリックしているうちに、ラジオボタンとラベルの間の空間を押してもコントロールがトグルしないdead spotが見つかった
  • 原因はflexboxのgapだった
    • gapは見た目の間隔を簡単に作れるが
    • ラベルや入力要素のクリック領域には含まれず、インタラクション上の空白になってしまう
  • 解決策はgapを削除してlabelにpaddingを与える方法だった
    • 間隔は維持される
    • ラベルのクリック可能領域が広がり、dead zoneが消える
  • 小さな欠陥1つは些細に見えても、こうした「小さなとげ」が増えるとUI体験は苦痛になり得る

1件のコメント

 
GN⁺ 2024-09-22
Hacker News のコメント
  • 作っている製品を自分でもよく使うユーザーでもある開発者なら、こうした小さな問題を見つけるうえで非常に有利です。
    ユーザーが先につまずく前に、開発者自身が小さな引っかかりに気づけて、すぐ直せる場所にもいるからです。
    だから、強いオーナーシップを持つ小さなチームが効果的なのだと思います。製品に当事者意識があると、ユーザーが感じるささいな不便も自分ごとのように感じられ、UX をできるだけ滑らかにすることがプライドの問題になります。

    • だからこそ企業は、可能な場合には製品をドッグフーディングし、社内ベータを回すのだと思います。
      エンタープライズ製品のように社内で使いにくい場合でなければ、直接的なオーナーシップは弱くても、製品の成功に対する利害関係は生まれます。
  • 最も磨き込まれた UI は何なのか気になります。
    FAANG くらいなら資金も潤沢なので UI/UX もかなり良いはずだと思いがちですが、Amazon.com や AWS、GCP、Azure を使ったことがある人は違う感想を持つでしょう。
    個人的には mcmaster.com が最もよく磨き込まれた UI/UX だと思います。必要なものを数分以内に見つけられます。
    一方で Home DepotLowe’s のような大型小売サイトでは、ネジや木材のようなものを正確なサイズで探すのに 10〜15 分かかり、モバイルではさらにひどくなります。

    • RockAuto はいちばん好きなウェブサイトです。
      信じられないほどシンプルで実用的なのに、かなり強力です。部品を段階的に絞り込んで探すことも検索することもでき、価格比較は自動で行われ、価格/品質カテゴリも便利にまとめられています。
      部品番号を見つけると、年式/メーカー/モデルの互換性、簡単な説明、写真、カート内の他の部品と同じ倉庫から発送されるかどうかも見られます。これらすべてが 1 ページ上で摩擦なく、どのプラットフォームでも非常に高速に動作します。
    • FastMail は、使ったことのある Web アプリの中でも最も感触が良い部類です。
      反応が非常に速く、使っている間にバグを見たことがありませんでした。Web アプリでどこまでできると考えるべきか、その基準を引き上げてくれました。
    • Linear は UI が非常によく磨き込まれています。
      実際、ユーザビリティの問題だけを直す専用期間もありました。
      https://linear.app/changelog/2022-12-01-polishing-season-202...
      https://web.archive.org/web/20231003205004/https://linear.ap...
    • Facebook には、何カ月も壊れたままの機能をいくつも挙げられます。
      特に一時的なプロフィール写真がいちばん腹立たしいです。ほぼ 1 年前からまともに動作しておらず、元の写真に戻りません。
      そこでは誰も磨き込みをしていないようです。
    • 小さなディテールに職人技が表れることを、誰もが見られる時期です。
      https://littlebigdetails.com がまさにそういう場所です。
  • この特定の問題に対する基本的な解決策は、ラベルの中に入力要素を入れることです。

    • Bootstrap は、ラジオ/チェックボックスで 4.0 の構造を 5.0 で別の構造に変えました [1]。
      理由が気になっていましたが、ラベルや入力要素の位置/パディングを調整するときに、テーマ適用がより単純になるからではないかと思います。
      [1] https://getbootstrap.com/docs/5.3/forms/checks-radios/
    • 入れ子にする場合でも、一般的な音声コマンドソフトウェアのアクセシビリティのためには、for/id 属性が依然として必要です: https://www.tpgi.com/should-form-labels-be-wrapped-or-separa...
    • 最初に思い浮かんだのもこれでした。
      ラジオボタンやチェックボックスは、ボックスとパディングだけでなく、テキストラベル全体を押してもトグルされるべきです。
    • 以前はなぜかこの方法がタブーだと思っていましたが、おそらく XHTML でラベルと入力の一対一の関連付けを強制していたことのせいだったのかもしれません。
      Flexbox は少し大げさに見えます。入れ子にしない構文でもインラインで配置されるはずで、同じ方法でパディングだけ追加すればよいと思います。
    • React のようなフレームワークでは、この方法はサイトで Google Translate のようなものを使ったときに、伝播するエラーを生む可能性があります。
      緩和するには、Foo を別要素で包む必要があります。
  • こういうものは Agile からあまりにも消えてしまった
    エンジニアにはプロダクトを磨き込む時間があるべきなのに、実際にはない。QA が余白の問題でチケットを作らなければ、絶対に直らない
    顧客はおそらくこういうことに気づくだろうが、報告してくれること自体が奇跡で、それが最終的にチケットになるのも奇跡で、誰かが優先順位を付けて直すのもまた奇跡
    実際、ほとんどの会社の課題ボードは顧客の立場から見ると不透明すぎて、小さな問題やバグを見つけても、それがバグであることを証明してトラッカーにチケットを入れるまでに50時間も行ったり来たりしなければならず、うんざりする

    • Agile と何の関係があるのか分からない
      ウォーターフォールモデルが UI をテストして磨き込む時間を明示的に与えていたと思っているのだろうか?
      これは普通、プロダクトマネージャーが優先順位を決め、有能な UX エンジニアやデザイナーと一緒に対処すべきプロセスだ。望むならどんな開発手法にもその優先順位を組み込めるので、ここで Agile は関係ない
    • Discord にはフォーラムのように動作する投稿機能があるが、そこで文章を書くと HOME/END キーがめちゃくちゃで、Shift によるテキスト選択もできず、Ctrl を押した単語単位の移動もできない
      過去3年間に何度も報告した。編集中のテキスト編集が極端に難しく、腹立たしいからだ
      Web 開発者として、そもそもどうやってこんなものが壊れたのか不思議だ。デフォルトで動くものを壊すにはどれほどの無能さが必要なのか分からない。30分以上かかるはずのない修正で、全員のユーザー体験を1000倍良くするはずなのに、報告してから3年たってもそのままだ
      Teams でも電話番号入力欄で HOME/END キーが使えないバグを Microsoft Premiere Support 経由で報告したが、返答は「設計どおりに動作しています」だった
      顧客がこうしたバグをもう報告しなくなるのも驚きではない。従業員/開発者も会社も、どうせ気にしていないからだ
    • 本当にその通り
      プロダクトのリード開発者だが、あちこちに小さな問題がたくさんある。何かに責任はあるのに直す権限はない、という状態が気持ちいいはずがない
      ビジネスの観点では、売上やブランドに打撃がないのに、なぜ時間とお金をかけて直すのか、という理屈になる。長期的にはブランドに影響するだろうが、たいていの人は5年以内に役割や会社を移るので気にしない
    • バグをよく報告するほうだが、多くのカスタマーサポート担当者は、自分の仕事をエンジニアをバグ報告から守り、責任をそらすことだと見ているようだ
      返事をもらえるなら、まだましなほう
    • “Agile” のアイデアは、動いていないものに気づいて改善すること
      顧客のニーズを満たしていないプロセスが明らかにあるのだから、チームと一緒に直せばよい
      Scrum の儀式があるならレトロスペクティブで取り上げられるが、実際にはいつでもできる。レトロスペクティブは直近数週間を意図的に振り返る場にすぎず、途中で気づいたことは途中で解決しようとすべきだ
  • 小さな UX の問題を見つけて直せる感覚を持った人は本当に重要
    UX デザインではこういうものを、ユーザーに生じる紙で切った傷にたとえることがある。致命的ではないが、ユーザー満足度を削っていく
    筆者に付け加えると、そのラジオボタンは選択状態にチェックではなく点を使うという慣例に従っていない。ユーザーは一目で、複数選択できる、あるいはまったく選択しなくてもよいものだと誤解するかもしれない

    • GitHub と Jira で経験したのは、ダイアログでテキストをドラッグして選択している途中に外側でマウスを離すと、ポップアップが閉じてしまう問題だった
      外側をクリックすると閉じるようにした機能の副作用である可能性が高い
    • 同意
      ネガティブな側の “Papercuts” があるなら、ポジティブな側には最近 HN でも取り上げられた Juice がある
      1. https://garden.bradwoods.io/notes/design/juice
  • この記事は、私がなぜ UI プログラミングを嫌いなのかをよく示している
    予測できず、些細なことでずれ得るものが、私の忍耐力を超えている。何かが失敗する方法を考えてテストを書くのはある程度楽しめるが、適当にクリックして壊れるかを見るのは散漫で腹立たしい
    UI 実装が本質的にこれほど複雑なのか、それともまだ適切なプログラミングモデルを見つけられていないのか気になる。ときどき、最初から意図したとおりに見えて動作してほしいと望むのは unreasonable なのだろうか、と思う

    • だからデザインシステムがある
      UI を磨き込むのはコンポーネントを最初に作るときだけでよい。時にはコンポーネントを別の方法で組み合わせたり、一回限りの実装が必要になったりすることはある
      正直、自分が何をしているか分かっていれば、それほど時間はかからない。優れたデザインエンジニアはこうした役割の専門家だ
    • これは UI プログラミングではなく、HTML と CSS の上で UI を設計すること
      自由度が多すぎるし、フォームのような基本要素はデフォルトだけでもうまく動作すべきだ
    • そこまで複雑ではない
      コードを通じて UI をうまく表現する方法はすでにある。問題はビジネス側のゼロサムゲーム。クロスプラットフォーム UI は、最も見た目の悪い UI スタックである HTML/CSS/JS でやらなければ、コストが高すぎる
    • 昔は、基本的に細部を代わりに気にしてくれる、かなりまともなプラットフォームがあった
      しかし Web プラットフォームは、文書にはそこそこ良くても、アプリには抽象化レベルが合っていない。そのため Web UI は毎年、新しく漏れのある抽象化として再発明されている
    • Web の場合、正しい UI に関心のある開発者を助ける仕組みがないまま、粒度が低すぎる結果だ
      追いつくだけでも仕事が多すぎる
      他の領域でも似ている。リクエストを送ったりクエリにパラメータを入れたりする簡単な方法がなければ、人々は注意しようとしても自然な圧力により、あらゆる半端なやり方を発明してしまう
      Web プラットフォームはグラフィックス面では最先端だが、UI としては本当にひどい。なのに誰もそれを認めて変えようとしない。人々は前者だけを信じ、ブラウザのレガシーと複雑さが変化を妨げる。ライブラリとして作ると「標準」ではないので誰も気にしない
  • 一方で、ある UI はラジオボタンに四角いボックスを使うこともある
    強調されたボタンがあるのに、Enter キーで有効化されないこともある
    また、互いに異なる記号(省略記号、ハンバーガー、ケバブ)の後ろにメニューが3つずつ隠れていることもある
    品質のばらつきが大きい。UI を磨き込む人たちは本当にありがたい存在だ

    • フォーカスされたボタンをクリックのように実行するキーは、普通 Enter ではなく Space だと思う
    • ラジオボタンも今では四角や角丸四角が標準になりつつあるようだ
      Apple でさえこうしている :(
  • なぜ入力要素をラベルの中に入れる方式が人気がないのか理解できない
    こうすれば問題は完全になくなるし、forに使う一意なidを作る必要もない

    • 「人気がない」というより、むしろ逆だと思う
      ただし、いまだに新しい有効な標準パターンを解釈できない支援技術がいくつかあると知られているため、青銅器時代の標準を守るのがベストプラクティスになっている [1]

      Windows向けDragon Naturally SpeakingとmacOS/iOS向けVoice Controlは暗黙的な関連付けを認識しないため、[明示的なfor-id参照なしにlabel内へinputをネストする方式]は動作しない
      Naturally Speakingは「Microsoft」という会社に買収されたそうで、Voice Controlは「Apple」という会社に関係している
      [1] https://www.tpgi.com/should-form-labels-be-wrapped-or-separa...

    • Railsヘルパーでチェックボックスを作ると、常に値がPOSTされるように「off」値を持つhiddenフィールドを横に置く
      他のフレームワークも似たようなものだと思う。その2つの入力フィールドをlabel要素で囲むと、もはや有効なHTMLではない
      ラジオボタンでは問題にならないが、何人かはこれを経験した後、「念のため」にそうしているのだと思う。JavaScriptの行末にセミコロンを付けるのと似ている。ほとんど必要ないが、正確にいつ必要なのかわからないので、どこにでも付けるというわけだ
    • 少なくとも15年、もしかすると20年前からこうしてきた
      チェックボックス/ラジオボタンの一般的なユースケースでは、構文もずっとすっきりする
      入力要素をラベルで囲み、テキストにスタイルを当てたいならテキストをspanに入れればよい。labeldisplay:flexにして、テキストの位置もそれで処理できる
    • セマンティックWebという教義のせいだ
  • バグバッシュではこの方式を使っているが、テストケースの組み合わせを多次元のデカルト積行列で作った人より、はるかに多くのチケットが出てくる
    出発点としてそうしたテストケースを知っておくのはよいが、小さな問題を見つけるにはランダムテストが計画されたテストをすぐに追い越す
    計画されたテストはたいてい正常系や想定されたエラーにとどまる。こうした磨き込みのやり方は、隅のバグをずっと早く見つける

    • ときどき、特に機能全体に取り組むには疲れすぎているとき、ゲーム内であちこちランダムにクリックし、普段やらないことを試す
      いつも問題や小さな改善点を見つける。計画されたテストでは実際にはあまり出てこなかっただろうものだ
  • 個人サイト(https://dustinbrett.com)をもうすぐ4年ほど磨き続けているが、永遠に続けられそうな気がしている
    幸い、作業することを楽しめている

    • 正直に言うと、ここに費やした時間のうちどれだけが9時〜5時の勤務中で、上司のお金で処理されたのか気になる
      全部だったことを願う :-)
    • これは本当に良い
      「Webページ上のデスクトップOS」を見ると、たいてい半分だけ作ったような感じで、正直あまりにもありふれてきたと感じるが、これは逆にとても堅牢でよく磨き込まれている
    • 見て回るのがとても楽しい
      本当によく作られていて、刺激になる。すべてをどう実装したのか考えるのもかなり楽しい
    • とても滑らかで、自分でも気づいていなかった欲求を満たしてくれる
      スマートフォンでウィンドウベースのOSを使いたいという欲求だった
    • 本当にかっこよく見える
      足りないものを一つ挙げるなら、explorerでmouse4/mouse5を使えない点だ。「磨き込み」は本当に永遠に続けられる