Phtosynth入社3ヶ月目、ピチピチの新人です。
前職は家電屋で27年テレビ作ってました。
モノを作る上で、割とメジャーな不具合に「ユーザーの連続操作」を起因とするものがあります。
今回は「ボタン連打」って何故発生して、何が起こるのか?どう対策すべきか?について語ります。
その指、止められますか?
連打したことありますよね?
エレベータが来ない、チケットが発券されない、推しのチケット発売1秒前。連打しちゃいますよね?でも、その裏ではシステムが悲鳴をあげています…
あ、ゲームの連打は別ですよ?16連打とか、張り手とか、キックとか、ビリビリとか。積極的に連打してください。
人はなぜボタンを攻め立てるのか
どうして連打しちゃうんでしょうね?
シチュエーション別にみてみましょう。
応答の遅延が生む連打
ブラウザとか触ってて、応答が遅い時、連打しちゃいますよね?
処理が見えなくて押されるボタン
え?今どうなってるの?コマンド届いてる?届いてない?といった処理状態が不明な時も連打しちゃうかも。
加速装置に思えてきた
「押せば押すほど早く処理される」という…訳ではない… みんな一度はやった事あるんじゃないかな?エレベータのボタン連打。
とにかく焦っている
推しのチケット購入1秒前とかね!(2回目)落ち着こう!
以前に動作不良を経験した
あれ?押せてる?こないだ一回じゃダメだったから、もう一回押しとこ。もっと押すか?的な。
連打への挑戦は終わらない
60種類の同時連打攻撃に耐える
私は最初にご紹介したようにテレビ屋でした。
開発的にはバックエンドからフレームワークからフロントエンドまで構築して、さらにCS部門、営業さん、企画、生産、工場、ハードウェア全般の方と仲良く製品を作り上げるのが仕事でした。
で、連打と戦った話です。
数えてみたらわかると思うんですけど、テレビのリモコンってかなりの数のボタンがついてるんですよね。大体60個くらい。
それを無意識に連打している方多いんですよね…
60種類の同時連打(ノーマル編)
UP選局とか、少しでも黒画面が出ようものなら
UP↑、UP↑、UP↑、UP↑、UP↑って…
そんなに連打しても選局早くならないから…
上記は一般的なケース。6回ボタンを押して2回しか処理されていません。4回が無駄です。
とはいえ、これはノーマルパターン。何の問題もありません。
60種類の同時連打(処理混線編)
連打のせいで、前後の処理がまざることがあります。
その際の連打対策は一般的に以下のような仕組みになります。
・全ての処理に番号をつける
・ユーザーインタフェースのみが処理番号を更新できる
・ユーザーインタフェースの処理番号と違う処理番号は全て無視
これで、不具合が激減します。
以下の図では処理間の時間が長めに見えますが、実際には極小で、0001の選局完了処理が、0002の選局開始より後に来ているパターンになります。
処理番号を付けないと、0001番の選局完了が、0002番の選局完了として処理されるシステムになります。
実際には処理していないのに、処理完了とされてしまう系は、一般的にその後の操作に不具合を与えます。
連打界隈では初歩の不具合です。
処理番号を付与したシステムはユーザーインタフェースのブロックと同様の無駄な処理を無視する効果ではあるのですが
・処理の混在による不具合が発生しない
・最速のタイミングで次の処理が発行される
と言う利点があります。
60種類の同時連打(優先度設定編)
何かの処理中に連打をされた時の対処法としては
・入力を無視する(最後の1つだけ有効にする)
・入力を無視する(最初の1つだけ有効にする)
があります。
最終的に、テレビリモコンの60種類のキーの連打に対して、処理の種類に優先度をつけて不要な処理を削除すると言う手法で、システムにとっての無茶な連打を防ぎ、ユーザーにとっては希望の入力を維持する、と言う手法を使っていました。
図のようにユーザーが「データ放送」⇨「音量UP」⇨「音声切替」⇨「1CH選局」⇨「2CH選局」⇨「録画予約」⇨「3CH選局」と連打した場合にも、実際に処理するのは「データ放送」⇨「1CH選局」⇨「録画予約」⇨「3CH選局」と重要な操作のみ行われます。
このように、処理に優先度をつけて間引くことは、ユーザー操作を維持しつつ、システム側の負担を減らすのに良い効果を出せています。
株式会社フォトシンスのエンジニアは、より良いユーザー体験を提供するために、日々様々な工夫をしています。
株式会社フォトシンスでは、一緒にプロダクトを成長させる様々なレイヤのエンジニアを募集しています。 photosynth.co.jp
Akerunにご興味のある方はこちらから akerun.com