4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

なぜ業務システムは「確認しました」にチェックさせるのか――責任をユーザーへ移すUIの正体

4
Posted at

業務システムで申請や登録をしようとすると、かなりの確率でこのような画面に遭遇します。

□ 入力内容に誤りがないことを確認しました
□ 上記の注意事項を確認しました
□ 本操作を取り消せないことを理解しました

[申請する]

チェックを入れなければ、「申請する」ボタンは押せません。

仕方がないので、私たちは上から順番にチェックします。

カチッ。カチッ。カチッ。

さて、質問です。

私たちは今、何を確認したのでしょうか。

入力内容を一字一句見直したでしょうか。

注意事項をすべて読んだでしょうか。

操作の影響を正確に理解したでしょうか。

恐らく大半の人が確認したのは、次の一点だけです。

「ここにチェックを入れないと、次へ進めない」

前回の記事では、「日本企業風GitHub」のパロディを題材に、なぜ業務システムが警告文と承認フローで埋め尽くされるのかを考察しました。

今回は、その中でも特に謎の多いUIである、「確認しました」チェックボックスについて考えてみます。

あのチェックボックスは、本当に誤操作を防ぐために存在するのでしょうか。

それとも、別の何かを守っているのでしょうか。

「確認する」という言葉には、3つの意味が混ざっている

まず、「確認しました」という言葉を分解してみます。

システムがユーザーに求めている「確認」には、少なくとも次の3段階があります。

  1. 表示を見た
  2. 内容を理解した
  3. 理解したうえで実行を選択した

英語にすると、おおむね次のように分けられます。

acknowledgement: 表示されたことを認識した
comprehension:   内容を理解した
intention:       実行する意思を示した

ところが、チェックボックスが記録できるのは、基本的に次の事実だけです。

{
  "userId": "user_123",
  "checked": true,
  "checkedAt": "2026-07-18T01:23:45+09:00"
}

このログから分かるのは、ユーザーがチェックボックスをクリックしたということです。

文章を読んだかは分かりません。

意味を理解したかも分かりません。

入力内容を見直したかも分かりません。

つまり、「確認しました」チェックボックスは、理解を確認するUIではありません。

正確には、

理解したとユーザー自身に宣言させ、その操作記録を保存するUI

なのです。

ここには、かなり大きな違いがあります。

誤操作を防ぐUIと、誤操作後に説明するUI

システム上の安全対策は、大きく3種類に分けられます。

種類 目的 具体例
予防するUI 間違った操作自体を起こさせない 入力制約、権限管理、重複検知
判断を助けるUI 操作の影響を理解させる 対象名、差分、金額、影響範囲の表示
証拠を残すUI 操作した事実を後から確認する 操作ログ、承認履歴、監査ログ

「確認しました」チェックボックスは、本来は2番目の「判断を助けるUI」であるべきです。

しかし実際には、3番目の「証拠を残すUI」として使われていることが多いのではないでしょうか。

トラブルが起きたとき、次のような会話が発生します。

「なぜ、この申請を送信したのですか?」

「間違えてボタンを押しました」

「でも、送信前に『入力内容に誤りがないことを確認しました』へチェックしていますよね?」

この瞬間、チェックボックスは誤操作を防ぐ安全装置ではなくなります。

組織がユーザーへ責任を戻すための記録として機能します。

事故が起きるたび、チェックボックスは増殖する

業務システムのチェックボックスは、最初から大量に存在していたわけではありません。

おそらく、次のような流れで少しずつ増えていきます。

誰かが誤操作する
      ↓
再発防止会議が開かれる
      ↓
「注意喚起が不足していた」と指摘される
      ↓
画面に注意書きを追加する
      ↓
「読んだことを確認する必要がある」と言われる
      ↓
必須チェックボックスを追加する

注意書きとチェックボックスは、実装コストが比較的低い対策です。

業務フロー全体を見直す必要もありません。

データ構造を変更する必要もありません。

権限設計をやり直す必要もありません。

既存画面へ文章とBoolean値を追加すれば、とりあえず「対策を実施した」と報告できます。

ALTER TABLE applications
ADD COLUMN user_confirmed BOOLEAN NOT NULL DEFAULT FALSE;

組織の再発防止策としては非常に扱いやすい。

その一方で、ユーザーが本当に間違えにくくなったかは、ほとんど検証されません。

こうして事故が起きるたびに、UIへ新しい責任回避装置が追加されます。

□ 入力内容を確認しました
□ 添付ファイルを確認しました
□ 申請先を確認しました
□ 注意事項を確認しました
□ 本操作を取り消せないことを確認しました

最後には、確認すべき項目が増えすぎて、何も確認されなくなります。

警告は、表示するほど強くなるわけではない

「重要なことなら、何度も警告すればよい」

一見すると正しそうですが、人間は同じ刺激へ繰り返し接すると、次第に反応しなくなります。

警告表示についても、繰り返しによる慣れ、いわゆるhabituationが研究されています。

USENIXのSOUPS 2019で発表された研究では、頻繁に表示される重要でない通知への慣れが、一度だけ表示されるセキュリティ警告にも持ち越され、注意や警告への従い方へ影響することが報告されています。

つまり、重要でない確認ダイアログを大量に表示すると、ユーザーはその画面だけでなく、似た見た目の本当に重要な警告まで機械的に閉じるようになる可能性があります。

ただし、すべての警告無視を「慣れ」だけで説明できるわけではありません。Googleのブラウザ警告に関するフィールド研究でも、現代の警告設計には単一の支配的な失敗要因があるわけではなく、理解度や状況、ユーザーの判断などを含めて考える必要があるとされています。

それでも、日常的な操作のたびに同じ確認を要求すれば、ユーザーが反射的に「はい」を押すようになることは想像に難くありません。

Nielsen Norman Groupも、確認ダイアログを日常的な操作に使用すると、ユーザーが自動的に同意するようになり、将来の警告へ注意を払わなくなると指摘しています。

警告の数が増えるほど、安全になるわけではない。
むしろ、本当に重要な警告の価値が薄まっていく。

業務システムの「確認しました」は、ユーザーの注意力を前借りしているのです。

「本当に実行しますか?」では、何も確認できない

よくある確認ダイアログを見てみます。

本当に実行しますか?

[はい][いいえ]

この質問には、判断に必要な情報がほとんどありません。

何を実行するのか。

どのデータが影響を受けるのか。

元に戻せるのか。

誰へ通知されるのか。

金額はいくらなのか。

ユーザーが知りたいのは「本当に実行するか」ではなく、実行すると何が起きるのかです。

悪い確認画面は、ユーザーへ意思表示だけを要求します。

本当に削除しますか?

[はい][いいえ]

良い確認画面は、判断材料を提示します。

「2026年度採用プロジェクト」を削除しますか?

プロジェクト内のタスク38件と添付ファイル12件が削除されます。
削除後30日間は管理画面から復元できます。

[プロジェクトを削除][削除しない]

違いは、文章量ではありません。

  • 操作対象が具体的である
  • 影響範囲が分かる
  • 元に戻せるか分かる
  • ボタン名から結果を予測できる

という点です。

確認ダイアログは、ユーザーに反省させる場所ではありません。

意思決定に必要な情報を、最後に提示する場所です。

まず「確認させる」のではなく「元に戻せる」ようにする

削除操作を安全にしたい場合、最初に考えるべき対策は確認ダイアログではありません。

まず考えるべきなのは、Undoできる設計です。

例えば、削除ボタンを押した直後に次の通知を表示します。

「田中太郎」をアーカイブしました。

[元に戻す]

ユーザーは作業を中断されません。

誤操作した場合だけ、元に戻せます。

データベース上でも、即座に物理削除するのではなく、論理削除にできます。

await db.user.update({
  where: {
    id: userId,
  },
  data: {
    deletedAt: new Date(),
    deletedBy: currentUser.id,
  },
});

復元処理も実装できます。

await db.user.update({
  where: {
    id: userId,
  },
  data: {
    deletedAt: null,
    deletedBy: null,
  },
});

本当に必要な監査ログは、「確認チェックを押した」という記録ではありません。

実際に、誰が、いつ、何へ、どの操作を行い、結果がどうなったかという記録です。

await auditLog.create({
  actorId: currentUser.id,
  action: "user.archive",
  targetType: "user",
  targetId: userId,
  result: "success",
  occurredAt: new Date(),
});

チェックボックスを追加するより実装コストは高くなります。

しかし、こちらは本当にユーザーと組織の両方を守ります。

確認ダイアログを出すべき操作、出さなくてよい操作

確認ダイアログ自体が悪いわけではありません。

AppleのHuman Interface Guidelinesでも、破壊的な結果を伴う操作の確認などにアラートを利用できるとされています。

問題は、すべての操作を重大操作として扱うことです。

大まかには、次のように設計を分けられます。

操作 推奨される設計
日常的で、元に戻せる そのまま実行し、Undoを提供する
日常的だが、元に戻せない 可能なら処理自体を可逆に設計し直す
まれで、影響が小さい 対象と結果を画面内へ明示する
まれで、影響が大きい 具体的な確認ダイアログを表示する
極めて重大で、元に戻せない 対象名の入力、再認証、複数人承認などを検討する

例えば、プロジェクト全体を永久削除する操作なら、対象名を入力させる設計にも合理性があります。

この操作は取り消せません。

確認のため「production-api」と入力してください。

[                         ]

[プロジェクトを完全に削除]

ただし、このような重い確認方法を日常的な操作へ使ってはいけません。

毎日プロジェクト名を入力させれば、それもいずれ単なる儀式になります。

「チェックを必須にする」という要件を書き換える

要件定義では、次のような文言がよく登場します。

ユーザーへ注意事項を表示し、「確認しました」チェックボックスを必須とすること。

この要件は、実装方法しか指定していません。

何を防ぎたいのかが分からないため、チェックボックスを作った時点で達成扱いになります。

代わりに、目的を分解します。

  • ユーザーが操作対象を識別できること
  • 実行前に影響範囲を確認できること
  • 不正な状態ではサーバー側で操作を拒否すること
  • 誤操作後30日間は復元できること
  • 操作者、対象、実行日時、結果を監査ログへ記録すること
  • 通常操作では確認ダイアログを表示しないこと
  • 取り消せない重大操作のみ、具体的な確認を要求すること

こう書けば、チームは本当に安全な設計を考えられます。

チェックボックスは手段です。

目的ではありません。

チェックボックスを追加する前に確認したい5つの質問

新しい注意事項や確認項目を追加したくなったら、次の5点を確認します。

1. システム側で判定できないか

入力値の形式、重複、権限、現在の状態などを、ユーザーに確認させてはいけません。

if (!currentUser.canApprove(application)) {
  throw new ForbiddenError();
}

人間へ注意するのではなく、システムが拒否すべきです。

2. 間違えた後に戻せないか

Undo、論理削除、下書き保存、履歴管理で解決できるなら、確認ダイアログより優先します。

3. 何が起きるか具体的に表示しているか

「本当に実行しますか?」ではなく、対象、件数、金額、通知先、削除範囲を表示します。

4. 本当に例外的な操作か

毎日行う操作なら、確認画面はいずれ読まれなくなります。

操作フローやデフォルト値そのものを改善すべきです。

5. 必要なのは同意記録か、操作記録か

監査のために必要なのが操作履歴なら、ダミーのチェックボックスではなく、正確な監査ログを残します。

まとめ:ユーザーに確認させる前に、システムが確認する

「確認しました」チェックボックスが増える背景には、単なるデザイナーのセンス不足ではなく、組織の責任構造があります。

事故が発生する。

再発防止策が求められる。

低コストで実施できる注意書きが追加される。

注意書きを読ませるためにチェックボックスが追加される。

そして次の事故が起きたとき、

「ユーザーは確認済みにチェックしていました」

と説明できるようになります。

しかし、そのUIが証明できるのは、ユーザーがクリックしたという事実だけです。

内容を読んだことも、理解したことも、入力を見直したことも証明しません。

本当に安全なシステムを作るなら、

  • 間違った操作をシステム側で防ぐ
  • 判断に必要な情報を具体的に表示する
  • 可能な限り元へ戻せるようにする
  • 実際の操作を監査ログへ残す
  • 重大かつ例外的な場面だけ確認を求める

という設計が必要です。

優れた確認UIとは、ユーザーへ何度も「確認しました」と言わせるUIではありません。

確認しなくても間違えにくく、間違えても戻せるUIです。

ユーザーへ確認させる前に、システムが確認できることを増やす。

そして、システムへ責任を持たせる。

それが、「確認しました」という儀式から抜け出す最初の一歩なのだと思います。


あなたの職場で見た、最も意味の分からない「確認しました」チェックボックスは何でしょうか。

ぜひコメントで教えてください。

参考資料

  • Jakob Nielsen, “Confirmation Dialogs Can Prevent User Errors — If Not Overused”, Nielsen Norman Group, 2018
  • Anthony Vance et al., “How Non-essential Notifications Blur with Security Warnings”, SOUPS 2019
  • Robert W. Reeder et al., “An Experience Sampling Study of User Reactions to Browser Warnings in the Field”
  • Apple, “Human Interface Guidelines: Alerts”

関連記事

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?