入力フォームに関わるアーキテクチャ
入力フォームは、特にコンシューマ向けWebサイトにおいては、いかに使いやすくストレスのないフォームを作り込めるかが、CVR(コンバージョンレート)を向上させるための肝であります。 したがって必然的に入力フォームに関する要求は厳しくなりがちなので、事前にしっかり設計しておきましょう。
入力チェックのアーキテクチャに関しては別章で解説します。
文字の正規化
Context
- 配送や名寄せなどバックオフィスのシステムで受け付ける文字が決まっている。
- ユーザに余計な入力ストレスは与えたくない。
Force
- 半角/全角文字はユーザに区別して入力してもらわなくても自動で揃えることができる。
- ひらがな←→カタカナも同様に自動で揃えることができる。
Solutions
入力エラーにするのではなく、受け取ったシステム側で正規化する。
Examples
実装はICU4J
を使うのが一般的か?
使用可能文字以外の入力ブロック
Context
- 入力できたくせにいざボタンを押すとエラーがでるのではユーザは離脱してしまう
Solutions
フィールドに入力可能な文字帯域を決めておき、違うものが入力されたらリアルタイムに削除することで、ユーザ。
※ これは乱用すると逆にコンバージョンを落としてしまう危険性があるので、数字のみくらいにとどめておくのがよい。
必須項目のカラーリング
Context
- 必須項目であることを明示し、ユーザの入力ストレスを軽減したい。
Force
- 入力項目が必須かどうかは、入力チェック属性の中でも取り立てて最重要なものである。
Solutions
必須をであることを分かりやすく明示する。入力されていないことがわかるように、フォームオブジェクトに赤系の背景色を加えるとさらに分かりやすくなる。
ふりがな自動入力
Context
- 漢字氏名を入力したのに、カナ氏名くらい自動で入らないの?
Force
Solutions
① 漢字氏名の入力のKeyPushイベントをとり
② 氏名辞書をもとにサーバサイドでカナ変換する
送信ボタンブロック
Context
- 入力チェックエラーに辟易して離脱するユーザを減らしたい。
Force
- フォームをサブミットしてからエラーが表示されたときの落胆たるや。
Solutions
送信前にクライアントサイドでバリデーションし、エラーがあるとフォームのサブミットイベントをキャンセルする。
郵便番号住所変換
Context
Solutions
3桁ほど入力したら候補を表示し、入力のたびにインクリメンタルサーチして絞り込む。
Examples
http://www.cedyna.co.jp/card/lineup/detail/omc/
プルダウンメニューの初期値
Context
- 多くのユーザにとって選択を楽にできるようにしたい。
Force
- アイテム数の多いプルダウンから目的のものを選択するのは苦痛である。
Solutions
サイトのユーザ層がもっとも多く選ぶ項目を初期値として表示しておく。
Examples
エバーライフ https://www.everlifegroup.jp/cash_register/cart_information
メールアドレスドメイン補完
文字カウンタ
Context
- 特にテキストエリアの入力において、どれくらいの文字数を許容するのか明示したい。
Force
- テキストエリアのmaxlengthはIE9では効かない。
- そもそも字数を超えて入力し、校正する、というユーザの挙動を想定すると、制限数以上入力できなくするmaxlength指定は使いやすいUI足りえない。
Solutions
文字カウンタを設置する。
- 制限数を超えた文字は赤くするなどして分かりやすくする。
- Unicodeの場合、サロゲートペアは1文字として数える。(これはデータベースでサロゲートペアを1文字として扱う必要があることを意味する。)
サロゲートペアもJavascriptで正しく数えるには、Twtterのライブラリを使うとよい。 https://github.com/twitter/twitter-text
Examples
エラー項目のフォーカス
Context
- エラーの箇所が分かりにくい。
Solutions
- エラーになった箇所だけ入力フォームを表示し、正しく入力できた項目は非表示にする。
Examples
エバーライフ
入力ステップ表示
Context
- ユーザの途中離脱を防ぎたい
Force
- 終わりの見えない入力フォームは離脱の原因になる。
Solutions
ページ上部に、入力のステップを表示し、現在地もわかるようにする。
Examples
https://plus.cedyna.co.jp/register/sub.asp
ソフトウェアキーボード
Context
- キーロガーの被害から守る。
- 長い入力を補完させる。
Solutions
専用のソフトウェアキーボードを作る。
パラメータの自動トリム
Context
- 空白だけの入力を許可したくない。
- コピペ入力の場合、文字の前後に空白が入ることがあり、空気読んで前後の空白はトリムしてほしい。
Solutions
入力値の前後の空白文字を削除する。
Unicodeの世界では空白文字は、数多くあるのでこれを全部トリムしておいたほうが良い。
- \u0009 HORIZONTAL TABULATION
- \u000A LINE FEED
- \u000B VERTICAL TABULATION
- \u000C FORM FEED
- \u000D CARRIAGE RETURN
- \u001C FILE SEPARATOR
- \u001D GROUP SEPARATOR
- \u001E RECORD SEPARATOR
- \u001F UNIT SEPARATOR
- \u0020 SPACE
- \u00A0 NO-BREAK SPACE
- \u1680 OGHAM SPACE MARK
- \u180E MONGOLIAN VOWEL SEPARATOR
- \u2000 EN QUAD
- \u2001 EM QUAD
- \u2002 EN SPACE
- \u2003 EM SPACE
- \u2004 THREE-PER-EM SPACE
- \u2005 FOUR-PER-EM SPACE
- \u2006 SIX-PER-EM SPACE
- \u2007 FIGURE SPACE
- \u2008 PUNCTUATION SPACE
- \u2009 THIN SPACE
- \u200A HAIR SPACE
- \u200B ZERO WIDTH SPACE
- \u202F NARROW NO-BREAK SPACE
- \u205F MEDIUM MATHEMATICAL SPACE
- \u3000 IDEOGRAPHIC SPACE
- \uFEFF ZERO WIDTH NO-BREAK SPACE
http://qiita.com/suin/items/1a878dd3c7e7a4b14039
クライアントサイドでバリデーションかける場合は、クライアントサイドでトリムする。
コラム
数値と数字の区別
入力フォームの設計で、数字型と数値型を区別せずに定義を誤ることが多い。HTML5から導入された<input type="number"/>
は、数値の入力を表すもので、iOSやAndroidの場合はソフトウェアキーボードが数値入力専用のものに切り替わる。このキーボードの形だけみて、郵便番号のフィールドを<input type="number"/>
で定義していたシステムがあった。郵便番号は0始まりのものもあるのだが、「0120123」のような入力はブラウザ側で「120123」として解釈され送信されることになる。