はじめに
こんにちは、だしまきです。
私はスポーツ全般が好きなので今開催されているアジア大会をちょいちょい見ているですが、
セパタクローってスポーツやってる事とんでもないですね。
滅茶苦茶面白くて見入ってしまいました。
こういう大会は普段見ないようなスポーツを見る良い機会ですね。
セパタクローも凄かったのですがもう一つ私の中で熱かったのが
eスポーツの某落ち物パズルゲームです。
小学生の頃にハマって当時はかなりやり込んでいました。
10年ぶりくらいに体験版で久々にやってみたのですが、意外と連鎖は覚えてるものですね。
13連鎖くらいまでは頑張って組めました。
とはいえ速度もお粗末なものでレベルが違うのですが・・・
何にせよ上手いプレーは見てるだけでも気持ちよくなれるので楽しいですね。
落ちものパズルから学ぶキュー
本題まで右往左往しましたが、そんなこんなで最近改めて落ちものパズルゲームの動画を見ているのですが、
学ぶ意味も含めて、連鎖ジェネレーターなるものを生成AIで作っていました。

楽しい。
ここからどうタイトルに繋がるかと言いますと、
コードを眺めていて「おっ」と思ったのが、次に落ちてくる玉(ネクスト)の仕組みです。
私は開発についての知見はほとんど無いです。
ですが、インフラでもメールキューというのは日常的に身近な存在なので今回改めてキューについて理解してみようと思いました。
キューってなに?
キューは、先に入れたものから順番に取り出す入れ物。英語の queue は「行列」という意味。
レジに並ぶ行列を思い浮かべるのが個人的にはイメージしやすかったです。
新しく来た人は列の一番後ろに並び、会計は列の一番前の人から順番に進みます。横入りはできません。
この「先に来た順」のルールを、先入れ先出し(First In, First Out を略してFIFO)と呼ぶようです。
キューでやることは、基本的に2つだけです。
- 後ろに並べる(エンキュー)
- 前から取り出す(デキュー)
キューが役に立つのは、仕事を受け付ける速さと、処理する速さが違うときです。
受け付けたものをいったん行列に並べておけば、処理する側は自分のペースで1つずつ片付けられます。
メールサーバーは、まさに「受け付ける速さと処理する速さが違う」仕事をしているんですね。
送信の依頼はタイミングによっては一度にどっと来ますが、相手のサーバーへの配送には時間がかかりますし、相手が応答しないこともあります。
そこで、受け付けたメールをいったんキューに並べ、順番に配送していく流れになるんですね。
今回作ってたパズルゲームの、落として積むモードの「次に落ちてくる玉」もよく考えればキューか。キューか?となったので調べてみました。
何故かというとキューは先程出した後ろに並べて前から取り出す流れに基本なるはずが、これは取り出しても消さないキューになっているんですよね。
これも果たしてキューと呼んでも良いものかはてさてとなってました。
調べてみたところ、キューかどうかは「中身を消すかどうか」ではなく、
「並んだ順番に取り出せるかどうか」で決まるそうです。
ネクストは必ず並んだ順に出てくるので、使う側から見ればちゃんとキューなんですね。
ただ、「1手戻す」で読み位置を巻き戻せるのは、純粋なキューにはない機能です。
なので正確には、「キューとして使いつつ、使った分も記録として残している」というのが近そうです。
まとめ
- キューは、先に入れたものから順に取り出す入れ物。
- メールサーバーは、受け付けたメールをキューに並べて順に配送し、終わったら消している。
- 消すか残すかは、データの大きさや「巻き戻したいか」で決まる設計の違い。
開発でよく使われるワードでも意外と身近な所にあったりするものですね。
こういう簡易的に何かを作ってその中で学びがあるのはかなり有益なので続けていこうと思います。

