Communitygithub.com

Ringophilia/think-like-the-user

プログラムのインタラクション(ボタン位置、機能エントリ、操作フロー、フォーム、ダイアログ、メニュー、設定ページ、CLIパラメータとプロンプト)を設計・変更する際、初回ユーザーの視点でメインタスクを一通り実行します。ボタンはユーザーの視線と操作対象の近くに配置し、よく使う機能はワンステップでアクセス可能にし、不要な確認、モード切り替え、ウィザード手順、重複入力を削除し、ユーザーが求めていない機能、メニュー、設定項目、プレースホルダエントリは追加せず、適切なデフォルト値、即時フィードバック、理解しやすいエラーメッセージを提供し、プラットフォームの慣例に従います。UIの作成や変更、新機能エントリの追加、マルチステップフローの設計、フォームやポップアップの作成、またはユーザーから「使いにくい/見つからない/面倒」というフィードバックがあった場合に使用し、納品前に実際に一通り実行して手順数を数えてください。

think-like-the-user とは?

このスキルは、ユーザーインタラクションの設計や変更を行うAIエージェント(Claude Code、Cursor、Codexなど)向けに設計されています。開発者がUIやCLIを実装する際、実装の都合ではなく、**初回ユーザーの視点**で操作フローを最適化するための包括的なガイドラインを提供します。主な内容は、ボタンや機能エントリの配置ルール、不要な手順の削減、ユーザーが求めていない機能の排除、明確なフィードバックの提供、そして実際にユーザーとしてフローを一通り実行する検証プロセスです。具体的には、操作は対象の近くに配置する、よく使う機能は目立たせる、確認ダイアログは不可逆操作のみにする、ボタンラベルは「動詞+目的語」にする、エラー時には入力を保持するなど、実践的な原則が多数含まれています。このスキルは、ユーザー体験を向上させ、フラストレーションを減らすために、UI/UX設計の任意の段階で活用できます。マークダウン形式で提供され、チェックリストも付属しているため、開発プロセスに簡単に組み込むことができます。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Ringophilia/agent-rules-of-thumb/tree/HEAD/skills/think-like-the-user

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

ユーザーの視点でインタラクションを考える

問題

AIがインタラクションを書くとき、実装の順序で画面を構成しがちで、ユーザーの順序ではありません。最初にデータ構造があれば、そのコントロールを配置し、コード内で先に書かれた関数の近くにボタンを置きます。その結果:

  • 長いフォームの「保存」ボタンがページの上部にあり、ユーザーが一番下まで入力した後、戻って探さなければならない
  • 「削除」が「保存」のすぐ隣にあり、同じ色、同じサイズ
  • 最もよく使う機能が「その他 ⋯」メニューの第2階層に隠れ、めったに使わない設定がツールバーの最も目立つ場所を占めている
  • 選択肢が1つしかないのに、それを選択しないと「次へ」をクリックできない
  • 名前を変更するのに:"編集モード"をクリック → 変更 → "適用"をクリック → "保存"をクリック → 確認ダイアログ「保存してもよろしいですか?」
  • 新しいものを作成するのに3ステップのウィザードが必要だが、実際には名前を入力するだけ
  • ボタンに「送信」、「実行」、「確定」と書いてあり、ユーザーはクリックしたら何が起こるかわからない
  • エラー時に「操作に失敗しました」と一言表示され、入力内容がすべて消去される

これらはそれぞれ致命的ではありませんが、組み合わさると「なんだか使いにくい」という印象になります。

ステップ1:ユーザーが何をしに来たかを明確にする

着手する前に書き留めてください(頭の中でだけでも構いません):

  1. 誰が使うのか:初めて使う初心者か、毎日使う熟練者か?
  2. 最もよく行う1~3のタスクは何か:これらのタスクは最も速く、最も目立つようにする必要があります。
  3. 各タスクの理想的なパス:プログラムを開いてから完了するまで、最低限必要な手順はいくつか?

画面のレイアウトはこの順序で並べ、機能リスト、データベースフィールド、コードモジュールの順序ではありません。

ステップ2:ボタンとエントリを配置する場所

原則方法悪い例
操作は操作対象の近くに配置する行内の編集/削除はその行に、カードの操作はカード上に配置するまず行を選択し、ページ上部の「編集」を探す
完了フローの位置に応じて配置するフォームの送信ボタンはフォームの末尾に、ダイアログのボタンは下部に配置する長いフォームの保存が最上部にある
頻度で目立ち具合を決める最もよく使うものは直接表示し、たまに使うものはメニューに、めったに使わないものは設定に配置するよく使う機能が2階層目のメニューに隠れている
1つの画面に1つのメイン操作メイン操作は強調スタイルで、それ以外は二次スタイルで表示する同じように目立つ青色のボタンが5つ並んでいる
危険な操作は離して配置する削除は異なる色で、少し離れた場所かメニュー内に配置する削除と保存が並んでいて、同じように見える
プラットフォームの慣例に従うWindowsのダイアログボタンは右下、「OK」は「キャンセル」の左側。macOSは「キャンセル」が左、メインボタンが右。Webポップアップの右上に閉じるボタン独自の順序を考案する
同じ操作は常に同じ場所に配置するすべてのページの「新規作成」は同じ場所にあるページごとに位置が異なる
エントリはユーザーが探す場所に配置するユーザーが「エクスポートしたい」と思ったときに見る場所(ツールバー、ファイルメニュー、リストの上部など)エクスポートが設定ページ内に隠れている

ステップ3:不要な手順を削除する

メインタスクの各手順をリストアップし、順に問いかけます:

  • 削除できるか? この手順でユーザーが決定を下す必要がありますか?そうでなければ削除します。
  • デフォルト値を設定できるか? 90%の人が同じものを選ぶなら、デフォルトで選択しておきます。ユーザーの前回の選択を記憶します。
  • 統合できるか? 「編集 → 適用 → 保存」を直接編集、自動保存、または1回の保存にできないか?
  • 後回しにできるか? 登録、詳細設定、任意のフィールドは、ユーザーが実際に必要になった時点で尋ねることはできないか?
  • 自動推測できるか? ファイル名、コンテキスト、既存のデータから推測できるものは、ユーザーに入力させない。

よくある不要な手順:

不要な手順変更後
元に戻せる操作に対して「よろしいですか?」と確認する直接実行し、「元に戻す」を提供する(Gmailのトーストのように)。不可逆で影響の大きい操作のみ確認する
確認ダイアログが「よろしいですか?[はい][いいえ]」結果と対象を明確に記述する:「3つのファイルを削除しますか?この操作は元に戻せません。[削除][キャンセル]」
選択肢が1つしかないのに選択させる自動的に選択するか、この手順自体をスキップする
独立した「編集モード」の切り替え直接編集可能にする
1つのフィールドのために複数ステップのウィザード1つの入力フィールドと1つのボタン、または行内作成
設定を変更した後、「適用」をクリックしてから「保存」をクリックする1回の操作、または即時反映
操作後に別のページに移動し、ユーザーが戻ってこなければならない元の場所に留まり、その場で更新する
毎回同じ情報を再入力する記憶するか、事前に入力する

ステップ4:ユーザーが求めていないものを追加しない

AIは「ついでに」やりすぎることがよくあります。ユーザーがエクスポートボタンを要求したのに、結果としてエクスポート形式のドロップダウン、エクスポート履歴、エクスポート設定ページが追加されます。ユーザーが小さなツールを要求したのに、サイドバー、設定メニュー、テーマ切り替え、アバウトページ、ヘルプセンター、「近日公開」のプレースホルダエントリが追加されます。

機能、メニュー、エントリが1つ増えるごとに、ユーザーは理解してスキップしなければならないものが1つ増え、メインタスクのエントリが見つけにくくなります。画面上のすべてのものは、ユーザーの注意を奪い合っています。

何かを追加する前に問いかけます:

  • ユーザーが求めたか? 求められておらず、メインタスクの完了に必須でなければ、追加しない。
  • それがなくてもユーザーは困らないか? 困らないなら、追加しない。
  • 選択肢が1つしかない、またはほとんど誰も変更しないものか? であれば、設定項目やドロップダウンは不要で、適切なデフォルト値を直接使用する。
  • 空であったり、未実装であったり、「後で使うかもしれない」ものか? プレースホルダのエントリ、グレーアウトした「お楽しみに」、クリックしても反応しないメニューは配置しない。

よくある不要なもの:

不要なもの変更後
機能が1つか2つしかないツールに、サイドバー + 上部ナビゲーション + 設定メニューがある1つの画面に直接機能を配置する
誰も要求していないテーマ切り替え、言語切り替え、パーソナライズ設定実装しない。必要になったら追加する
1ページで十分なものを「ホーム / ダッシュボード / アバウト / ヘルプ」に分割する1つのページにする
同じ機能に3つのエントリ(ツールバー、右クリックメニュー、設定ページ)ユーザーが最も探しそうな1つのエントリにする。ショートカットキーは別途追加してもよい
プレースホルダの「近日公開」、「高度な機能」、空の統計カード削除する
すべての値を設定可能にする適切なデフォルト値を設定し、ユーザーが実際に変更するものだけを公開する

追加機能が本当に役立つと感じた場合は、主要な要件を完了した後で提案として一言述べ、ユーザーに追加するかどうかを決めてもらいます。直接実装してはいけません。

ステップ5:ユーザーに常に何が起こっているかを知らせる

  • ボタンのラベル = 動詞 + 目的語:「CSVをエクスポート」、「プロジェクトを削除」、「招待状を送信」とし、「送信」、「実行」、「確定」ではありません。ユーザーの言葉を使い、実装の言葉は使いません(「ペイロードを同期」、「ジョブをトリガー」などとは書きません)。
  • クリックしたら反応がある:100ミリ秒以内に視覚的なフィードバックがあること。1秒を超える場合は進捗状況やローディング状態を表示し、ボタンを無効にして重複送信を防止します。
  • 完了したらユーザーに伝える:軽量な成功通知、または画面に直接結果を表示します。
  • エラー時には対処法を伝える:どこが間違っているか、どのように修正するかを説明します。エラーはエラーが発生したフィールドの横に表示します。ユーザーが入力した内容は保持します。
  • 空の状態では次のステップに導く:リストが空の場合、ここに何が表示されるかをユーザーに伝え、「最初の1つを作成」ボタンを直接表示します。
  • キーボード:ダイアログを開いたときのフォーカスは最初の入力フィールドに。Enterで送信、Escで閉じる。Tabの順序は視覚的な順序と一致させる。
  • 突然変化させない:ユーザーが操作しているときにボタンの位置を動かしたり、クリックしようとしている場所をポップアップで遮ったりしない。

CLIも同様です:よく使うパラメータには短いオプションと適切なデフォルト値を設定します。危険な操作には確認を求めますが、--yesも提供します。エラーメッセージは修正方法を説明します。長時間のタスクでは進捗状況を表示します。

ステップ6:実際に一通り実行する

書いただけでは使いやすくなりません。納品前に実際にユーザーとしてメインタスクを一通り実行する必要があります(スクリーンショットの方法は background-friendly を参照):

  1. 初めて開くふりをします:コードは見ず、画面だけを見て、5秒以内にやりたいことのエントリを見つけられますか?
  2. 手順数を数えます:メインタスクを完了するのに必要なクリック数/入力数はいくつですか?ステップ1で書き留めた理想的なパスと比較し、余分な手順にはそれぞれ理由が必要です。
  3. キーボードだけで一通り実行します。
  4. 意図的に間違えてみます:誤った入力、途中でのキャンセル、ネットワーク切断などを行い、何が起こるか、入力が失われるかどうかを確認します。
  5. ウィンドウを小さくしたり、コンテンツが多い場合や空の場合でも、ボタンは適切な位置にありますか?

実行できない(実行環境がない)場合は、ユーザーに「インタラクションフローは実際に検証されていません」と明確に伝え、設計した手順をリストアップしてユーザーが確認できるようにします。

境界

  • ユーザーがレイアウトやフローを指定した場合は、ユーザーの指示に従います。問題があると思ったら、その旨を伝え、ユーザーに判断を委ねます。
  • プロフェッショナルツールの熟練ユーザーは、習得のしやすさよりも効率を重視する場合があります。そのような場合、ショートカットキー、バッチ操作、高密度表示が初心者ガイドよりも重要です。まずユーザーが誰かを判断します。
  • 不可逆でリスクの高い操作(支払い、本番データの削除、一斉送信)には、確認のための余分な手順があっても構いません。「手順を減らす」ために削除してはいけません。
  • 既存のプログラムを変更する場合、ユーザーが慣れ親しんだ位置を「より合理的」だからといって大幅に変更してはいけません。変更する必要がある場合は、その理由を説明します。

チェックリスト

  • 最もよく行う1~3のタスクは何ですか?それらは最も速く、最も目立つように配置されていますか?
  • 各ボタンは、操作対象の近く、ユーザーがフローを完了する位置にありますか?
  • 各画面には1つのメイン操作しかありませんか?危険な操作はメイン操作から離して配置されていますか?
  • プラットフォームの慣例(ボタンの順序、位置、ショートカットキー)に従っていますか?
  • メインタスクの各手順について、「削除できるか、デフォルト値を設定できるか、統合できるか」を検討しましたか?
  • すべての機能、メニュー、エントリはユーザーが求めたもの、または必須のものですか?プレースホルダのエントリや誰も必要としていない設定項目はありませんか?
  • 確認ダイアログは不可逆な操作にのみ使用していますか?元に戻せる操作には元に戻すオプションを提供していますか?
  • ボタンのラベルは「動詞 + 目的語」ですか?ユーザーの言葉を使用していますか?
  • ローディング、成功、エラー、空の状態はすべて処理されていますか?エラー時に入力は保持されていますか?
  • 実際に新規ユーザーとして一通り実行し、手順数を数えましたか?実行していない場合は「未検証」と伝えていますか?

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

関連スキル