rm /blog

IT系技術職のおっさんがIT技術とかライブとか日常とか雑多に語るブログです。* 本ブログに書かれている内容は個人の意見・感想であり、特定の組織に属するものではありません。/All opinions are my own.*

【ストレイテナー】【SE雑談】テナモバの「今日の一曲」に見る文字列ソート談議+α

ストレイテナー結成20周年を記念して開設された会員制モバイルサイト「テナモバ」。
当然のごとく速攻で入会したわけだが、まあ、それはいいとして、
この「テナモバ」では、「今日の一曲」というコーナーの中で、
日替わりでストレイテナーの楽曲を1つ紹介してくれる。
この「今日の一曲」だが、ツイッターのフォロワーさん方の報告等を見る限りでは、
「紹介される順番はアルファベット順になってんじゃないか?」という疑惑がうまれた。
少なくとも2017/8/16まではこのルールが適用されていたように思うのだが、
2017/8/17以降はこのルールが撤廃され、どうも完全ランダム性になったようだ。
(どうでもいいがこのことについて、裏でエンジニアが急きょ開発を任されたのでは…と予想している。事実だとすると同職としての思いもあり、なぜか同情してしまう)

まあ「完全ランダム性になった」というのもここ1日2日の紹介内容を見たうえでの経験的予想に過ぎず
実際裏でどんなロジックが動き、紹介される曲が選定されてるのかはわからないし、
同時に8/16までの「アルファベット順」というのも数日間の動向を見たうえでの経験的予想に過ぎないため、
要するにどこまでいっても「予想」の域を出ないのだが、
もし仮に「アルファベット順」だったとして、という仮定が成り立っていたとすると
どういう曲順で曲が紹介されていったのか?を論じてみたい。
これはどちらかというとプログラマとしてのソート順に関するロジック考察が主たる題材であり、
たまたまソートされる材料(各要素)に「ストレイテナーの楽曲」がいるだけの、
要するに仕事に飽きたことによる暇つぶしである。
まあ読み物として見ていただければいい。


 

 
まず、記録している範囲での俺のテナモバの「今日の一曲」を挙げてみよう。

日付曲

8/14 CRY
8/15 Curtain Falls
8/16 Dark Blue Day

この3日間において、先頭が「C」始まりの曲が2曲続き、その後「D」の「Dark Blue Day」になった。
記録していないだけでこれ以前の日にも「B」始まりの曲~「C」始まりの曲があったので、
この3日間も含めた動向から「アルファベット順」は難なくたどり着く予想結果だろう。

ここで注目しておきたいのが、「Curtain Falls」⇒「Dark Blue Day」となっているところ。
テナーの楽曲を「D」始まりで単純ソートすると、一番先頭に来るのは「DAY TO DAY」になる。
半角アルファベット等のASCII文字は異なる文字コード間でも互換性があり、大文字⇒小文字の順に並んでいるため、
Dark Blue Day」よりは「DAY TO DAY」のほうが(2文字目の"a"と"A"を比べると"A"のほうが)若いと判断され
必然的に「DAY TO DAY」が先に来るはずである。
にも関わらず「Dark Blue Day」が先に来たことから推察するに、
曲名を大文字に変換したうえでソートしている、
という予想ができる。
これによれば「D」始まりの曲は

  • Dark Blue Day
  • Dark City
  • DAY TO DAY
  • Dead Head Beat
  • Diamond Phillips
  • Discography
  • Dive
  • DJ ROLL
  • DON'T FOLLOW THE LIGHT
  • DONKEY BOOGIE DODO
  • DOUBLE HEADER
  • DRASTIC TRANSPOSITION
  • DSCGRPHY [DECADE DISCO MIX]

となったであろう。(「曲名を大文字に変換したうえでソート」が続いていればこうなっただろう、という予想である)




テナモバ開設は2017/8/7の昼である。
8/14の「CRY」を記録するまで8/7を含めて10日分ある。
この10日間が全て「曲名を大文字に変換したうえでソート」されていたとして逆算すると、
記録していなかった範囲を含めて以下のように紹介されていたはずだ。

日付曲

8/ 7(※予想) BOUNDER ADVENTURE or(※) Blue Sinks In Green
8/ 8(※予想) BRAND NEW EVERYTHING
8/ 9(※予想) Breaking Ground
8/10(※予想) BRILLIANT DREAMER
8/11(※予想) CLARITY
8/12(※予想) CLONE
8/13(※予想) COLD SLEEP
8/14 CRY
8/15 Curtain Falls
8/16 Dark Blue Day

(※)「BOUNDER ADVENTURE」はEarly Years収録曲なので、扱いが微妙という認識でいる(詳細後述)。
「BOUNDER ADVENTURE」を除くと順番的に「Blue Sinks In Green」が位置する。


しかし一方で、とあるフォロワーさんが8月8日が誕生日で、「誕生日にBIRTHDAYが紹介された!」と言っていたので、
「基本的には大文字に変換してソートだが、会員の誕生日だけはルールを無視して強制的に「BIRTHDAY」を紹介する」
というようなロジックが組まれていたのかもしれない。
(あるいは、基本ルールがランダム選定になっただけで、誕生日にBIRTHDAYを紹介する特別ルールは残存している可能性もある)
そのフォロワーさんとは、話している限り、俺自身が体験したソート順と大分近いものを紹介されていたらしいが、
聞いている話だと、「M」始まりの曲を紹介されていた人や、「ネクサス」等の日本語名の曲を紹介されていた人もいたようなので、
「アルファベット順だが、各会員の開始位置はバラバラ」というのが実情だったように見受けられる。
その「バラバラ」さをどこで決定づけていたのか(会員登録の順序等か?)は全く予想できないが、
とにかく実態として周囲の記録を照らし合わせるとこのような背景が考察できる。




しかし、↑の考察から得られた仕様は「曲名を大文字にしてソート」であったが、
これはせいぜいASCII文字の範疇の話であって、日本語の曲がどのようにソートされていたのかを決定づける内容ではない。
有名な話ではあるが、例えばSJISUnicodeでは、同じ漢字でも付番位置が異なる為、
単純にそれぞれのコードで昇順(ないし降順)で並べると順序が一致しない。
テナーの曲で実例を挙げると、

SJIS昇順Unicode昇順


(896A)ぐ鳥
(8A6F)
(8AEF)跡の街

(U+6CF3)ぐ鳥
(U+77AC)きをしない猫
(U+7F8A)の群れは丘を登る

となる。()内は各々の文字コードにおけるコード値。
SJISでソートしている場合、曲名に漢字を持つ曲で先頭に来るのは「泳ぐ鳥」になり、以後「覚星」「奇跡の街」と続くが
Unicodeでソートしている場合、曲名に漢字を持つ曲で先頭に来るのがそもそも「冬の太陽」になり、
「泳ぐ鳥」は10番目に位置するうえ、続く曲も「瞬きをしない猫」「羊の群れは丘を登る」となる。
少なくとも俺の周囲のフォロワーさんで、これらの「漢字の曲」がきた事例を聞いていないので、
昇順ソートしていた場合にどの文字コードを基準にソートしていたのかまでは予想すらたたなかったが、
内部的にどの文字コードで曲名を保持していたのかというのは少し気になるところだ。
そこまで難しい漢字が使われている曲はないからSJISでもEUCでもUnicodeでも表示する分には問題ないだろうが、
昨今のWebサイトの標準的なつくりのトレンドからして恐らくUnicodeで保持していたと考えるのが妥当であろう。
ストレイテナー公式サイトもUTF-8だし…テナモバもUTF-8なんだろう、スマフォでサイトの文字コードの見方しらんが)

また同様に長音符(ー;UnicodeでU+30FC)も扱いが異なる為、「シーグラス」もソート後の位置が文字コードによって異なる。
「シ」始まりの曲、というのに限定してソートした場合

SJIS昇順Unicode昇順


(815B)グラス
(838B)エット
(8393)クロ
(8393)デレラソン

(U+30EB)エット
(U+30F3)クロ
(U+30F3)デレラソン
(U+30FC)グラス

となる。要するにSJISでは一番先頭に来るがUnicodeでは一番後ろに位置させられる。
これは長音符を持つ文字のソートや検索においてよく遭遇する問題である。
長音符には似たような形の文字があり、例えば「全角ダッシュ(―)」「全角ハイフン(‐)」「全角マイナス(-)」等がある。
SJISUnicodeでの文字コードをまとめると以下の通りとなる。

No.文字SJISUnicode

1 長音符(ー) 815B U+30FC
2 全角ダッシュ(―) 815C U+2015
3 全角ハイフン(‐) 815D U+2010
4 全角マイナス(‐) 817C U+FFFD

上記の通り、SJISではこの辺の文字は同じようなコード付近に集中していて、どの文字使ってもソート結果は変わらないが、
Unicodeでは上述したようにコード位置がだいぶ離れて点在している関係で、使う文字によってソート位置が変わってくる。
例えばソートに全角ダッシュや全角ハイフンを使うと、コード値が全角カタカナ(U+3xxx系)より若い関係で、SJISと同じようにカタカナよりも上の方にソートされる⇒結果的にSJISと同じになる。
「旧システムがSJISで新システムからUTF-8にしますがソート順と表示は変えたくないんです(^^」
みたいなことを言われたときに効果を発揮する(発揮させなくてはならない)やり方である。(悲しいことだが実体験だ)




ところで、本項の主旨からすると最早余談になるが、
こうして並べてみると、改めてストレイテナーの楽曲の豊かさに驚かされる。
曲名見るだけでメロディが思い浮かび、思い返したその1曲1曲が漏れなく心に沁みわたり、「真っ直ぐにされる」
名曲揃い、いや名曲しかないのである。
改めてストレイテナー結成20周年をお祝いしたい。おめでとうストレイテナー!!

余談続きでもう少し延長させてもらうと、
上に挙げた曲目のうち、「BOUNDER ADVENTURE」「DOUBLE HEADER」「DRASTIC TRANSPOSITION」はEarly Years収録の作品であり、
公式には取り上げられていない楽曲である。
これ以外にもEarly Years収録曲はあるが、それらの曲が「今日の一曲」で選定されるかというのは一つのポイントだと思っている。
(これはソート順云々とは無関係で単にファンとしての確認ポイント)
Early Years収録曲のうち、「YES,SIR!」だけは最早4人の曲として完全アレンジが施されライブでも立ち位置が確立された曲という印象があるが、
それ以外は公式に存在を認知されていない節もあり、果たして「今日の一曲」に名を連ねるのかというのは見ものだ。
公式で紹介されていない以上は恐らく出てこないのだろうと予想しているが、
かといってEarly Yearsの曲を全て非公開にしてしまうと上述した「YES,SIR!」も出てこない。
一方で、Early Yearsの曲の中で「SKYLAB HURRICANE」は選定された実績がある(2017/8/17実績)が、
これはTENDERのカップリングにアレンジ版がいる(ため、公式紹介のラインナップにいるにはいる)から、という理由から
選定対象になっているという見方もできる(こじつけ感あるが…)
まあTENDERのカップリングは曲名の末尾に"(Hurricane Mix)"と付いてて、
テナモバで紹介されたのは曲名末尾に何もついていないものだったから、その点では「Early Years版が紹介された」と見做すこともできなくはないのだが。
ここを含め、選定する母体としての楽曲リストがどうなっているのかは楽しみにしている点の一つでもある。

もっと細かいことを言い出すと(ああテナー大好きすぎて余談止まらんw)
テナーの曲には様々なアレンジのVerが複数あるので、
例えば↑に挙げた中だけでも「DJ ROLL」は

  • 「SILVER RECORD」収録版
  • 「LOST WORLD'S ANTHOLOGY」収録版(VIDEO ADDICT EDIT)
  • 「SOFT」収録版

で3つのVerが存在しており、それぞれが別個の曲として選定されるのか?というのもまた楽しみの一つである。
加えて、↑に挙げた中だと「DISCOGRAPHY」と「DSCGRPHY [DECADE DISCO MIX]」は曲名が明確にわかれているが
同一の曲をもとにしたアレンジVerには変わりなく、これらがどうなるのか?というのも同様である。
(まあ、この2つは区別されそうだな、なんとなく)
あと、アレンジものでいうと、
「BERSERKER TUNE」と「BERSERKER TUNE(STOUT Ver.)」は最早完全な別物なので、
これは明確に区別したほうがいいんじゃないか?という感じもしているが、どうなのだろう、とか、
いろいろ楽しみにしたいポイントがあるのだ。

そしてさらに、こういうこと言い出すとキリがないのだが(ああテナー大好きすぎて余談止(ry)
例えばSIX DAY WONDERのカップリングやNexus Bonus Disc、Behind The Tokyo収録曲にあるいわゆる「ライブ音源」版は
果たしてオリジナル版と明確にわかれて選定されるのかというのも確認したいところではある。
恐らく区別されない(オリジナルと同じ扱いになる)と思うのだが、果たしてどうなのか?
また、少し違うが、Super Magical Illusionのカップリングのライブ音源(18分前後のやつ)とかはさすがにないよなあ~?とか、
そのあたりも気になるところである。




とりあえず最後にもう一回言っておくと
ストレイテナー結成20周年おめでとうございます!
どこまででもついていきます。