formの送信ログから反省する、本当は必要だったvalidationや機能たち
https://gyazo.com/e79470e5f5d486fddbccf7f83b315687
Yuta Ide
Web Engineer at 株式会社リクルートライフスタイル
スライド
https://speakerdeck.com/sadnessojisan/formfalsesong-xin-rogukarafan-sheng-suru-ben-dang-habi-yao-datutabaridesiyonyaji-neng-tati
サンプルソース
GitHub.icon https://github.com/sadnessOjisan/Form-Museum
https://if-form.netlify.com/
設定画面や記録画面にたくさんのフォームをつくってる
業務支援なので毎日使われるようなもの
SaaSなので解約率に注視
高いレベルのユーザビリティを実現する
機能改善や検証のスピードが求められる
高いレベルのQCDが求められる
フロントエンドの組織ができた
Airメイト
お店の経営アシスタント
管理業務の効率化・利益最大化支援
機能
売上/コスト分析機能
改善提案機能
日報機能
SNS的な機能
構成
React.js, Next.js GatsbyJS
Formik
redux
分析や提案の制度をあげるためにデータ入力や設定が必要
毎日やってると入力ミスはめっちゃある
数値入力で日本語
空欄で送信
とりえない値
等
犯した罪
入力しづらい
打ち間違えてしまう
0と「お」が近い位置にある
対策
Input要素にtype属性
キーボードから打たせない
固まる
再レンダリングが原因
対策
PureComponentやMemoを使う
FormikやReduxの向き合い方
リアルタイムで入力するのを見せる場合
入力とレンダリングが同時
Submitによっては対応が難しい
ビジネスサイドと相談したほうがいいかも
修正しづらい
不正な値を送れる
複雑なバリデーションをしていなかった
JSのライブラリ
いつバリデーションするか?
入力時に判定していた
しかし全角数字を打てなかった
入力後をonBlurでハンドリングするようにした
注意点
type指定すると勝手にバリデーションされる
不具合のようにみえる
入力間違いに気づけない
送信させない
disabled属性
フィードバックする
SucessやFailをトーストで通知
Lottieがお手軽
https://airbnb.design/lottie/
サーバーでバリデーションする
小数点やeを紛れ込ませる
別タブでフォームを開く
cURLで直接サーバーを叩ける
しょうもないバグに気づけない
実装されるべき機能が漏れがち
実装されるべき機能が多い
取捨選択を誤るとUXバグにつながる
気づける仕組みで担保する取り組み
ガイドライン・デザインシステム・コンポーネント定義
@air-kit/air-kit
https://www.npmjs.com/package/@air-kit/air-kit
Input要素の振る舞いをサービス群で統一
QA項目をUIに対するインテグレーションテスト実施
dom-testing-libraryという解決策
GitHUb.icon https://github.com/testing-library/dom-testing-library
Enzyme
react-reduxやrouterなどつないだままテストできる
APIにつないだテストもできる
ロギング
バリデーションできたことを監視
Reduxのmiddlewareでどうアクションが発火したのか監視
集計
Google Analytics
Firebase
BigQuery
https://gyazo.com/742a18cb3a48c65b08deaad53cb45269
個人情報が絡むのはとらない
ロギングの再生
ログを見やすいようにする
時系列に再生
Seleniumで愚直に
親切機能を盛りすぎるとバグの温床にもなりうる
https://www.amazon.co.jp/Form-Design-Patterns-English-Silver-ebook/dp/B07JB7DV9L