DON'T BE EVIL; それは誰のためですか?
雑感::think
序
世の中、プロダクトにせよサービスにせよユーザー軽視のものが増加している。
というよりも、インターネットに商売が乗り込んだ時代からずっと、その傾向が止まらないと言ったほうがいいのかもしれない。
サービス開始当初はユーザーオリエンテッドな志を掲げていても、やがてユーザーを踏みにじり、利益や都合を押し付けるのが当たり前になっているのが現状だ。
そして、それを「当たり前だ」として正当化させる発言も世に溢れている。
この記事ではそうしたことをひとつひとつ検証していきたい。
JavaScriptは「有効にしている」のではなく、「使わされている」である
「ほとんどの人はブラウザでJavaScriptを有効にしており、JavaScriptは歓迎されている」という言説を見るのだが、これは明らかに事実に反している。
まず、その「ほとんどのブラウザ」はChromium系列, Firefox系列(ほぼFirefox), Safari, Edge, IEに収まる。 これらはいずれもJavaScriptを利用可能なブラウザであり、デフォルトでJavaScriptが有効であり、通常はJavaScriptを無効にできないものも多い。
Firefoxに関しては表の設定にはJavaScriptを無効にする設定はないし、Google Chromeも相当深いところに設定がある。 ユーザー全体から見ればJavaScriptを無効にできる人は相当な手練であり、そもそも知識上の問題を含めてもJavaScriptがどういうもので、自分はどうしたいのかを判断できる人などごく一部である。
だから、 第一にJavaScriptがユーザーの自由意志によって能動的に有効にされているという理解をするのは間違いである。
そして、現実問題としてJavaScriptが無効な環境でまともにブラウジングできるサイトというのはごく少ない。 私はDilloやw3mなどを使うため、JavaScriptなしの環境でのブラウジングも結構多いのだが、近年はまともに使い物にならないため、私も やむなく Vivaldiを中心に使っている。 JavaScriptなしの環境では、Google検索結果のページもまともに表示できない可能性が高く、JavaScriptを常時無効にして過ごすのは検索エンジンを使わないという選択に近いし、ほとんどのサイトを見ないという意味にもなる。
人々はJavaScriptによるアニメーションや表示、その機能を好んでいるから有効にしているわけではない。JavaScriptがなければwebを利用することができないという状況によって使わないという選択肢を剥奪されているのである。
なお、JavaScriptでなければ表示できないページというのは、ターミナルウェブブラウザ、音声ブラウザ、点字ブラウザなどからは閲覧できない可能性が高く、極めて劣悪なアクセシビリティを提供していると言って差し支えない。
人の読む速度はまちまち
人が読む速度には極端な差がある。
私の場合、コンテキストレスでだいたい秒間120文字くらい。だから、ツイートなら長文でもだいたい1秒で読める。 本なら秒間200文字くらい。これは一般的なレベルでは結構早いほうだ。
だいたい、普通サイズの文字でスマホにいっぱい表示すると、6.7inch WQHDのスマートフォンでも毎秒画面上の2/3は読める速度だ。 PCで表示したときに無駄に洒落ついたデザインで表示していると1画面にかかる時間は1秒にも満たない。
そうつまり、表示するのに10秒程度かかる、「スクロールすると表示する」アニメーションをつけていると読んでいる時間よりも待っている時間のほうが10倍とかいうレベルで長いのだ。 このストレスたるや、二度とサイトを利用したくないと思うほどだ。
大して長くもないテキストを何ページにもわけるサイトも同罪だ。 これは例えば、Togetterやなんかもそうだ。ものすごく読みにくい。
さらに、私なんかは内容の要点をつかんでからじっくり読みたい派だし、小説も後から読む派である。 だからスキップして先を読んでから戻りたいのだが、「スクロールすると表示する」という方式はこの権利を剥奪する。
単に最初に読むだけならバックグラウンドでロードさせて放置していればいいだけだが、このような方式を取ることで非常に不快なエクスペリエンスを強要し、かつユーザーの読み速度やどのように読むかという自由を剥奪している。
検索してみれば分かるが、これは稀な意見ではない。
ユーザーの通信量を消費させる価値が本当にあるか
Chienomiは結構本文の長いサイトだが、基本的にページ容量は数十kBほどに留まる。
画像はどうしてもそれと比べると大きいが
#!/bin/zsh
setopt EXTENDED_GLOB
cd $1
mogrify -geometry x500 *
pngquant -f --ext .png -- *.png
mogrify -quality 65 *.jpeg *.jpg
という要領でできるだけ小さくするようにはしている。
こうした画像がある場面ではLightboxをロードするため容量をその分余計にとってしまうが、 Lightboxによる画像のロードは遅延評価であり、ユーザーが欲したものだけをロードする。 画像は非常に容量が大きいため、あくまで選択的であるべきということであり、Lightboxのロードは多くのユーザーにとって容量削減になる。
私の方針は徹底して 「ユーザーが欲しがらないものに容量をかけるな」 である。
最近、私のウェブサイトはConoHa WINGでホストしているものが多いため、転送容量の都合もなくはないが、 そんなことよりも「スマートフォンやテザリングでサイトを見ている人にとって、通信量は重大な負担である」ということだ。
追加量を考えると1GBあたり1000円とかなので、1MB1円だと考えることができる。 1ページで4MBをロードさせるサイトは、10ページで40円、100ページで400円を支払わせているのに近いというわけだ。
サイトにきて、読んでくれている人に対して負担を強いているわけである。
本文テキストなど、コンテンツを構成する上で必須のものはもちろん、ナビゲーションや補助スクリプトなど、ユーザーにとって明らかに有益な、少なくとも全員でなくともユーザーにとっての利益であるものは仕方ないとしよう。 もちろん、怠惰による膨張は許されないが。
だが、エンジニアの都合で、セールスの都合で、 来てくれた人に、強制で、目に見えないカタチで、負担を強いることは 果たして正義なのだろうか。
それは、ユーザーのことを考えているといえるのだろうか。
本当にそのウェブサイトは、その容量を支払うだけのメリットをユーザーに与える要素だけで構成されているだろうか。
トラッキング
大抵のウェブサイトにはトラッキングが埋め込まれている。 Google Analysticsもだし、ソーシャルボタンなどもそうだ。 さらに、サイト自身にもトラッキングが含まれていたりする。
まず、 トラッキングにおいてユーザーに対して同意がとれていると考えるのは誤りだ。
関知しない、あるいは利便性と引き換えだから構わないという人も多いが、その内容としてはトラッキングに対する知識が不足しているからという人が多い。 実際、セキュリティ講習においてトラッキングがどのようなものであるか、どのように利用可能であるかという点について説明しつつディスカッションを行うと、2時間後には半数程度が絶対反対に転じるくらいである。
だから、本質的にトラッキングを許容する人は多くても6割程度で、残りの人は嫌悪している(拒絶している)と考えて良い。
だが、望む望まざるにかかわらず、当たり前のように、強制的に、同意なくトラッキングを行っている。 もちろん、それによって利便性を提供するとしても、十分な事前説明をしているわけでもない。 トラッキングに使われるものとしてクッキーに関しては事前に許可を取らなければならないようになってきているが、十分な説明であるとはいい難く、表示するだけで、合意を得る前からクッキーを利用しているのが現実だ。
そして、法的な規制を受けるほど人々はトラッキングを嫌っているにも関わらず、 ユーザーに十分な理解を得ることなく、むしろ無知であること、あるいは回避できないことを利用してトラッキングを行うことは、ユーザーのことを考えての行為だと言えるだろうか。
そして、トラッキングを利用しているあなたは、DNT: 1
ヘッダーを尊重しているだろうか?
AIリコメンデーション
AIというのは、非常に大きな欠点として、「その正しさを検証するのが非常に難しい」という問題がある。
ユーザーオリエンテッドであるならば、AIはユーザーのための機能であり、 ユーザーにとって有益かどうかは向き合うべき重要な事項であるはずだ。
だが、利益を増加させるためのものであれば、ユーザーのエクスペリエンスを悪化させるものになる。
なぜか。それは根本的な「利益」の構造にある。
効果を検証するとき、通常「その時を境に変化する」ことを見る。 AIの導入によりユーザーエクスペリエンスが改善し、信頼を獲得し、6ヶ月後から成果が出たとする。 この場合、「AIの導入が効果的であった」という結論を出すのは難しく、AIの導入は失敗であり、他の方策に効果があったとみなしてしまう。
では即効性のある利益の向上とはなんであるかというと、詐術である。
例えば、ショッピングにおいて、「よく同時購入されているもの」あるいは「同時購入にお勧めのもの」として関連がありそうに見える、実際は必要のないものを提示する。 すると、本来は必要ないのでユーザーは購入する可能性が低い。特に同時購入する可能性は低い。だが、それを必要であると思い込ませることができれば、ユーザーが購入する可能性は高くなる。 これによってユーザーの同時購入数や同時購入額を上げることができ、成果が出たように見える。
もちろん、この場合、成果は出るが、ユーザーエクスペリエンスは下がる。 やがて「定評」として「やり方が汚い」という認識が定着し、何かのキッカケで大きなユーザー離脱につながるだろう。
これは、退会を非常に困難にするサービスなどでも起きることだ。
また、「AIの効果を高める」方法として、「誤クリックを誘発させる」という本末転倒なこともよくある。
クリック(タップ)ターゲットに対してタイミングのラグを利用するなどして、ユーザーが本来意図したものではない操作を誘発することによって、「AIのリコメンデーションをユーザーが受け入れたかのように見えるアクション」を作りだすことができる。 この場合、何をリコメンドしたかということとは関係がないのだが、先にAIによるリコメンデーションが存在し、同時に、あるいは後からそうした誤操作を誘発させる機能を追加すると、AIの効果が高まったかのように見える。
結局のところ、「数字では効果は見えない」のだ。 AI機能は総じて直接的に数字を変化させるものではなく、AI機能にそのような効果を発生させようとすると、AIとは関係ない部分によってもたらされることがほとんどなのである。
AIの効用は、多様な人々の実際のエクスペリエンスによって測られるべきであり、特にネガティブな反応を解消していくことが重要になる。
「嫌がっている」ことを表明することはできるか
数値を重視した判断をしようとすると、数値をよくするために「ネガティブな反応をしづらくする」という方法をとりがちである。
サービス全体としては使わざるをえないが、その体験が不快である、ということは、そのサービスそのものを腐敗させる土壌になる。
わかりやすい例がYouTubeである。
YouTubeの「興味なし」アクションは、
- 見たことがある
- 好みではない
の2択であり、以前はあった
- おすすめが適切でない
- チャンネルに関心がない
がなくなっている。
別に「チャンネルをおすすめに表示しない」というオプションもあるのだが、これはホームにおけるタイムアウトに過ぎず、関連動画にはチャンネルが出るし、類似の動画を排除することができない。
さらに大きな問題として、「無断アップロード動画が表示される頻度が非常に高い」という問題がある。 私のホームだと、果てしない「興味なし」クリックの末にだいぶ軽減されたが、無断アップロード、著作権侵害などの動画が掲載されるのは宿命的なものであるから仮に仕方ないとしよう。 ところが、問題は、それを理由に拒絶する方法がないことであり、「無断アップロード動画をおすすめしないで欲しい」ということを伝える方法がなく、「興味なし」アクションをし続けていると、同一カテゴリの動画が出てこないようになる。 そのカテゴリの動画が嫌なわけではなく、無断アップロードだから見たくないだけなのにだ。
これは「報告」のほうにあるのじゃないか、と思うかもしれないが、「報告」は以前はこうした著作権侵害に関する項目はなかったし、最近追加されたもののあくまで自身がその作者でなければならないという条件が付され、別ページに飛ばされる形式だ。
つまり、「無断アップロードを自動再生したりおすすめに入れるのをやめてほしい」といったことができない。
また、このカテゴリの動画を含めてほしくないということもできないし、例えば「粗暴な言動の人たちの動画を見たくない」といった傾向的な拒否もできない。(後者はAIの分析力の欠如であるが)
また、こうした問題ではDLSiteも大きい。
DLSiteには非表示機能があるが、DLSiteはその性質上、作品には性的な要素が多く、ここでフィルタされるのは性癖に関するものである。 さらにいえば、同人作品などでは極端な表現も多いから、例え同人誌的性的表現そのものを受け入れる人であっても嫌悪を示す属性というのは普通に存在する。 「同性愛」「陵辱」「拷問」「異種姦」などは特にセンシティブなものの例と言えるのではないだろうか。
だからこそのフィルタ機能なのだが、
- リストしてから全部 表示し終わった後で 順に画像を隠していく
- これが対象になるのは検索のみであり、 おすすめ表示や新着表示には容赦なくフィルタしているカテゴリのものが表示される
という問題があり、全く機能しない。
第一に、検索で表示する前にフィルタ条件を除外して検索すべきであるし、仮に負荷上の理由でそうできないとしても、表示する前にリストをJavaScriptで処理して除外することは普通にできるはずである。 また、おすすめ表示に関しては特になんらかのアルゴリズムを経て表示しているはずであり、フィルタをその時点で適用することはして当たり前の話だ。
こうしたユーザーにとって「これは非常に嫌だからやめてほしい」という意思を表明する手段を用意し、それに対応することは誠実なことだが、そうはしないことが多い。 なぜならば、そうした機能をつけると当然ながらネガティブな意見があつまる。評価指標としてはマイナスに振れる。逆にそのような機能がなければ、機能そのものが「こんなに効果が出ています」という指標で測るようになり、成功をアピールすることができる。これは、上司に対しても、世間に対しても、株主に対しても良い印象を与えることになるだろう。
だが、そうした「真実を反映させないことで見せかける」ことは邪悪なことである。
ユーザーの意図を反映しているか
続いてYouTubeだが、YouTubeはチャンネル登録を解除すると、執拗におすすめ動画に載せるようになる。
当然ながら、長く登録していたようなチャンネルは何事もなければ登録したままであるはずで、何らかの理由があるからこそ解除するのである。 これは、「解除理由はそのチャンネルに対する否定的感情である」可能性が高いことを意味する。
にも関わらず、「チャンネル登録していたチャンネルの動画はこれまでよく見ていた」ということを理由におすすめに上げるのは間違っているし、「チャンネル登録していた動画の動画を出せば見る可能性が高い」という考えならなおさら邪悪である。
ユーザーの心情を考えれば、おすすめがチャンネル登録を解除したチャンネルの動画に占拠されるのは非常に嫌なものである可能性が高い。 仮にそこまで嫌悪感を持っていないとしても、動画を継続的に見ようという意思がないからこそチャンネル登録を解除しているわけで、今すぐにそのチャンネルの動画を見たいわけではないはずである。 それでも常におすすめに表示されるという状態であれば、「チャンネルを表示しない」とするより他なく、そのような極端な行動を要求されるとチャンネル登録解除を躊躇ったり、 おすすめに表示させないために チャンネルの再登録をしたりすることになるだろう。 それは狙いどおりなのかもしれないが、ユーザーに対して苦痛を与えることで折れさせているわけで、明らかに邪悪な行為である。
また、将棋ウォーズはブロック機能がなく、唯一違反報告機能があるだけなのだが、 違反報告したユーザーともマッチングされる。
違反報告するほど不快な思いをした相手と対局したいはずもなく、しかもそのような相手と何度も当てるというのはユーザーの意思を握りつぶす邪悪なものである。
特に、「ユーザーが望まない」「ユーザーが嫌がっている」という意思表示を無視するのは邪悪だ。
in Twitter
Twitterは全くユーザーオリエンテッドではないサービスの代表格なので、いくつか挙げよう。 ちなみに、LINEもかなり類似の問題を抱えているが、程度としてはTwitterのほうが重い。
入力の監視
Twitterはキーストロークを監視している。
なんのためかは定かではないが、このためにFcitx環境では入力中の文字が勝手に確定される、文字が抜ける、表示上の文字が失われるなど多くの問題が発生する。
仮にサジェストなどのために内容を見る必要があるとしても、それは確定された「入力値」を見るべきであり、キーストロークを監視すべきではない。
無限に重くなるアプリケーション
Twitter, Tweetdeckともに、しばらく表示を続けているとブラウザのCPU使用率は100%に達し、まともに動作しなくなる。
普通に考えて、Twitterに求められる機能においてそこまで激しくCPUを使うような必要性はないはずだし、それが機能によるものだとしても、そこまでの負担をさせるくらいであればそんな機能はないほうが良いはずである。
意図しない振る舞い
特にTweetdeckではクリックイベントの発生がクリックのタイミングとズレており、さらに座標を基準としているために、
- ツイートをクリックしたら違うツイートが開く
- ツイートに対してRTやLikeしたら違うツイートに対してしたことになる
- ツイートしようと思ってテキストボックスをクリックしたらツイートが開かれてしまう
ということが頻繁に起きる。
また、Mでミュート、Xでブロックといったキーバインドは、非常に事故を起こしやすい。
通知
通知の件数を過剰に盛る。
つまり、20件以上の通知があると表示して、実際には2件の新着通知があり、通知を開くとごく短時間青く表示される新着通知表示は4件(つまり、2件の新着ではない通知も新着通知とする)というような振る舞いをする。
これにより、新着通知の機能はまるで役に立たない。
さらに、あまりにも通知がないと、通知に全く関係のない人のツイートを載せるようになる。 そのうち、通知欄はTwitterのおすすめツイートで埋め尽くされる。
ブロックとミュートと表示
ブロック及びミュートはTwitter側でフィルタしないため、サードパーティアプリを使うとブロックやミュートは普通に無視されたりする。(これは、自分がブロックしているものが表示されてしまうという問題である) 当然ながら、ブロックしているものをデータとして渡してしまうのは正しくない。
それはまだしも、
- 自分がブロックしているユーザーのツイートに対するリアクションを表示する
- 自分をブロックしているユーザーに対するフォロイーの会話スレッドを表示する
などは、ツイートを辿ることができないにも関わらず(特に後者)その断片だけを表示し、しかもあたかも辿れるかのように見せるわけで、非常に不快な体験である。
入力判定
マウスやタップによる正確な操作というのは極めて難しい。
だから、操作対象が小さかったり、操作対象のサイズに対して当たり判定が小さかったり、操作対象が密集していたり、致命的な操作を行うものが隣接していたりするのは非常にストレスフルである。
操作対象は十分に大きくするか、曖昧に判定すべきであり、取り返しがつかない、あるいは重大な操作対象は離したり、階層深くすべきである。
ポイントアンドシューティング
マウスやタップの位置合わせは難しいが、一方で位置を合わせたあとその付近を連打するのはあまり難しくない。 連打速度よりも速く状態を更新することは非常に難しく、できたとしても人間は連打速度よりも速く更新を認識することはできない。
これによって起きる問題は明確だ。 ダイアログを「はい」「いいえ」と並べたあと、次のダイアログで「いいえ」「はい」と並べるとものすごくストレスの高いUIが出来上がる。
基本的には、「同一ポイントに対する操作で一貫した意図を保つことができるようにすべきである」ということになる。
これは、ふたつの意味がある。
ひとつは、連打によって一定の選択をしつづけられるようにするということだ。
そしてもうひとつは、「クリックしたときの意味がかわるとき、クリックポイントが変わるようにする」ということだ。
後者はわかりにくいかもしれない。 クリックポイントが維持されたとき、「連打回数を正確に保たない人が多い」。 つまり、同じ場所で連打したときに、それまでの操作と異なる意味の動作が入ってしまうと暴発を招く。 だから、操作の意味がかわるときにクリックポイントを変えることで、過剰に連打したとしても意図しない動作を発生させないようにするのである。
そして、この話には例外がある。 それは、 Confirmationについては同一クリックポイントで連打させてはいけない ということだ。
何かを削除するときに、「二重に確認する」必要があるようにケースにおいては、ユーザーを立ち止まらせることが必要である。 だから、連打による操作が可能で、頻繁に連打するような状態を作ると確認の意味がなくなってしまう。
特に重要なケースにおいては、タイピングなど異なる操作を交ぜることを求めるのが良い。 例えば、GitHubのリポジトリ削除においては、リポジトリ名をタイプする必要がある。
一方、このような確認が本当に必要なのかについてもよく考える必要がある。 私がやっていたMMORPGでは、expiredした、捨てる以外に処理方法がない(インベントリを圧迫する)アイテムを捨てるときに、ドラッグアンドドロップによってインベントリから出した上で「このアイテムを捨てます」と入力することを求められた。 これが相当な数が発生するため、非常に鬱陶しかった。
キーボード操作
一般的なウェブブラウジングではある程度許されるが、ゲームなどにおいて重要になるのが、キーボードでの操作ができるかどうかである。
ここでいうゲームは、本格的なアクションゲームはそのために必然的な操作系を持つため、そうしたものではなく、いわゆるソシャゲに属するようなものの話だと思ってもらっていい。
現在、多くのPCゲームがアドベンチャーパートを持つ形式になっているが、いわゆる美少女ゲームの場合基本的にはキーボードで操作することが想定され、そのためキーボードでの操作体系もゲームによって異なるが、ある程度洗練された状態になっている。 対して、ブラウザゲームなどは特に、キーボードでの操作ができないようになっているものや、非常に限定的であるものが少なくない。
状況にもよるが、アドベンチャーパートのセリフ送りはキーボードで行えたほうが良いし、ウェブであってもものによってはキーボードで操作できたほうが良い。それにRPGでのコマンド選択などもキーボードでの操作を好む場合もあるはずだ。
確かに、マウス操作で操作できれば、操作そのものは可能であるから支障ないとはいえるが、それによってキーボードという標準的な入力デバイスを軽視すべきではない。 どのような操作を可能にすべきかは、「操作が可能だから良い」ではなく、ユーザービリティに向き合って決められるべきものだ。
応答速度
応答速度は速すぎてもよくないのだが、もっと重要なこととして、 webベースのテクノロジにおいては、応答速度が低下するようなアプリケーション設計をしてはならない というのは鉄則である。
これは、 ユーザーが実際にクリックしたのと違う場所でクリックイベントが発火し、全く予期しない動作を引き起こすから だ。
この問題は、単純にコールバック処理が重いだけでは発生しない。例えば
<html>
<body>
<div><a href="javascript:a()">A LINK</a></div>
<div><a href="javascript:b()">B LINK</a></div>
<script>
function a() {
var date = new Date()
while((new Date()) - date < 3000) {
null
}alert("AAAAA")
}function b() {
alert("BBBBB")
}</script>
</body>
</html>
というコードでは発生しないのだ。 クリックイベントそのものが飲まれてしまう場合もあるが、BをクリックしてAのイベントを発生させることはできない。
ダメなのは、座標ベースで処理するようなケース、無駄にイベントを監視しすぎているケースなどだ。
誠実であることは最終的には報われる
少なくとも今のインターネットビジネスにおいては、誠実であろうとすることは、コストがかかり、損であるという考え方が普通だし、押し付けるほうが話が早く、ユーザーはそれに従うし、特にシェアが高いなどユーザーとしては従わざるをえないため、強気な振る舞いをするのが当たり前のように受け止められている。
そして、従わざるをえないために従っていることを、あるいは知らないがために無抵抗であることを、ユーザーが望んでいるかのように言いすらする。
勝者の理論、強者の理論で言えば誠実であろうとすること、ユーザーに寄り添おうとすることなど無駄であり、歯医者の言い訳だということになるのだが、私の観測と経験の限りでは、「早く」「勝利できるか」はさておき、長期的に見れば良いこともある。
ユーザー離れを防いだり、信頼を獲得することで良いサービスにユーザーが育ててくれたり、良いユーザー文化が育まれたり、何か問題があったときでも支えてくれたりする。
目先のことを考えると邪悪に染まりがちだが、ユーザーのことを考え、ユーザーのことを見てやることは決して無駄なことではない。