アンチパターンを集めた。一個でも当てはまったら修正してください。私の精神が安定します。
お客様の安全のために、不便にしています
| # | アンチパターン | 何が問題なのか |
|---|
| 01 | 確認メールが異世界に届く | サインアップ後に確認メールが届かない。再送もできず、登録できたかすら分からない。 |
| 02 | 独自進化したサインアップ | メールアドレスで登録したつもりが、謎のユーザーIDや初期パスワードが必要になる。一般的な登録フローから逸脱している。 |
| 03 | パスワード一本足打法 | パスキーにもMFAにも対応していない。パスワードが漏洩すれば、それだけでアカウントを乗っ取られる。 |
| 04 | パスキー?何それ、おいしいの? | WebAuthnもFIDO2も普及しているのに、いまだにパスワード認証しか提供しない。 |
| 05 | 90日ごとに記憶力テスト | パスワードの定期変更を強制する。変更のたびに覚えやすい弱いパスワードを作らせる結果になりかねない。 |
| 06 | 記号と大文字がセキュリティの証 | 大文字・小文字・数字・特殊記号の組み合わせを強制する。長さや漏洩済みパスワードの排除より文字種ルールを重視する。 |
| 07 | パスワードは8〜16文字です | 長いパスフレーズやパスワードマネージャーが生成した強力なパスワードを拒否する。 |
| 08 | コピペ禁止という謎の防御策 | パスワードの貼り付けや自動入力を禁止する。パスワードマネージャーの利用を妨害している。 |
| 09 | 秘密の質問という公開情報 | 「母親の旧姓」「最初のペットの名前」など、調査やSNSから推測できる情報を認証・復旧に使用する。 |
| 10 | SMSさえ送れば二要素認証 | より強力な認証手段を用意せず、SIMスワップなどのリスクがあるSMS認証に依存する。 |
| 11 | メールを送ったから多要素認証 | パスワードとメール認証コードを組み合わせるだけで、独立した認証要素によるMFAが実現したと考えている。 |
| 12 | 6桁のコードを6回に分けて入力 | ワンタイムパスワードを1文字ずつ別フィールドに入力させ、6桁まとめての貼り付けもできない。 |
| 13 | ログイン画面にログイン方法がない | SSOやパスキーを登録していても、どこからログインすればよいのか分からない。 |
| 14 | 二要素認証は毎回、でもログイン状態は30秒 | 不必要に短いセッション有効期限と、繰り返される認証操作。リスクに応じたセッション管理がない。 |
セキュリティの設定はありませんが、パスワードは変更できます
| # | アンチパターン | 何が問題なのか |
|---|
| 15 | アカウント設定はある。セキュリティ設定はない | パスワード変更以外のセキュリティ機能が用意されていない。 |
| 16 | どこからログインされているかは秘密です | ログイン履歴、使用デバイス、アクティブなセッションを確認できない。 |
| 17 | ログアウトは、この端末だけ | 不審なセッションを発見しても、他の端末から強制ログアウトさせられない。 |
| 18 | パスキーは登録できるが削除できない | 登録した認証器を確認、識別、管理、削除する手段がない。 |
| 19 | アカウント復旧は電話してください | 本人確認が必要な復旧処理を、理由の説明もなく平日の電話窓口に限定する。 |
| 20 | 安全なログイン、無防備な復旧 | ログインに強力なMFAを要求する一方、メールだけ、あるいは秘密の質問だけで認証をリセットできる。 |
| 21 | パスワード再設定メール無限ループ | リンクが期限切れになる、使用済み扱いになる、アプリとブラウザの切り替えで失敗する。 |
| 22 | 重要な設定変更を黙って実行 | メールアドレス、パスワード、認証手段が変更されても通知しない。 |
| 23 | アカウント削除はお問い合わせください | アカウント作成は30秒でできるのに、削除するには問い合わせフォームや電話が必要。 |
| 24 | 本人確認のために、また個人情報をください | 必要性や保存期間の説明もなく、本人確認のたびに追加の個人情報を収集する。 |
入力していただくことに意味があります
| # | アンチパターン | 何が問題なのか |
|---|
| 25 | 全角・半角警察 | 数字や記号の全角・半角をユーザーに修正させる。システム側で正規化できる内容を人間に処理させている。 |
| 26 | 住所は日本の住所しか存在しません | 郵便番号や都道府県が必須で、海外住所を入力できない。住所表記の多様性が考慮されていない。 |
| 27 | お名前は漢字でお願いします | 漢字氏名を必須とし、外国人や通称・旧字体などを想定していない。 |
| 28 | 生年月日を選ぶために40年間スクロール | カレンダーUIで年月を1か月ずつ戻さないと生年月日が指定できない。 |
| 29 | 「戻る」は「最初からやり直す」の意味 | 前の画面に戻っただけで入力した内容が失われる。 |
| 30 | 一時保存という概念がない | 長いフォームを中断すると、それまでの入力がすべて失われる。 |
| 31 | 入力内容に誤りがあります | どの項目が、なぜ間違っているのか表示しない。 |
| 32 | すべて必須項目です | サービス提供に不要な住所、電話番号、生年月日まで入力させる。 |
| 33 | 二度入力すれば正確になるという信仰 | 一度入力した氏名や住所を、確認画面や決済画面で再入力させる。 |
動作確認は開発者のPCで完了しました
| # | アンチパターン | 何が問題なのか |
|---|
| 34 | マウスがない人はお断り | キーボードだけでは操作できない。Tabキーで移動できない、Enterキーで実行できない。 |
| 35 | 見た目がボタンならボタンです | divやspanをクリック可能にしただけで、適切なHTML要素やアクセシビリティ情報がない。 |
| 36 | 今どこにいるかは勘で分かる | キーボードフォーカスが視覚的に分からない。 |
| 37 | 押したいボタンは広告の下 | 固定ヘッダー、バナー、ポップアップが重要な操作要素を覆っている。 |
| 38 | デザイナーには読める薄いグレー | コントラスト不足で文字が読みづらい。 |
| 39 | ホバーすると秘密のメニューが現れる | マウスホバーに依存し、タッチ操作やキーボード操作では機能が見つからない。 |
| 40 | スマートフォンは小さなPCです | 画面を縮小しただけのレイアウト。タップ領域や入力方式がスマートフォンに最適化されていない。 |
| 41 | ポップアップを閉じるのはミニゲーム | 閉じるボタンが小さい、画面外にある、Escキーで閉じられない。 |
ロボットではないことを証明してください。AIのほうが得意ですが
| # | アンチパターン | 何が問題なのか |
|---|
| 42 | AIにも解けるCAPTCHAで人間を苦しめる | AIや自動化ツールで突破できる場合がある一方、視覚障害者や一般ユーザーには大きな負担になる。 |
| 43 | CAPTCHAさえあれば安全 | CAPTCHAを主要なボット対策と考え、レート制限、不正行動の検知、リスクベース認証などを実装していない。 |
| 44 | 自動操作は禁止。ただしAPIもありません | ユーザーが自分のデータを操作・連携する正式な手段を提供していない。 |
| 45 | 人間にしか分からないボタン | ボタンの意味や操作状態がHTMLのセマンティクスとして表現されていない。スクリーンリーダーにもAIにも解釈しにくい。 |
| 46 | エージェントにも全権限を渡してください | AI連携に必要な操作範囲だけを許可する仕組みがない。アカウント全体へのアクセス権を要求する。 |
| 47 | AIの操作も人間の操作も区別しません | 代理操作の権限、実行主体、操作履歴などを管理できない。 |
| 48 | 確認なしで取り消せない操作を実行 | AIや自動化ツールが操作した場合も、削除・購入・送信などを確認や取り消しの機会なしに実行してしまう。 |
| 49 | データは画面からコピーしてください | 機械可読なエクスポート手段がなく、CSV・JSONなどの標準的な形式で取得できない。 |
| 50 | スクレイピング対策が正規ユーザーを排除 | 不正アクセス対策を一律に適用し、正当なユーザーの代理操作や支援技術まで妨害する。 |
お客様の同意を大切にしています。拒否ボタンはありません
| # | アンチパターン | 何が問題なのか |
|---|
| 51 | 同意するボタンしか見えません | Cookieやトラッキングに関する同意画面で、拒否の選択肢が極端に分かりにくい。 |
| 52 | 設定変更は迷路の奥にあります | プライバシー設定の変更や同意撤回まで何階層も移動させる。 |
| 53 | おすすめ設定は全部オン | 広告、トラッキング、個人情報共有などを、ユーザーに不利な初期設定にしている。 |
| 54 | 登録したのでメルマガを送ります | サービスへの登録とマーケティングメールへの同意を混同している。 |
| 55 | 無料だと思いましたか? | 有料契約への移行条件や更新時の請求額が分かりにくい。 |
| 56 | サブスク解約は脱出ゲーム | 契約はオンラインで完結するのに、解約には電話や複雑な手続きが必要。 |
| 57 | あなたのデータは我々のものです | ユーザー自身が登録したデータなのに、取得・移行・削除の方法が提供されていない。 |
| 58 | サービス改善のため何でも収集 | 必要性が説明されないまま、大量の個人情報や行動履歴を収集している。 |
昔からこういう仕様なので
| # | アンチパターン | 何が問題なのか |
|---|
| 59 | ブラウザの戻るボタンは使用禁止 | SPAなどで履歴管理が正しく実装されず、戻る操作で予想外の画面に移動する。 |
| 60 | すべてのページのURLが同じ | コンテンツへの直接リンクやブックマークができない。 |
| 61 | 無限ローディング、永遠の希望 | 通信エラーや処理失敗が発生しても、スピナーが回り続けるだけ。 |
| 62 | エラーが発生しました(以上) | エラーの内容、回復方法、問い合わせに必要な情報が提示されない。 |
| 63 | 一時的な失敗がデータ消失に直結 | 通信失敗やセッション切れで入力中のデータが失われる。 |
| 64 | ブラウザによって動作が違います | 標準Web APIで実現できる機能なのに、特定ブラウザでしか動作しない。 |
| 65 | 日付と時刻にタイムゾーンなどない | 日時のタイムゾーンが不明で、予約や締め切りを間違える原因になる。 |
| 66 | 検索機能はあります。見つかりませんが | 完全一致しなければ結果が出ない。表記揺れ、スペース、同義語などへの配慮がない。 |
| 67 | 閉じた広告が何度でも蘇る | 一度拒否・閉じる操作をした案内や広告が、画面遷移のたびに再表示される。 |
HTTPSなので安全です
| # | アンチパターン | 何が問題なのか |
|---|
| 68 | 認証していれば認可もできている | ログイン済みであれば、URLやIDを変更するだけで他人のデータにアクセスできてしまう。 |
| 69 | クライアントを信用するサーバー | ボタンの非表示やJavaScriptの入力チェックだけで操作を制限し、サーバー側で権限を検証していない。 |
| 70 | セキュリティアップデートは年中行事 | 古いライブラリやフレームワークを放置し、既知の脆弱性への対処が遅れる。 |
| 71 | HTTP 200なら成功です | 処理が失敗してもHTTP 200を返し、エラー内容を独自のJSONフィールドだけで表現する。 |
| 72 | API仕様はソースコードを読んでください | APIの認証方式、スキーマ、エラー、レート制限などの仕様が公開・文書化されていない。 |
| 73 | トークンは永久不滅です | APIキーやアクセストークンに適切な有効期限、失効、権限範囲の制御がない。 |
| 74 | 誰が何をしたかは分かりません | 重要な操作や認証イベントの監査ログがなく、不正利用やインシデントを調査できない。 |
| 75 | バックアップは取っています。復旧は未経験です | バックアップの存在だけで安心し、復元テストや復旧手順の検証を行っていない。 |