marich1224 のメモ

上限 140 文字の SNS ばっかりやってたら長文書けなくなったのでリハビリします.

QRコードを解読した話【LAWSON presents 夏川椎菜 2nd Live Tour 2022 MAKEOVER 参加記】

注意

この記事では,LAWSON presents 夏川椎菜 2nd Live Tour 2022 MAKEOVER (以下,MAKEOVER) 公演中に登場した QR コード*1が何であったのかに関する重大なネタバレがあります.セトリのネタバレは(1曲を除いて)ありません.

発売した Blu-ray を見ながら自力解読したい方はご注意ください.

また,あまりにも時間が経ちすぎてしまったため,話の展開に合わせて一部脚色している箇所が(たぶん)あります.そちらもご容赦ください.

 

追記 (2022年11月14日 4:17):

夏川椎菜さんがこのブログをご覧になったようです.

 

夏川椎菜さんがこのブログをご覧になったようです.

 

推しに駄文が読まれてしまいましたね…….

事の顛末を簡潔に説明します.

  • 昨日,2022年11月13日 は 「MAKEOVER」Blu-ray発売記念のプレミア上映会でした.最高でした.
  • その中で「 #ナンスに質問 」をつけたツイートを拾って,舞台挨拶中に質問に答えてくれました.
  • この企画中に QR コードの話になりました.
  • 夏川さん「知ってんだからね!アレ解読した人いるんでしょ!!まさかメモって読む人が現れるとは……」

他に MAKEOVER の QR コード解読記事は意外にも見つからなかったので,十中八九この記事でしょう.発言を聞くに割とちゃんと読んでくれていたようでしたので,だいぶ恥ずかしかったです.夏川さん,読者の皆さん,お目汚し失礼致しました…….

 

推しに読んでもらえるような記事を書けるに至ったのは,たくさんの皆さんのご支援があってこそです.そこでこの追記では,巻き添えスペシャルサンクスの皆さんのツイートを引用していこうと思います!!

追記 (2022年11月12日 15:00):

想像を絶する数の人々にこの記事をご覧いただけてとても嬉しいと同時に,完全に身内向けだったライブ参加記の記事が,様々な人に読まれているという事実にとてもビビっております.

 

 

2022年11月第1週のはてなブログランキング13 (= -4 + 17) 位にランクインし,はてなブログ公式 Twitter でフィーチャーされる事態になってしまいました.

それはつまり,「夏川椎菜」がミュージックレイン所属の女性声優であり,あだ名が「ナンス」であり,黄色がイメージカラーであり,名前が「しいな」なので 417 がフィーチャーされがちなことなどを知らない方々も,この記事をご覧になっているということです.

そこで,説明が必要な箇所が増えたなと思ってきましたので, MAKEOVER Blu-ray 発売まであと417時間となったこのタイミングで,大幅な追記・修正を行なうことにしました.

 

 

こんばんは!

 

ついにこの時,「2022年11月1日 午前1時」を迎えました.

1 が沢山(-4+1+7 個)ありますね.出ている数字全部足すと 4-1+7 になりますね.

違います.そういうことじゃないです.

 

ちょうど今から数えて,

MAKEOVER Blu-ray 発売日(2022年11月30日)まであと 41700分

なんですよ!!!!!*2

この記念すべきときに,あの話をしようと思います.

 

 

 

はじめに

MAKEOVER は,2022年5月1日の埼玉公演から始まりました.

初日独特の「セトリも演出も全く予想がつかない」ことから生まれる緊張感が,会場全体に漂っていたことはよく覚えています.

 

連番者の方とセトリ予想をしているうちに会場が暗くなり,MAKEOVER が開幕しました──

 

 

──終わりました.楽しかったです.

 

通常なら上の2段の空白に相当する部分をブログに書くものなのでしょうが,本題はそこではありません.

「何だあの QR コードは」

これが開演中に思った感想のひとつでした.どこの場面で思ったのかはネタバレになるので言いません(この記事でネタバレするのは「QRコードが登場したこと」と「QRコードが何であったか」に関すること,それと中野初日の出来事だけです).

 

「あの QR コードには何が書かれているんだろうか」という疑問は当然ありましたが,そもそもなぜスマホ等を使用できない上演中に QR コードを表示させたのか,というのも疑問として残ります.

唯一考えられるのは「人力で読んでね(*>△<)」という夏川椎菜からの挑戦状という説です.

 

 

 

よっしゃああ!!!!!!!!!受けて立とうじゃねえか!!!!!!!!!!!

 

 

 

……とはいえ,一発で解読するのは流石に無理でしたので,一つの絵として見て「なんか下の方に横向いた猫(?)みたいなのいるな」とか,「右下に L が鏡映しされたようなのあったな」とか,己のパターン認識能力を駆使し,雰囲気だけ覚えて帰りました.

 

埼玉公演の3日後の 2022年5月4日 に大阪公演が開催されましたが,ここで前回パターン認識でなんとなく覚えていたものと比較すると,どうやら現れるコードはすべて同じであることがわかりました.以降はこの QR コード(「例の QR コード」とか呼んでいました)を解読することになります*3

 

何が書いてあったのか?大まかな予想

さて,MAKEOVER で登場した「QR コード」という概念ですが,これは何の脈絡もなく登場したわけではなく,夏川さんの楽曲『ハレノバテイクオーバー』の MV 内で既に使用されています.

 

youtu.be

 

これです.赤夏川さん太陽みたいで可愛いですね.

夏川さんに見惚れていると見落としますが,実はダンサーさんの背中に QR コードがくっついています.

これらを実際に読んでみると,「喜」「怒」「哀」「楽」の4文字になるようです.

MAKEOVER は,喜怒哀楽をコンセプトにしたアルバム『コンポジット』を引っ提げたライブでしたので,

 

「あの例の QR コードも『喜怒哀楽』とかなんじゃないか??」

 

という予想が立てられるわけです.

登場した QR コードのサイズ感的にも,そこまで長い文章を詰め込めないだろうと思うと,これは妥当な予想のように思えます.

また,あるいは「夏川椎菜」説も同様に可能性としてあります.

 

ところが,実際に QR コードを生成してみると,どちらの場合も人力パターン認識で覚えていたものとは全く異なる見かけをしていました.

思いつく単語などを取り敢えず突っ込んでいっても,それらしいものは見つからず,

 

「これは直接解読するほかないな……」

 

と思ってきました.

 

 

メモ取りの翁たち

今は今(?),メモ取りの翁といふ者ありけり.オタクにまじりてメモを取りつつ,よろづの事につかひけり.名をば,れす(@res_pyb)しろ(@nansuuuuu417) となむ言ひける.

──── 『メモ取り物語』より(『竹取物語』を一部改変)

これは有名な『メモ取り物語』の冒頭部ですが,ここで夏川さんにも存在を認知されている「メモ取りの翁」からお二人,れすさんとしろさんが解読に加わります.

今回の解読は,主にこのお二人のメモを元にして進められました.QR コード解読もよろづの事に当然含まれるようです.

 

Q: QR コードのメモを取るって,一体どうやって?

A: 見た通りに0と1を書いていきます.

 

とは言っても,隅々から目に入ったところを元にして書くのは,瞬間記憶か常人離れの速記能力がないと相当厳しそうですので,QR コードの仕様に基づいてメモを取っていくことにします.

追記 (2022年11月12日 15:00):

ところで筆者およびメモ取りの翁たちは全員このツアーを全通しています.息をするように全通していたので書いていませんでしたが,しれっと各公演の話が登場するのはそのせいです.

ちなみに,「LAWSON presents 夏川椎菜 2nd Live Tour 2022 MAKEOVER」の全日程は以下のとおりです.

  • 埼玉 さいたま市文化センター
    • 2022年5月1日(日)18:00開場/19:00開演
  • 大阪 オリックス劇場
    • 2022年5月4日(水・祝)17:00開場/18:00開演
  • 千葉 千葉県文化会館
    • 2022年5月20日(金)17:30開場/18:30開演
  • 群馬 高崎芸術劇場
    • 2022年5月29日(日)17:00開場/18:00開演
  • 東京 LINE CUBE SHIBUYA
    • 2022年6月5日(日)17:00開場/18:00開演
  • 愛知 日本特殊陶業市民会館フォレストホール
    • 2022年6月19日(日)17:00開場/18:00開演
  • 東京 中野サンプラザホール
    • 2022年6月28日(火)17:30開場/18:30開演
    • 2022年6月29日(水)16:30開場/17:30開演 <最終公演は生配信アリ>

QR コードの基本仕様と参考にしたサイトたち

ここで紹介するサイトたちは,とてもためになりました.この記事の参考文献として参照すると良いと思います.

QR コードの仕様を調べるにあたって,次のサイトが非常に参考になりました.

web.quizknock.com

流石 QuizKnock さん.大好きです*4.この記事も「QuizKnockと学ぼう」チャンネルの勉強 LIVE を使いながら書いています.

 

本家本元の仕様書は以下にあります.

kikakurui.com

こちらもとても参考にしました.やはり何事も原典に立ち返るのが良いですね.

もうちょっと分かりやすく書かれたものに,以下があります.

https://www.denso-si.jp/dictionary/dic_qr/GeneralDescriptionoftheQRCode.pdf

 

今回の記事では説明しませんが,QR コードの中には「誤り訂正符号」が詰め込まれています.

これについては,中日新聞痺れるほどカッコいい記事を書いていますので,ぜひそちらをご覧ください.

static.chunichi.co.jp

 

続いて,この記事の追記の際に参考にした記事も,以下で2つご紹介します.

次のサイトはかなり詳細に QR コードの仕様について解説されています.この方はなんと仕様に基づいて QR コードを自作しています*5

www.swetake.com

 

次に紹介する方は,QR コードのデータの記録法から誤り訂正符号の作り方から,さらに誤り訂正の方法まで,全部書いてます.多分これがQR コードの全部です.

ik1-316-18424.vs.sakura.ne.jp

 

 

さて,QR コードの仕様の中で,今回のメモ取りで使った特に重要なものを紹介しましょう.

  • QR コードは,右下から順に,2列ごとに記録されている
    • 右下から順に読んで行けば,はじめの数文字はわかるはず!
    • このことに関する詳しい解説は,先述した QuizKnock さんの記事にあるので,そちらをご覧ください.
  • QR コードは,生成したコード全体にマスクを掛けており,そのマスク情報は決まった場所に記録されている
    • マスク情報は解読に必須!ここもメモする.


特にマスク情報は重要です.マスクの働きを説明しようと思いますが,ここで QR コードの構造をより詳細に見てみます.

また,ここで例として取り上げた QR コードは今後の説明でも使っていきます.

QR コードの各部分の名称.類似の図は参考記事にもありますが,ここで改めて紹介します.これはクワイエットゾーンの制約をガン無視しているので上手く読めないかもしれません.そうなったら肉眼で読むしかねえな!!!!

上の各要素のうち「ファインダパターン」「アライメントパターン」「タイミングパターン」は予め決められており,位置合わせに使用されます.このパターンは読み取りに非常に重要ですから,似たようなパターンがデータ部分(残りの部分)にうっかり現れるとめちゃくちゃ困るわけです.そこで,出来上がった QR コードに適宜マスクを掛けて,こうしたパターンに似たものが現れないようにするという仕組みになっています.

また,「めっちゃ黒い QR コード」や「めっちゃスカスカな QR コード」も読み取りにくいので,いい塩梅にバラけてくれるようなマスクをいい感じに選ぶことで,読み取りやすいコードを生成します.

 

QR コードのマスクは 8 種類用意されており*6,それぞれに 000, 001, ..., 111 という,いわば「ID」が割り振られています.その 8 種類のうちどのマスクを使っているのかという情報は,上の図の赤い領域で示された部分に記されています.

マスクの一覧.000 から 111 までの8種類ある.黄色部分が「0」,紫色部分が「1」に相当する.こんな色味になっているのは,使っているプログラム(python の matplotlib)のデフォルトをそのまま使っているから MAKEOVERのイメージカラーに近づけたからです!(後付け)

先ほど説明した「なんとかパターン」の箇所以外に関しては,このようなマスクを掛けておくわけです.ちなみに,この図において「マスクを掛ける」というのは,「紫の部分は色を反転させ,黄色の部分は色を変えずそのままにする」ということと同じになります.

マスクについては,後ほどの解読フェイズで詳しく説明します.

 

得られたメモを元に解読! ── 「例の QR コード」解読キャス

さて,先ほど説明したような QR コードの仕様を利用する作戦で,夏川さんからの無理難題に挑むべく,メモ取りの翁たちとメモを取っていきました.

時は大阪公演(2022年5月4日)から流れて,愛知公演(2022年6月19日)の終演後.

最終日(2022年6月29日)には配信が行なわれることが発表されましたので,実質的なタイムリミットは中野追加公演初日(2022年6月28日)ということになります.

そこで,愛知公演と中野初日の間である 2022年6月25日 に,QRコード解読キャスを敢行しました(※現在は非公開).

 

追記 (2022年11月12日 15:00):

ここからは,実際にどのように解読が進んだのか,具体的な方法と経緯について,より詳しく書くことにしました.

長くなりますが,今後の参考になればと思います!!

マスク情報を読み取る

まずはマスク情報を読み取ります.例として,説明用の QR コードのマスク情報を以下で読み取ってみましょう!

フォーマット情報を読み取る.赤い矢印に沿って読み取っていくが,途中にある「タイミングパターン」は無視して飛ばして読む.

矢印に沿って読んでみると,110011000101111」という15桁の情報が得られます.しかし,このままではダメで, QR コードの仕様上,読み取った後に「101010000010010」でマスクするという作業が必要です.

 

せっかくなので,ここで「(ビット)マスク」についての一般論について復習しておきましょう.

とは言っても簡単で,元データとマスクを位ごとに見比べて,マスクが1の部分のゼロイチを反転させていくだけです.

「位ごとに足して,2になったら0にする」とか「同じところはゼロに,違うところはイチにする」と考えても良いでしょう.

マスクが 1 になっているところに下線を引いてみると,以下のようになります.

 

10001111 (元情報)

00000000 (マスク)

1000111 (マスク結果)

 

こういうマスク処理が解読では頻出しますので,後学のためにここで詳しく触れておきました.

さらに重要な性質として,マスクを掛けた後にもう一度同じマスクを掛けると,元通りになります.この性質はデータの解読のときに使います.

 

さて,ここで「うおおおおお 15 桁憶えるぞ!!!!!」と突っ走ってもいいのですが,フォーマット情報の仕様を使えば,もっと効率よくマスク情報を抜き出せます.

フォーマット情報には,以下の情報が詰まっています.

  • 初めの2桁には「誤り訂正レベル」の情報
    • 上の例だと「01」.これは誤り訂正レベル「L」に相当し,約7%の読み取りエラーまで訂正できるとされています.詳しい話は先ほど紹介した参考サイトたちをご参照ください.
  • 次の3桁には「マスクの種類」の情報
    • マスクは全部で 8 種類用意されています.
    • 上の例だと「100」.これを「例の QR コード」から読み取りたい!!
  • 残りの10桁には「フォーマット情報の誤り訂正符号」.
    • 上の例だと「1000111010」.実はこの部分は,初めの「01100」の部分がキチンと読めていれば要らない情報です.

いま自分たちがほしいのは「どのマスクを使っているか」なので,誤り訂正レベルとか誤り訂正符号とかは,究極的には要りません.

結局,マスク情報がほしいだけなら,「初めから3,4,5桁目」さえ読めていれば良いわけです.

マスク情報だけなら読み取るのは難しくありません.ただし,読み取ったあとにマスクを掛けるのを忘れずに!

読み取ったあとは「101010000010101」でマスクを掛ける必要があります.これを忘れるのは「肉眼で QR コードを読んだときあるある」ですね.

マスク情報に対応するマスクの箇所は「101」の部分ですので,上の例なら,「001」にマスク「101」を掛けて「100」であると,すぐにわかります.

(マスク情報を取るためにもマスクを掛ける必要があるのは若干混乱しますが,フォーマット情報のマスクは「101010000010101」で固定です)

 

さて,なぜここまで口酸っぱくして「マスク」の話をしたのかというと,どのマスクを掛けるかによって,出来上がる QR コードが全く変わってしまうからです.

例えば,次の QR コードはすべて同じデータが記録されたものですが,見た目が全く違っていますね*7

同じデータを違うマスクで出力した結果.見た目がすべて異なることがわかる.

というわけで,マスクがなにかを見逃すと解読ができなくなってしまうので,まずはマスクを読み取るところから始まります.

 

では,本題の「例の QR コード」でマスク部分読み取ってみると,「111」でした.何度見ても 111 でした.

これはマスクを掛ける前ですので,マスクを掛けると「010」のマスクであるとわかります.

「例の QR コード」で使われているマスクはこいつだ!!

ちなみに,この「010」のマスクの厳密な定義は,左上のセルを (0,0) 番地としたとき,(i, j) 番地のセルに関して「j mod 3 = 0 のとき 1」です.

ナンのこっちゃかと思いますが,これは

左から右へ 0,1,2,3... と数えていったときに,3の倍数の列にあるセルの白黒を反転させる

ようなマスクという意味です(ゼロから数え始めることに注意!!).これは後で使うので,その時にまた説明します.

 

データ部分を読み取る

さて,ここまででマスク情報がわかったので,メモの情報を元にいよいよ読み取って行きます!!

先述の仕様紹介のところで「QR コードは右下から順に記録されている」と言いましたが,

読み取り方の詳細は,以下のとおりです.

 

読み取るときのポイント.図では繰り返しになるところは省略しています.
基本は右下から上に登りながら,2つずつ「右→左→右→左→……」とジグザグに読んでいきます.ただし,「なんとかパターン」に出会ったらそこを無視します.

このように,2列ずつ右下から読んでいきます.これを踏まえて,いちばん右の2列を翁たちが「例の QR コード」を観察して銘々に記録してきたメモが以下です.

追記 (2022年11月14日 4:17):

以下に紹介するメモに関して.

冒頭で「夏川椎菜本人巡回」の件をお話しましたが,そこで夏川さんが

(*>△<) < なんかQRコードの配列をメモっていったらしいね.

と,メモを縦書きするジェスチャーと共に説明していました.普通メモのジェスチャーと言ったら流石に,少なくとも自分の常識では「横書き」のはずなので,

うわこの人,あのメモを見たんだ…….

と確信しました.ちゃんと中身読まれてると悟って急に恥ずかしくなりました.

 

ブログ書いてるオタクのみんな!!!!!読んでるって言ってないだけで推しにその記事読まれてるぞ!!!!!!!!!

メモA: れすさん(一部はしろさんの結果と統合したもの)のメモ解析結果

メモB: しろさんとどねさんのメモ解析結果(どねさんのやつで赤文字になっているところは,れすさんしろさんの結果を基に修正したもので,「*」になっているところは不明な箇所です)
隣に振ってある数字はマスクを掛けるときに使う「ゼロから数えて何列目か」の情報です.

 

微妙に似ている箇所はありますが,結構バラバラです.

一応この QR コードがライブ中で出現した場面を説明すると,めっちゃ激しい曲で,筆者はヘドバンの合間にメモっていました.暴れ回ってる隙間にメモ,なんなら暴れながらメモを取っているので,「まあ結構ズレるよね」という感じです.

 

ちなみに「メモ」の実物はこんな感じです(れすさんのツイート).

この方,初演の埼玉公演から QR コードのメモ取りをしていたので,「筋金入り」なんですよね.そのツイートがこちら(※演出のネタバレがあります).

 

さて,この曖昧なメモたちを読んでいくわけですが,その前にデータ部分の構造,つまりマスクした後に右下からジグザグに読んでいったデータ部分はどのようになっているかを,ここで説明しておきます.

詳しい話はこのサイトに載っていますので,もっと知りたいという方はこちらをご覧ください.

 

データ部分の構造,つまりマスクした後に,右下からジグザグに読んで得られるデータは,

「モード指示子」→「文字数指示子」→「データ」→「誤り訂正符号」→「終端パターン」→「埋め草ビット」→「埋め草ワード」

という構造になっており,矢印の順番に記述されています*8

この記事で扱うのは初めの3つ: 「モード指示子」→「文字数指示子」→「データ」だけです.

以下,これらを読み解いていく様子を紹介していきます.

 

モード指示子

まず注目するのは,初めの「モード指示子」です.これは 4 ビットの情報で,

  • 0001 = 「数字モード」
  • 0010 = 「英数字モード」
  • 0100 = 「8bit モード」
  • 1000 = 「漢字モード」

という仕様になっています.さて,まずはモード指示子を,メモから実際に読み取ってみましょう!

メモB の一部を抜粋し,そこからモード指示子を読み取っていく.マスクはさっき読み取ったものを使えばよい.

 

注意すべき点は,右下からの「ジグザグ」で読み取っていく前に,一度マスクを掛けて,元のデータを復元するところです.

マスクの説明のときにも触れましたが,掛かっているマスクを外すにはもう一度同じマスクを掛ければよいのでした.フォーマット情報から読み取ったマスク (今回は「010」でした) をもう一度掛けることで,仮面を剥がしているのです.

 

ここでは,(0番から数えて)24 番の列が右端に来ますので,先ほど読み取ったマスクを掛けると,右端の列の 0 と 1 がマスクで反転します.

 

いざモード指示子を読んでみると「0110」と読めるものと「0100」と読めるものの2つが得られますが,「0110」となるモード指示子は仕様にありません

以上から,モード指示子は「0100」,すなわち「8 bit モード」であると読み取れました!

 

 

「……ホントに??すごい読み違いしてて「0010」だったりしない???」と思うかもしれません.実際「ホントか……??」と疑いながら解読作業を進めていました

しかし一旦仮定して進めないと先に行かないので,ここでは「8 bit モード」と仮定して進めます.

このような,結構ふわっとした仮定を置いて解読を進めていたので,いつ仮定が崩壊するか分からない不安は常に付き纏っていましたね.

 

文字数指示子

さて,この調子で文字数指示子も読み取って行きましょう.やることは基本的には同じで,マスクを掛けて,ジグザグに読むのをやっていきます.

 

では,どこまで(何ビットぶん)読んでいけばいいのか?というと,「8 bit モード」の場合,「バージョン(型番)が 1〜9 のときは 8ビットバージョン(型番)が 10〜40 のときは 16ビット」ぶん読めばいいそうです.

www.tech-jp.com

ここに来て実は,今まで説明して来なかったバージョン情報というものが関わってきます.

ここでの「バージョン」とは, QR コードの「大きさ」のことだと思ってください.

www.qrcode.com

 

今回解読する「例のコード」に関しては,「アライメントパターン」が 1 つあったことから,バージョン2以上であると推定されていました*9

 

この事に関しては,ツイキャス@l6_6l さん から「アライメントパターンを確認した」旨のコメントがあり,目撃者が多そうです.

解読キャスに遊びに来てくれた方のコメント.この方は「例の QR コード」のメモも一緒に送ってくださいました!その節はありがとうございました.

また,「そんなにデカくなかったよなあ……」という見た感じのおぼろげな記憶があったので,試しにバージョン2,3,4 での出力結果を比較してみたのが以下です(これは解読キャス中のキャプチャなのでちょっと画質は落ちます).

解読キャス中,れすさんが試しに「 https://www.natsukawashiina.jp 」をバージョン 2,3,4 (左からこの順)で生成したもの.

比較してみると,「なんかバージョン 3 はデカすぎる気がする」というパッと見のサイズ感の記憶から,また遺されたメモの段数から,バージョン2 だと断定しました.

 

ところで,先ほどモード指示子を読み取る際にマスクを掛けたとき,しれっと

ここでは,(0番から数えて)24 番の列が右端に来ますので,先ほど読み取ったマスクを掛けると,右端の列の 0 と 1 がマスクで反転します.

と,「列数が 25 である」ようなことを仮定して言っていましたが,実はこれは数えたわけではなく,バージョン2 のサイズが「25 × 25」であることから導いた値でした.

 

どんどん仮定に仮定が積み重なって行きます.こうなると「どうかこれまでの仮定は正しくあってくれ……!」という祈りに似た感情が現れてきますね.

 

 

さて,ちょっとバージョン情報に寄り道が過ぎましたが,「8 bit モード」で「バージョン2」であると仮定して進めると,モード指示子の次の8ビットぶんが文字数情報ということになります.

この部分を読んでいくことになりますが,ここが結構メモによってバラバラでした.

曖昧なところを「?」と置いて全パターン試してみたものが次です.

文字数指示子の解読結果.メモによってバラつきが大きいところは不明として,あり得るパターンを試していく.赤字は自信があるところ.

こうして,文字数候補は 2,6,10,14,18,22,26,30 文字であると絞られました!

(実は漢字や平仮名などのマルチバイト文字だと「文字数」と一致しないので,厳密には「2,6,…,30バイトのデータ」です.)

 

データ部分

さて,いよいよ本丸のデータ部分の解読に取り掛かります.

先ほど読んだ文字数指示子の続きから読んでいけばよいのですが,モード指示子いわく「8 bit モード」ですので,漢字や平仮名などのマルチバイト文字も普通にあり得ます.つまり,どこまで読めば「1文字」の情報になるのかはわかりません.

今回の QR コード演出の元になったであろう『ハレノバテイクオーバー』の MV では,「喜」「怒」「哀」「楽」の4文字がそれぞれ QR コードとして出現していましたから,マルチバイト文字は覚悟の上です.

むしろ漢字などの場合,続きがある程度推測できそうなので,一文字目が分かってしまえば芋づる式に解読できるのでは??という期待もありました.

 

 

さてさて,ドキドキの解読ですね!では取り掛かってみましょう.やることはこれまでと同じです.マスクをかけて,右下からジグザグです.

1文字目(というか「1バイト目」)を読み取ってみた結果.「ジグザグ」を忘れてしまった人用に,緑色で薄く矢印を描いておきました.下には今までのまとめとして「モード指示子」と「文字数指示子」の解読結果が書いてあります.

 

結果 「01101000 と読めましたが,実は 8 bit モードで書かれるときの文字コード(UTF-8)の仕様から, 0から始まっている段階で英数字であると確定します

当初の目論見からは外れましたが,そのまま進めます.

読み取った「01101000」を10進表記にすると 104 ですが,これに対応する文字をコード表から探すと…………

 

 

 

h

 

 

そして,解読キャスに居たみんなが気づきます.

「……これ URL なんじゃね?????」

 

解読の難航 ── URL 説浮上

突如として浮上してきたURL説に乗り上げ,我々は座礁します.

 URL となると,めちゃくちゃな数のパターンがあり得るため,特定はかなり難しいです.

これがもしも公演後に初公開されるムービーへのリンクだったりしたら,特定はほぼ不可能です.暗雲が立ち込めます…….

我々は「右下から記録する」という方法で解読に挑んだわけですが,こうして得られるのは頑張って「https://」というほとんど意味を持たない情報でした…….

夏川さんの「きっとみんな右下から読み取ってくるはずだから,URL にて困らせちゃおうよ!(*>△<)」という策にまんまとハマってしまったわけです……!!!(諸説あり)

 

 

ですが,URL であっても条件があります.先程読み取った文字数の情報です.

読み取った結果から,2,6,10,14,18,22,26,30 文字のいずれかであると推定されたのでした.

 

ここに URL という条件を追加すると,「https://」で 8 文字使ってしまうので,短くて 18 文字,長くて 30 文字くらいであろうと推定できます.

 

ここまで仮定すると,

  • 18,22,26,30 文字のいずれかか
  • 夏川椎菜にゆかりのありそうな URL」である

まで候補が絞られそうです.

とはいっても,相当のパターンがあることには変わりないので,困ったことには変わりありません…….

 

天啓 ── 公式 Twitter の情報と別の解読部隊

そんなとき,実は夏川椎菜公式 Twitter で,ライブの様子を紹介する映像が公開されていたことを知ります.

 

 

この 0:36〜0:39 あたりを見ると,なんとQR コードの上のほうがチラッと見えています!!

これは魔の「https://」地帯を脱した先の情報のはずです.

ここから復元した QR コードの一部が以下です.

 

公式 Twitter の映像から読み取って復元したもの.

これを基に解読を試みます!0,1 は解読に関わるところだけ抜粋して書いておきます.

 

公式 Twitter の映像から読み取ったもの.マスクで反転された部分は青字で記入してあり,白黒はそのままで数字だけ反転してあります.

読み取った結果,17 文字目が u,18文字目が k になることが判明しました.

 

17 文字目が u, 18 文字目が k……??

 

 

 

 

 

……https://www.natsukawashiina.jp なのでは????

 

 

 

しかもこれは候補にあった30 文字ピッタリです!!

さっそくこれを確かめてみた結果が,冒頭のツイートです.

 

 

この結果は,埼玉公演・大阪公演から「人力パターン認識」で覚えてきたものの特徴を持っており,かなり信憑性が高いです!!

 

そして,キャスに遊びに来てくださった英通訳さん (@etyP_trnslator)がメモっていたものとも非常に近いです.

 

 

ところで QR コードをメモっている人が自分たち以外にも居るのいいですね.異常行動ではないことの証左です.

追記 (2022年11月14日 4:17):

実はこの英通訳さんのメモには,公式 Twitter の力を借りて読んだ「17文字目と18文字目の情報」が完璧に記録されていました.つまり,公式からの「ヒント」が無くても

オタクのメモだけで最終的な結論まで行き着けた

ということですね!!!

 

 

 

……と,ここまでこの記事を注意深く読んでくださった方も気づかなかったかもしれませんが,実はこの URL ,バージョン探しのときに一度通っているんですよね.

 

再掲: バージョン2,3,4 での 「 https://www.natsukawashiina.jp 」の結果.いちばん左が正解と一致するはずだったが……??

 

Q. なぜ見た目が違うんですか??

 

 

A. (この場合は)マスクが違うからです!!!!!!!!!

 

 

実は「マスクの選び方」について簡単に説明したときに,こんなことを言っていました.

また,「めっちゃ黒い QR コード」や「めっちゃスカスカな QR コード」も読み取りにくいので,いい塩梅にバラけてくれるようなマスクをいい感じに選ぶことで,読み取りやすいコードを生成します.

 

この「いい感じに選ぶ」部分がジェネレーターによってまちまちらしく,同じ入力でも異なったコードが生成されることがあります*10

 

だからマスクは重要なのです……(注釈に書いたいろんなマスクで試すスクリプトは,この後に作られたものなので,スルーしていた……).

まあ結局解読できたから良かったんですけどね!!!!!

 

答え合わせと思わぬアクシデント

この解読結果はいろいろな人に見てもらえて,「中野初日行くので確認してきます!!」と,たくさんのひとが「答え合わせ」のお手伝いに名乗りを上げてくれました.

「答え合わせ」の方法は人力パターン認識で,特徴的なパターンがあるかどうかを確認するものでした. 

追記 (2022年11月14日 4:17):

 ここで,解読を手伝ってくださった共犯者(なかま)たちのご紹介です.ゾンビのように噛み付いて(?)巻き込んでいきます!

 

こちらは「パターン」を見つけてくれた方々

 

こちらは,何故かステッカーを作ってきてくださり,ペンラに貼って直接比較してくれた猛者の方です(ちなみに1枚ステッカーいただきました).

 

こちらは,推測した QR コードを何故か LED パネルに表示して,どこでも MAKEOVER (一部) を実現した方です.

この方,過去ツイを見ると QR コードを解読していましたので,こちら側ですね.

 

以上です.それでは最後までどうぞ!

 

さて,いよいよ「答え合わせ」の日……!

開演前,「中野は追加公演だからガラッと QR コードを変えるんじゃないか」とか,「もう一個見たことがないコードが追加されるんじゃないか」など,謎の不安を抱えていましたが,やがて照明が落ちて開演……!

 

 

終演しました.

結論から言うと,変わっていませんでしたし,我々の解読は完璧に成功していました.

 

……はい.

悲願だった QR コードの解読に成功したのに,心は凪いでいます.

 

なぜか.ヒントをお伝えすると,

中野初日は,夏川さんの新曲『ササクレがサプライズ披露された日でした.

natalie.mu

 

QR コードのことなんて,どうでもよくなってしまいました────

 

 

 

おわりに

多くの人間が QR コードに注目しそうになった中野初日に『ササクレ』をサプライズ公開し,すべての注目を奪い返した夏川さん.

そんな我らが愛しの推し・夏川椎菜さんからの有り難い言葉を引用して,公演中に QR コードをメモっていた我々の旅の締めくくりとしましょう.

どっち見てんだよ こっち向いてよ

──── 夏川椎菜『ハレノバテイクオーバー』より

 

 

 

*1:QRコード」はデンソーウェーブの登録商標です.

*2:日本時間(UTC+9)です.この記事ではすべて日本時間で書いています.

*3:余談ですが,友人知人にこの話を「ライブでコードの解析していた」と説明すると,大体「ああ,音楽のコード(chord)解析なのね」と誤解されて,「いや,QR コード(code)でして……」と誤り訂正するやり取りが生じます.冷静に考えて上演中に QR コード出すのも狂っているので「この推しにしてこのオタクあり」という感じはしますね.

*4:夏川椎菜さんのことも大好きです!!!!!!!!!!!

*5:有限体(ガロア体)上の多項式の割り算も定義から計算していました.すごい…….

*6:ここで紹介する図を生成するコードは Google Colab で公開しています.ご興味のある方はどうぞ.

*7:すべて誤り訂正レベルは L のものを使っています.

*8:参考サイトでは「データ」と「誤り訂正符号」をあわせて「データ」と呼んでいますが,ここでは便宜上分けています.

*9:実はアライメントパターンが存在することから,「モデル1」という旧型のものでなく,「モデル2」であることもわかります(詳細はこちら).QR コードも進化しているのですね.

*10:その他にも,モードが「8 bit モード」ではなく「英数字モード」だったりとか,モードが異なっている場合も同じ結果で異なったコードが生成されることがありますね.