Webサイトに跋扈する「操作された数字」と、プログラマー視点で考える「ランダムな数字」

ランダムな数字イメージ

julesfeatherstonebooks via Pixabay

とある旅行予約サイトの「あなた以外に○○人が見ています」の表示

 興味を引かれた話題があったので少し紹介する。とある旅行予約サイトに表示されている「今あなた以外に○○人が見ています(○○ people are looking at this flight)」という表示が、ランダムな数字だったという話だ(参照:GIGAZINEOphir Harpaz @ HackfestCA)。  こうした同時接続数を表示するサイトは時折みかける。「このサイトは流行っているようだな」と思わせる効果があるのだろう。予約が必要なサイトなら「売り切れないように早く買わなければ」と思わせる効果もあるはずだ。  これは現実の商売なら、サクラを雇って店の前に並ばせるようなものだ。そうした行為もネットなら簡単にできる。適当に数字を生成して画面に表示すればよい。そうすれば好きな数字を表示できる。サクラを雇うのと違ってお金も掛からない。人を騙すことになるので、やるべきではないが。  このように、数字だから客観性があるわけではない。数字はいくらでも捏造できる。その数字が本物かどうか見抜く目が求められている。冒頭の話では「38人も同時にチェックしているなんておかしい。多すぎる」と思い、調べてみたそうだ。  しかし、これがもっと少ない数字なら、そうした疑問も湧かなかっただろう。嘘を見抜くのは、とても難しい。

数字と言えば、その昔、ペニーオークションというものがあった

 こうしたネット上の数字の操作で思い出すのは、ペニーオークションだ。ペニーオークションとは、毎回の入札毎に手数料が必要になるネットオークションだ。小額からスタートして、何度も入札しているうちに手数料が高額になる。気付くと、商品自体は安く買えても、手数料で損をしているという状況が発生する。  また、多くのペニーオークションでは、何度も入札させるために入札者に偽装したbotを使っていた。そのため、コンピューターのプログラムと入札合戦を繰り広げることになる。当然、入札をおこなうbotは手数料を払っていない。巧妙にお金を搾り取る仕組みだ。  ペニーオークションは「安く買えるかも」という期待と、「負けるものか」という対抗心を煽る仕組みを持っていた。  ペニーオークションが日本で流行り始めたのは2010年頃だ。スパムメールが大量に飛び交っていたので、当時調べた記録が残っている。6月頃から情報を見かけるようになり、9月に調査した。  当時、サイト運営のためのプログラムが裏で売られていたようで、雨後の筍のように似た作りのサイトが存在していた。それなりの大手も参入しており、DMM.com の「ポイントオークション」は、消費者庁から措置命令をくらっている(参照:時事通信 – Yahoo!ニュース ※インターネットアーカイブ)。  ペニーオークションは、2012年に芸能界を巻き込んだ詐欺事件に発展した。ペニーオークション詐欺事件と呼ばれるもので、芸能人によるステルスマーケティングが大きく報道された(参照:nikkansports.com)。この事件を曲がり角に、ペニーオークションは急速にネットから消えていったように記憶している。  こうした例のように、ネットでは表示する数字に嘘を混ぜることで、閲覧者の行動をコントロールしたり誘導したりすることがある。  また、嘘の数字ではなくても、見せ方によりユーザーを誤認させようとすることは多い。点数の平均値と思わせておいて、複雑な計算式を用いて、そうではない数字を見せることもある。  嘘とまでは言えなくても、ユーザーを惑わせることは、日常的におこなわれている。そうした行為は、推奨されるものではない。場合によっては違法にもなる。

プログラマー視点の「ランダム」

 さて、最初の「ランダムな訪問者数」の話に戻ろう。実は「ランダム」というのは、プログラマーにとっては、とても関心の高い話題である。プログラムで使われるランダムには、様々な技術的な要素があるからだ。  現実の世界でランダムな数字を得るのは簡単だ。適当なサイコロを持って来て振ればよい。しかし、コンピューターの中にはサイコロはない。そこで「擬似乱数」と呼ばれる、計算で求める、不規則に見える数字を使う。  この場合、計算した疑似乱数を元に、次の疑似乱数を順次計算する。1→19→7→31→……のように、次々と数字を作っていくのだ。この時、計算をおこなう前の最初の数字をシード(種)と呼ぶ。そして、計算方法を乱数生成プログラム擬似乱数生成法などと呼ぶ。この疑似乱数を求める計算は、とても奥が深い(参照:良い乱数・悪い乱数)。  満遍なく、偏りがなく数字が出て欲しい。そして偶数、奇数、偶数、奇数……のような規則性がない方がよい。また、前の計算結果を元に計算する仕組みから、ぐるりと一周回ると、同じ数字の繰り返しが始まる。そうした周期が長い方がよい。  こうした条件を満たした良質な乱数は、科学の世界で求められる。大規模なシミュレーションをおこなう際には、可能な限りばらばらの数字のセットが必要になる。また、暗号の世界でも乱数が用いられる。その場合は、推測できない乱数を生成する必要がある。  それならば、良質な乱数を得るために複雑な計算をすればよいかというと、必ずしもそうではない。使用するマシンの性能によっては、精度は下げてもよいから高速に計算できた方がよいこともある。  たとえば古いゲーム機では、簡単に計算できる乱数が重宝された。また、ゲーム独自の結果を出すために、専用の乱数生成プログラムが用いられたりもした(参照:4Gamer.net)。  計算の起点になるシードの取り方にも様々な工夫がある。固定の値を用いることもあれば、時間を元にシードを作ることもある。また、ハードウェアの物理的な振る舞いを記録しておき、現実世界の不規則さをコンピューター内に取り込む方法もある(参照:/dev/random – Wikipedia)。計算前のシードの生成だけでも、様々なアイデアが存在して実際に利用されている。  冒頭の旅行予約サイトでは、JavaScript の Math.random を利用してランダムな人数を作っていた。JavaScript の Math.random も、語り始めると面白い話題なのだが、ここでは割愛しておく。JavaScript は HTML 内で実行される。ユーザーが見ているWebページ内で計算していたから、すぐにランダムだとばれてしまった。さらに、ランダムな数字が表示される場所の名前が「view_notification_random」となっていた。隠す気があるのかないのかと思ってしまう。  というわけで、「ランダムな数字」はプログラマーにとって関心が高い話題だという話を最後に書いた。私自身も、常々関心を持っている領域である。 <文/柳井政和>
やない まさかず。クロノス・クラウン合同会社の代表社員。ゲームやアプリの開発、プログラミング系技術書や記事、マンガの執筆をおこなう。2001年オンラインソフト大賞に入賞した『めもりーくりーなー』は、累計500万ダウンロード以上。2016年、第23回松本清張賞応募作『バックドア』が最終候補となり、改題した『裏切りのプログラム ハッカー探偵 鹿敷堂桂馬』にて文藝春秋から小説家デビュー。近著は新潮社『レトロゲームファクトリー』。2019年12月に Nintendo Switch で、個人で開発した『Little Bit War(リトルビットウォー)』を出した。2021年2月には、SBクリエイティブから『JavaScript[完全]入門』、4月にはエムディエヌコーポレーションから『プロフェッショナルWebプログラミング JavaScript』が出版された。