にせねこメモ

はてなダイアリーがUTF-8じゃないので移ってきました。

Python3で文字列をUTF-16のコード列(整数のリスト)に変換

Unicode基本多言語面(BMP)外、つまりUnicodeスカラ値がU+10000以降の文字について、(UTF-16の)サロゲートペアのコードを求めたい、という需要があった。これは、Win32 APIのSendInput関数がUnicodeの値をUnsigned Shortでしか指定できないので、BMP外の文字はサロゲートペアで入力しないといけないということに対応するため。

Python3においては文字列(str型)はUnicode文字列を指すので、以下文字列とだけ書く。Python2の場合は適当に読み替えてください。

文字列をUTF-16のコードポイント(整数)のリストに変換

def str_to_utf16codepoints(s):
    bs = s.encode(encoding='utf_16_be')
    return [int.from_bytes(bs[n:n+2], 'big') for n in range(0, len(bs), 2)]

文字列をUTF-16-BE(ビッグエンディアン)の文字列に変換し、2バイトごとに区切って整数に変換する。

str_to_utf16codepoints("sushi寿司🍣")

[115, 117, 115, 104, 105, 23551, 21496, 55356, 57187]

を返す。

UTF-16のコードポイントのリスト→文字列

上の逆変換。

def utf16codepoints_to_str(ns):
    bs = b''.join([n.to_bytes(2, byteorder="big") for n in ns])
    s = bs.decode('utf_16_be')
    return s

要素技術

文字列→UTF-16-BE (bytes型)に変換

str.encode()を使う。返り値はバイト列(bytes型)になる。

"🍣".encode(encoding='utf_16_be')

バイト列を整数(int型)に変換

Python 3.2以降だとint.from_bytes()が使えるらしい。1つ目の引数はバイト列、2つめはエンディアンの指定。

int.from_bytes(b'\xff\xf0', 'big')

みたいな感じでいける。

さもなくば

def int_from_bytes(bytes):
    val = 0
    for b in bytes:
        val = (val << 8) + b
    return val

とかでできると思う。

2020年よかったもの: 買ったもの, 映画, アニメ, 音楽, ソシャゲ

2020年が終わった。他の人がやってるのを見て自分もやってみようと思ったので、2020年に経験したよかったものをまとめておく。

買ったもの

Pixel 4a

今まで使ってたスマホHuawei P10 Liteだったというのもあり、めっちゃ体感が良い。きびきび動く、本体スピーカーがステレオで中低音がそこそこ出る、記憶容量128GBあるのでスマホゲームそれなりにインストールしても余裕ある。など。MicroSDカード刺さんないのを除けば不満はない。
たぶんハイエンドのものと比較したらそれなりなんだろうけど、今まで使ってたものと比べると非常に快適。まじで買ってよかった。

Xiaomi Mi Smart Band 4

活動量計。時計+心拍数計+歩数計+睡眠計とかそんな感じ。自分の使い方だと満充電で1か月弱電池が持つので楽。風呂入るとき以外はずっとつけてる。防水なので風呂入るときもつけたままでいいんだけど。
睡眠がスコアで出るのが面白いし、心拍数変化のグラフがでるの面白い。最近見てないが。
最近はもっぱら腕時計として使っている。ボタン押さないと時間表示されないので腕時計としては微妙。

王 海清『蒙日辞典』


2020年はモンゴル語(特にモンゴル文字)関連書籍をぼちぼち集めていた。
この辞書はモンゴル文字で引ける日本語のモンゴル語辞典として貴重である。しかし、出版されたのがちょっと前というのもあって中古で結構値段した。メルカリで不用品を売って作った金で買った。
いつでも引けるというのが有難くて買ったのではあるけど、実際はそこまで使わないかもしれない。しかし満足感というか安心感がある。

映画

ジョゼと虎と魚たち

アニメ映画。2020年に見た中で一番良かった。本当に90分か??って思うくらい内容が詰めこまれててすごかった。
映画によっては見終わると内容が思い出せないものもあるけれど、この作品は後からいいシーンがいろいろ浮かんできたので、それだけ印象に残ったのかなと思う。
ネタバレになるので多くは語らないが、『聲の形』や『心が叫びたがってるんだ。』が好きならきっと気に入ると思う。(1/8現在)まだやってるのでぜひ見に行ってほしい。

テレビアニメ

春夏は放送される新作がすごく少なかった。

『映像研には手を出すな!』

もともと原作漫画読んでて、アニメ化ということで、期待半分不安半分で見てみた。監督は湯浅政明さん。
アニメを作る話(どちらかというとアニメ作るより設定を作ってる描写のが多いけど)なので、アニメという媒体はすごい合ってるというか、映像による説得力は強かった。作中作であるアニメが映像として動いてるのは漫画では表現できないので。
アニメという媒体の中でアニメを作っているというのを活かした演出が結構あり、全体として湯浅監督の作風と合ってたと思う。創作のワクワク感が感じられるいい作品だった。
FOD独占配信ってことで結構損してると思う。

『ガルパピコ大盛り』

バンドリ見てないけどガルパピコ(1期)は見てたので見た。一話3分なのでサッと見れていい。
バンドリとは異なる独自の世界が展開してる気がする。原作のスピンオフなのに好き勝手やってるのが最高。ギャグ作品にありがちな投げっぱなしな話が多くて好き。
話数によって面白いかどうかはまちまちだけど、実験的な話も多く、すごく面白い話や頭おかしい話があり、そういうのが良くて見てた。

『アサルトリリィ BOUQUET』

アクションドールを原作とするメディアミックス作品。主役の名前が「ゆゆ(夢結)」と「りり(梨璃)」、戦う女の子を「リリィ」と呼び、学校が「百合ヶ丘女学院」などとにかく百合のモチーフぶっこんどきゃいいだろ感を感じる。
「ヒュージ」という怪物が襲ってくる世界で「リリィ」と呼ばれる少女たちが戦う、というのが大筋。まどマギと多少雰囲気近いかも、制作シャフトだし。
百合か?と言われるとそこまで百合要素が中心というわけではない気もする。謎は残しつつも綺麗に終わったのでよかった。ふとももがすごい。

ラブライブ!虹ヶ咲学園スクールアイドル同好会

一話見て百合か!?って感じで見始めた。ラブライブシリーズだけど、ラブライブのある世界というだけで他のシリーズの内容はほぼ出てこないのでこれだけ見て問題なく楽しめる。
スクールアイドル同好会をつくるけど、個性的なメンバーみんなが意見違うのでグループ組まずにソロアイドルで活動していこう!という話。嫌な奴が全く出てこないのですごく視聴感がよい。
最初は一話ごと一人のキャラを掘り下げていったんだけど、5~7話の畳みかけがすごくよかった。りなりー と かすかすがすき。

聞いてた音楽

別に2020年のものではないものが多いが、主にレンタルで聞いてるので一昔前のものになりがち。今年はラジオをよく聞いてたのであんまり音楽を聞いてなかった。
基本的にアニソンが多い。見事に女性ボーカルしかないな。

(~)はCD発売年のはず。配信はもっと早いのあるかも。公式で上がってる奴だけYoutube映像を載せておく。

DIALOGUE+「はじめてのかくめい!」(2019)


アニメ『超人高校生たちは異世界でも余裕で生き抜くようです!』OP。
作詞作曲は田淵智也さん、編曲は田中秀和さん。完全に田淵節。畳みかけるようなめっちゃ忙しい曲で、ハイテンションで愉快。

鹿乃「罰と罰」(2020)

YouTube検索: 鹿乃 罰と罰
作詞が鹿乃さん、作曲が田中秀和さん、編曲が佐高陵平(y0c1e)さん。田中さんいつも強い曲作るな~~~と思っている。ジャジーでダウナーで耳に残る曲。

ネクライトーキー「オシャレ大作戦」(2018)


作詞作曲: 朝日廉さん。
歌詞の「お金もない、努力もしない二十五を過ぎたら死ぬしかない」がすごく印象に残っている。
J-Waveで流れてたライブのCMで知ったバンド。声が特徴的ですき。メジャーデビューアルバム『ZOO!!』(2020)も聞いたけど、インディーズ時代の方が曲が(というか歌詞が)尖ってる感じがした。
アニメ『秘密結社 鷹の爪 ~ゴールデン・スペル~』でOPを担当したのもありどんどん有名になってきてる感じがする。いいですね。

ReoNa「SWEET HURT」(2018)


アニメ『ハッピーシュガーライフ』ED。作詞作曲 ハヤシケイさん、編曲 PRIMAGIC。
歌詞の「腫れた背中のかさぶた 千切れた羽根が生えていた跡 傷を抉っては確かめた まだ血は赤いこと」が印象的すぎる。

一ノ瀬志希宮本フレデリカ「クレイジークレイジー」(2019)


アイドルマスターシンデレラガールズ』の曲。作詞作曲がTaku Inoueさん。
イノタク~~~~~~~!!!!! 曲が強すぎる。Future BassとかJersey Clubとかいうジャンルらしい。クラブっぽい音にメロディで殴ってくる。強い。

shami momo「町かどタンジェント」(2019)


アニメ「まちカドまぞく」OP。
曲がいい。落ちついてるのに疾走感があって、サビの盛り上がりに恍惚感があって最高。
作詞作曲は辻林美穂さん。この曲で辻林美穂さんを知ったのでアルバム『Clarté』を聞いてみたけど、落ち付いててすごいいい感じだった。他のアルバムも聞いてみたい。

にゅーろん☆くりぃむそふと「むにゃむにゃゲッチュー恋吹雪!」(2018)

Youtube検索: むにゃむにゃゲッチュー恋吹雪
ガールフレンド(仮)の曲。ガールフレンド(仮)のキャラソンが結構好きで、キャラクターソングシリーズのVol. 1~7を度々聞き返してるんだけど、新曲が出てたのを遅ればせながら知ったので聞いた。
作詞作曲: 田淵智也さん、編曲: やしきんさん。もろ田淵節って感じで笑う。何食ってたらこんな歌詞でてくんのか謎。

ソシャゲ

D4DJ Groovy Mix

通称グルミク。ブシロードが満を持して送り出してきた、DJをテーマとしたスマホ向けの音ゲー(開発はDonuts)。
とにかく収録曲の選定が謎。スーパーでよく聞く「呼び込み君 No.4」が追加されたというのを見て爆笑しながらインストールすることにした。(編曲がチップチューンとかやってたSEXY-SYNTHESIZERさんでびっくり)
youtu.be

幅広い年齢層に遊んでもらいたいということらしくそれなりに懐メロのカバーも入っている。古いところだと山本リンダ「どうにもとまらない」とか、50年前の曲がバリバリのEDMっぽいミックスになっててすごい好き。他にもクラブ映えするサウンドの曲が多く、プレイしてて楽しい。結構MOGRAとかによくいる人が参加してる。
他にも懐かしのゲーム音楽も多い。あんまり分からないが…
最近もどんどん曲が追加されている。ゲームのテーマがDJなので、カバー曲のみならず原曲とかインストをどんどん追加できるのは強み。

12月初めに始めて毎日やってたらだんだん高レベルの曲もクリアできる様になってきた。たのしい。少なくとも全曲開放するまではやると思う。
ユーザーIDがたぶん oDgpcYR9 なのでフレンド申請ください。nxnkという名前です。


以上。

Windows 10 (バージョン2004)のMS-IMEでやまぶきRの「,」等の入力がうまくいかない

2023-01-14追記

Windows 11では解決してるので上げられる場合はWindows 11に上げましょう。

症状

なんか最近、たぶん12月のWindows Update以来、Windows 10上のMS-IME (Microsoft IME 日本語) + やまぶきR(ローマ字入力用)で「,」「.」などが上手く入力できない時がある。
設定ファイルで、シングルクォート('~')で囲んだ文字は、文字直接入力としてIMEの未確定文字として入力されるはずであるが、それが未確定文字として入力されなくなった。

具体的には次のような症状を示す。(「,」は設定ファイルで「','」として書かれるものを指す。シングルクォート「'」で囲まれた文字直接入力設定の文字ならなんでもよい)

  • 未確定文字列があるときに「,」を入力しようとすると入力されない。または…
    • 未確定文字列の前か後に確定状態で入力される
    • 未確定文字列が消えて「,」だけが残る
    • 未確定文字列が確定される、など
  • 未確定文字列がない場合に「,」を入力しようすると確定した状態で入力される

この動作はアプリによって様々であるが、「,」がIMEの未確定文字として入力できないのは共通している。
Firefox, Chrome, Explorer, Notepad++, Slack, Discord, メモ帳などで試したが、どのプログラムでも再現した。

ATOKではそうならないという情報を得たので、MS-IMEの問題っぽい。実際、以前はMS-IMEを使っていても問題は起きていなかった。Windows 10 May 2020 Update (バージョン2004)によってMS-IMEが新しいものに置き替わり、これに不具合が残っているようだ。結局、MS-IMEの古いバージョンを使うようにしたら解決した。

ソフトウェアのバージョン

  • OS: Windows 10 バージョン 2004 (OS ビルド 19041.685)
  • Microsoft IME 日本語(バージョン 10.0.19041.1*1?)
    • IMJPTIP.DLL, IMJPAPI.DLL, imjpcus.dll, IMJPRANKER.DLL, imjputyc.dllの更新日付がより新しく、12/17に新しくなっている (バージョン 10.0.19041.662)
  • やまぶきR Ver 1.11.1

ワークアラウンド

とりあえずの回避策として、MS-IMEの設定から「以前のバージョンのMicrosoft IMEを使う」をオンにしたら解消される。(とはいえ、互換用に残してるだけだと思うのでいつまで使えるかは分からないが…)

手順は、

  1. 言語バーのMS-IMEの「あ」または「A」の表示となっている部分を右クリック→「設定(S)」
  2. 「全般」
  3. 「以前のバージョンのMicrosoft IMEを使う」をオンにする

あるいは、

  1. Win+X (または画面左下端のWindowsロゴを右クリック)→「設定(N)」
  2. 「時刻と言語」
  3. 「言語」
  4. (「優先する言語」の下から)「日本語」→「オプション」
  5. (「キーボード」の下から)「Microsoft IME」→「オプション」
  6. 「全般」
  7. 「以前のバージョンのMicrosoft IMEを使う」をオンにする

とする。

もしくは、ATOKGoogle日本語入力などほかのIMEを使うと良さそう。

検証

すべてMS-IME (Microsoft IME 日本語)による。

やまぶきR

上記の通り。省略。

DvorakJ

「,」「.」等、その他Unicode文字として出力するように設定されたものについて、同様の症状が発生する。

紅皿

README.pdfによると「Ver. 0.1.4.2 … Windows 10 May 2020 Updateに対応するため、アプリに出力する文字をすべて半角または制御記号とした。」とあり、Windows 10 May 2020 Update (バージョン2004 (20H1))に問題があることが示唆されている。文字直接入力に相当する機能がないため、問題なく動く。

Win32 API

というか、DvorakJや紅皿が使っているプログラミング言語AutoHotKeyがどうやってUnicode文字列を送ってるかを調べたら、どうやらWin32 APIのSendInput()を使ってるっぽい。やまぶきRも同じかもしれない。

SendInput関数の引数の一つとしてINPUT構造体を与えるが、その内部に設定されるKEYBDINPUT構造体に wScan=ユニコードスカラ値, dwFlags=KEYEVENTF_UNICODE を設定して、その状態でSendInput関数を実行すると、例えば漢字などのUnicode文字が入力できる*2

Python3用のコードを置いておく。コードは、

にあるものに変更を加えたものである。

# https://stackoverflow.com/questions/62189991/how-to-wrap-the-sendinput-function-to-python-using-ctypes
import ctypes
import ctypes.wintypes
import time

KEYEVENTF_UNICODE = 0x4
KEYEVENTF_KEYUP = 0x2
INPUT_KEYBOARD = 1

# not defined by wintypes
ULONG_PTR = ctypes.c_ulong if ctypes.sizeof(ctypes.c_void_p) == 4 else ctypes.c_ulonglong

class KEYBDINPUT(ctypes.Structure):
    _fields_ = [('wVk' ,ctypes.wintypes.WORD),
                ('wScan',ctypes.wintypes.WORD),
                ('dwFlags',ctypes.wintypes.DWORD),
                ('time',ctypes.wintypes.DWORD),
                ('dwExtraInfo',ULONG_PTR)]

class MOUSEINPUT(ctypes.Structure):
    _fields_ = [('dx' ,ctypes.wintypes.LONG),
                ('dy',ctypes.wintypes.LONG),
                ('mouseData',ctypes.wintypes.DWORD),
                ('dwFlags',ctypes.wintypes.DWORD),
                ('time',ctypes.wintypes.DWORD),
                ('dwExtraInfo',ULONG_PTR)]

class HARDWAREINPUT(ctypes.Structure):
    _fields_ = [('uMsg' ,ctypes.wintypes.DWORD),
                ('wParamL',ctypes.wintypes.WORD),
                ('wParamH',ctypes.wintypes.WORD)]

class DUMMYUNIONNAME(ctypes.Union):
    _fields_ = [('mi',MOUSEINPUT),
                ('ki',KEYBDINPUT),
                ('hi',HARDWAREINPUT)] 

class INPUT(ctypes.Structure):
    _anonymous_ = ['u']
    _fields_ = [('type',ctypes.wintypes.DWORD),
                ('u',DUMMYUNIONNAME)]

#print(sizeof(INPUT))

SendInput = ctypes.windll.user32.SendInput
SendInput.argtypes = ctypes.wintypes.UINT,ctypes.POINTER(INPUT),ctypes.c_int
SendInput.restype = ctypes.wintypes.UINT

def send_unicode(s):
    i = INPUT()
    i.type = INPUT_KEYBOARD
    for c in s:
        i.ki = KEYBDINPUT(0,ord(c),KEYEVENTF_UNICODE,0,0)
        SendInput(1,ctypes.byref(i),ctypes.sizeof(INPUT))
        i.ki.dwFlags |= KEYEVENTF_KEYUP
        SendInput(1,ctypes.byref(i),ctypes.sizeof(INPUT))

if __name__ == '__main__':
    time.sleep(3)
    send_unicode('漢')

これを試してみたところ、日本語入力がオンのときにSendInputで入力された「漢」は、MS-IMEでは確定状態になったが、Google日本語入力では未確定状態となった。それっぽい。

*1:C:\Windows\System32\IME\IMEJP\imjpuexc.exe の右クリックメニューからプロパティ→詳細→製品バージョン。関係ないけどWindows 8の時はMS-IMEのバージョンが15.いくつになっていたようで、番号が若返ってる気がする、というかOSバージョンと統一されたっぽい

*2:Unicodeスカラ値を指定するwScanはUnsigned Short (16bit)である。16ビットで表せない基本多言語面(BMP)以外のコード値はどう入力するかというと、サロゲートペアを使うといいらしい。 https://stackoverrun.com/ja/q/6096887 を参照。

郵便番号を何桁読めば都道府県が判定できるのか?

はじめに

郵便番号から都道府県を取得したい。理由は、宅配便の配送料*1を計算するのに使いたかったので。


郵便番号と自治体等の住所の対応が調べられるデータを日本郵便が配布している。

これを使って郵便番号→都道府県を辞書引きすれば、郵便番号から都道府県を調べることができるはずである。
しかし、このデータは約12.5万行ある。47の都道府県を調べるために12.5万行のルックアップテーブルを持つのはちょっと大げさな気がする。もし郵便番号を7桁見なくても都道府県を判定できるのなら、それがいいのでは?

そう思って、郵便番号を何桁見れば都道府県を特定できるのかを調べてみた。

結論

結論を書くと、郵便番号から都道府県を完全に特定することはできない。理由は、同一の郵便番号が府県が異なる2つの市町村に紐づけられている例が3つあるからである。

郵便番号 住所
4980000 三重県桑名郡木曽岬町(掲載がない場合)
愛知県弥富市(掲載がない場合)
6180000 京都府乙訓郡大山崎町(掲載がない場合)
大阪府三島郡島本町(掲載がない場合)
8710000 大分県中津市(掲載がない場合)
福岡県築上郡吉富町(掲載がない場合)
町域の「掲載がない場合」というのは、「その他」に近い意味で、他の町域には郵便番号が割り当てられているが、それに該当しないところである、ということを指すようだ。数は少ないだろうとは思うが、正確性が必要な場合は無視できない。

他にも複数の市町村に同一の郵便番号が割り当てられている例があるが、都道府県が異なるのはこの3つのみである。

府県が異なる2つの市町村に結び付いた郵便番号を除いたとしても、7桁目だけが異なって都道府県が変わる例が多数あるため、結局7桁全部みないと都道府県判定はできない。

とはいえ

郵便番号の最初の2桁目までで大体の都道府県が特定できるらしい。近い番号と都道府県が異なっているものを例外として除外すると傾向が見えてくる。

郵便番号データは2020年11月30日更新のものを利用した。

00: 北海道
01: 秋田県
	「018550 ⻘森県」を除く
02: 岩手県
03: 青森県
04-09: 北海道
10-20: 東京都
21-25: 神奈川県
26-29: 千葉県
30-31: 茨城県
	「311441 栃⽊県」を除く
32: 栃木県
33-36: 埼玉県
	「349122 栃⽊県」を除く
37: 群馬県
	「3701507 埼⽟県」を除く
38-39: 長野県
	「3840097 群⾺県」を除く
	「389012 群⾺県」を除く
	「389226 新潟県」を除く
40: 山梨県
41-43: 静岡県
	「431412 愛知県」を除く
44-49: 愛知県
	「4980000 三重県または愛知県」を除く
	「49808 三重県」を除く
50: 岐阜県
51: 三重県
52: 滋賀県
	「520046 京都府」を除く
53-59: 大阪府
	「56308 兵庫県」を除く
60-62: 京都府
	「6180000 京都府または⼤阪府」を除く
	「6180001〜6180004 ⼤阪府」を除く
	「618001〜618002 ⼤阪府」を除く
63: 奈良県
	「630027 ⼤阪府」を除く
64: 和歌山県
	「647127 奈良県」を除く
	「64713 三重県」を除く
	「64715 奈良県」を除く
	「64803 奈良県」を除く
65-67: 兵庫県
68: 鳥取県
	「68401〜68404 島根県」を除く
	「685 島根県」を除く
69: 島根県
70-71: 岡山県
72-73: 広島県
74-75: 山口県
76: 香川県
77: 徳島県
78: 高知県
79: 愛媛県
80-83: 福岡県
	「8115 ⻑崎県」を除く
	「817 ⻑崎県」を除く
	「839142 大分県」を除く
84: 佐賀県
	「84804 長崎県」を除く
85: 長崎県
86: 熊本県
87: 大分県
	「8710000 ⼤分県または福岡県」を除く
	「871022 福岡県」を除く
	「87108〜87109 福岡県」を除く
88: 宮崎県
89: 鹿児島県
90: 沖縄県
91: 福井県
92: 石川県
	「9220679 福井県」を除く
93: 富山県
	「939017 ⽯川県」を除く
94-95: 新潟県
	「949832 ⻑野県」を除く
96-97: 福島県
98: 宮城県
99: 山形県

都道府県が異なる例外として除外した番号を調べると、郵便番号の最初の2桁の示す都道府県に隣り合う市町村であることがわかる(全て調べたわけではないので例外はあるかもしれない)。配送上の都合だったりするのだろうか?

という訳で、配送料には同一都道府県内の料金が設定されているため、都道府県が特定できないと送料を決定することができない。そのため、送料の判定に郵便番号を使うことは基本的にできない*2。目論見が外れた結果となった。残念。

コード

使ったPython 3コードを置いておく。日本郵便からダウンロードした全国一括の郵便番号データKEN_ALL.CSVと同じディレクトリに入れて使う。

ここまで読めば都道府県が一意に定まるよ、というのを調べるためのもの

#coding: utf-8
import csv, codecs

CSVFILENAME = "KEN_ALL.CSV"

#0 全国地方公共団体コード(JIS X0401、X0402)……… 半角数字
#1 (旧)郵便番号(5桁)……………………………………… 半角数字
#2 郵便番号(7桁)……………………………………… 半角数字
#3 都道府県名 ………… 半角カタカナ(コード順に掲載) (注1)
#4 市区町村名 ………… 半角カタカナ(コード順に掲載) (注1)
#5 町域名 ……………… 半角カタカナ(五十音順に掲載) (注1)
#6 都道府県名 ………… 漢字(コード順に掲載) (注1,2)
#7 市区町村名 ………… 漢字(コード順に掲載) (注1,2)
#8 町域名 ……………… 漢字(五十音順に掲載) (注1,2)
#9 一町域が二以上の郵便番号で表される場合の表示 (注3) (「1」は該当、「0」は該当せず)
#10 小字毎に番地が起番されている町域の表示 (注4) (「1」は該当、「0」は該当せず)
#11 丁目を有する町域の場合の表示 (「1」は該当、「0」は該当せず)
#12 一つの郵便番号で二以上の町域を表す場合の表示 (注5) (「1」は該当、「0」は該当せず)
#13 更新の表示(注6)(「0」は変更なし、「1」は変更あり、「2」廃止(廃止データのみ使用))
#14 変更理由 (「0」は変更なし、「1」市政・区政・町政・分区・政令指定都市施行、「2」住居表示の実施、「3」区画整理、「4」郵便区調整等、「5」訂正、「6」廃止(廃止データのみ使用))

postal2pref = dict()
with codecs.open(CSVFILENAME, 'r', encoding="shift_jis") as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        postalcode = row[2]
        prefecture = row[6]
        if postalcode in postal2pref:
            postal2pref[postalcode].add(prefecture)
        else:
            postal2pref[postalcode] = set([prefecture])

# headで始まる郵便番号の示す都道府県の種類の数を数える
def check_pref_startswith_rec(head):
    if len(head) > 7: return #8文字以上の郵便番号はありえない
    
    keys_startswith_head = [key for key in postal2pref.keys() if key.startswith(head)]
    values_startswith_head = set(map(lambda k: ", ".join(postal2pref.get(k)), keys_startswith_head))
    #print(len(values_startswith_head))
    if len(values_startswith_head) == 0: #郵便番号が存在しない場合
        return
    elif len(values_startswith_head) == 1: #都道府県が一つに定まった場合
        print("{}: {}".format(head, "".join(values_startswith_head))) #出力
        return
    else: #都道府県が一つに定まらない
        for n in range(0, 10):
            check_pref_startswith_rec(head + str(n))
            
if __name__ == '__main__':
    check_pref_startswith_rec('')

例外の番号を除外して同様のことをするもの

#coding: utf-8
import csv, codecs

CSVFILENAME = "KEN_ALL.CSV"

#2 郵便番号(7桁)……………………………………… 半角数字
#6 都道府県名 ………… 漢字(コード順に掲載) (注1,2)

startswith_exclude_list = ["018550", "311441", "349122", "3701507", "3840097", "389012", "389226",
                           "431412", "4980000", "49808", "520046", "56308", "6180000", 
                           "6180001", "6180002", "6180003", "6180004", "618001", "618002",
                           "630027", "647127", "64713", "64715", "64803", "68401", "68402", "68403", 
                           "68404", "685", "8115", "817", "839142", "84804", "8710000", "871022", 
                           "87108", "87109", "9220679", "939017", "949832"]
def check_exclude(postalcode):
    excludeflag = list(map(postalcode.startswith, startswith_exclude_list)).count(True)
    if excludeflag > 0:
        return True
    else:
        return False

postal2pref = dict()
with codecs.open(CSVFILENAME, 'r', encoding="shift_jis") as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        postalcode = row[2]
        prefecture = row[6]
        if check_exclude(postalcode):
            continue
        if postalcode in postal2pref:
            postal2pref[postalcode].add(prefecture)
        else:
            postal2pref[postalcode] = set([prefecture])

# headで始まる郵便番号の示す都道府県の種類の数を数える
def check_pref_startswith_rec(head):
    if len(head) > 7: return #8文字以上の郵便番号はありえない
    
    keys_startswith_head = [key for key in postal2pref.keys() if key.startswith(head)]
    values_startswith_head = set(map(lambda k: ", ".join(postal2pref.get(k)), keys_startswith_head))
    #print(len(values_startswith_head))
    if len(values_startswith_head) == 0: #郵便番号が存在しない場合
        return
    elif len(values_startswith_head) == 1: #都道府県が一つに定まった場合
        print("{}: {}".format(head, "".join(values_startswith_head))) #出力
        return
    else: #都道府県が一つに定まらない
        for n in range(0, 10):
            check_pref_startswith_rec(head + str(n))
            
if __name__ == '__main__':
    check_pref_startswith_rec('')

*1:ヤマト、ゆうパックは離島料金がかからないので都道府県が分かれば配送料が計算できる。佐川は離島は別料金。

*2:東京は郵便番号上2桁のみで完全に特定できるので、東京発の荷物の送料は送り先郵便番号上2桁のみで決定できる。北海道等も同様。

『みならいディーバ(※生アニメ)』――Vtuber時代を先取りした怪作

この記事はクソじゃないアニメ Advent Calendar 2020の4日目です。まだいっぱい空きがあるので紹介したいアニメがある人は書いてくださいね。

はじめに

あなたは『みならいディーバ(※生アニメ)』を知っていますか?先進的な作品であったにもかかわらずあまり知られていないので、みなさんにぜひ知ってもらいたくてこの記事を書きました。

f:id:nixeneko:20201203213535p:plain
©(※ネタバレ注意)最終回は生でライブやるかも委員会

概要

『みならいディーバ(※生アニメ)』はNOTTVで2014年7月-9月に月曜21:00から生放送されていました。全10話。1話約50分とちょっと長いです。私はNOTTVは契約していなかったのでニコニコ動画で見ました。
制作総指揮はニッポン放送の吉田尚記ひさのりさん、監督は『てさぐれ!部活もの』の石ダテコー太郎さんです。アニメーション制作は、後に『けものフレンズ』を作ることになるヤオヨロズ*1


本作は生アニメという触れ込みで、声優の村川梨衣さんと山本希望のぞみさんがキャラの声を担当するだけでなく、慣性式モーションキャプチャスーツ*2を身に着け3DCGのキャラをリアルタイムで動かして、そのアニメーション映像を生放送する、という試みです。

これだけ聞くと最近のVTuber/バーチャルライバーと似たようなことをしているように感じられるのではないでしょうか。ただ、キズナアイが活動し始めたのが2016年11月からなので、その2年以上前と考えるとかなり時代を先取りしていたように思われます。今でこそVTuber/バーチャルライバーが一般的になっていますが、当時は同様の試みはほとんどありませんでした。

全体の雰囲気としては声優ラジオに映像がついた感じでもあります。アニラジや声優イベントが好きな人、『gdgd妖精s』(ぐだぐだフェアリーズ)、『てさぐれ!部活もの』などのノリが好きな人は気に入ると思います。

ストーリー

ストーリーというようなストーリーはないのですが、設定としては、音声合成ソフト「バーチャルディーバ」シリーズである蒼井ルリと春音ウイは、ほとんど知名度がなくて持ち曲がない。そこで、自分たちで曲をつくってネットにアップして有名になろう!という話です。作曲は難しいので、拾ってきた曲(という設定で作曲はGhost Writerこと井上純一さん)に歌詞をつけることならできるだろう、ということで作詞をすることにしました。


番組の流れとしては、前半で作詞をします。まず用意されたインスト曲を流し、Twitterで歌詞のアイデアを募集して、それを元にルリとウイが歌詞を考えます。後半は、裏で音楽担当の井上さんが歌詞を急いでまとめている間、適当なコーナーが入ります。
後半のコーナーは生放送のリアルタイム性を生かしたもの(別の局のテレビを見てコメントをする)、双方向性を生かしたもの(ライブビューイング会場と通話する、巨大掲示板ニュー速VIPにスレを立てる)、モーションキャプチャを活かしたもの(ジェスチャーゲーム)、その他大喜利的なものなどがありました。
そして番組の最後でできた曲を歌う、という流れです。途中で(たぶん)キャリブレーションや歌の練習等の時間稼ぎのために事前収録された映像が挿入されます。

どこで見られるの?

1話はニコニコ動画で無料で見れるのでここに貼っておきます。


2話以降はニコニコで購入すると見れます。あとはBlu-ray/DVDがあるので買うなりレンタルするなり…

とはいえ、アニメ作品というよりアニラジやアニメイベントみたいな感じの面白さなので、集中して見ているには物足りないものの他のことに気を取られて聞き逃すと話が分からなくなるので、ニコ動でコメントと合わせて見るのがよさそうです。


1話では生放送ということでシステムトラブルに見舞われ、ルリが両手を広げた状態で動かなくなり、はりつけ状態になりました*3Blu-rayには「スタッフインカム罵声コメンタリー」と称して裏方スタッフの通信が収録されているのですが、それを聞くと現場はそれほど罵声飛び交う感じではなく割と和やかな感じで良かったです。生放送ならではのトラブルも楽しむのがこの作品の楽しみ方といえるでしょう。まあそれ以降はトラブルはあったものの、磔になることはなかったんですが……クリスマス生ライブというライブイベントでまた磔になりました。最初と最後で同じトラブルが起こるというのもなんか運命みたいなものを感じます。

作品の魅力は?

作品の先進性はありますが、技術的な面では現在はもっといい技術がでてきたりコモディティ化が進んだので、今見返してもあまり技術的にすごいとは思わないのではという気もします。しかし、新しいことをしようという制作陣の姿勢が伝わってきて、その勢いはすごいものがありました。例えば、クリスマス生ライブでは当日のライブで歌った音声を(1曲)USBに入れて配るという試みがありました*4。さすがに全員には配れないのでUSBの「おみや」つきチケットは倍率高かったみたいですが…。

それよりなにより一番は何といっても演者の二人が魅力的だというのがあります。村川さんは中の人そのまんまって感じでノリツッコミが面白く、話し出すと長くなるので尺泥棒と呼ばれることも。山本さんはちょっとズレたボケをしたり謎のダンスがキレッキレです。どちらも方向性は違えどやべーやつという趣があります。お二人ともめっちゃ動くので観てて飽きません。その代わりキャリブレーションが頻繁に発生しますが…
演者がめちゃくちゃに動くのでたぶん位置ずれが酷いことになっているんですが、そこで動きを抑えるように指示して解決する可能性もあったかもしれません。しかしそれをせず、たぶんキャリブレーションとかを増やすことで対応してキャラを動かせ続けたのが最高ですね。スタッフの攻めの姿勢を感じます。すごい動きをするとシステム担当のスタッフが苦い顔をしてたそうです(まあそりゃそうですね)。

アニメ風のアバターを用いたリアルタイム配信となると、コメントを用いた視聴者とのコミュニケーションを主体にしたものが多いですが、本作は時間制限があるのと曲を作ることを中心に据えていてるので、緊張感が生まれています。
というか、50分枠で作詞して最後に歌うって正気か?って思います。それも毎週…。

生パートのBGMはLiLiのHajimeさんによる生演奏で、会話に応じて曲調やメロディが変わったりするのも見どころ(聴きどころ?)です。自然なので気づかないですが…。

生放送なのでシステムトラブルが結構発生するのですが、演者の二人がそれをネタにし、トラブルも楽しむようなしたたかさがありました。トラブルとかでなんとなく裏側が透けて見えるのが好きです。NOTTVでは水面下(スタジオの様子)の放送があったり、Blu-rayなどではスタッフの通信音声や水面下のダイジェストが収録されていたり、裏方の情報が供給されているので、そういうのが好きな人はBlu-ray見てくださいね。

エンディングテーマ

作中でつけられた歌詞はカオスなのが多いです。
つくられたエンディングテーマはYouTubeに上がっています
その中で特に好きなのを次に挙げておきますね。一つ2分程度で見れるので見てください。本編見ずにこれだけ見ても意味が分からないかもしれませんが……まあ作詞のノリはわかるんではないかと思います。

第5話エンディングテーマ曲『筋肉に願いを』


第9話エンディングテーマ曲『現実逃避ラプソディー』

さいごに

記事を書くにあたって作品を最初から見返しました(時間があまりとれなかったので最後まで見返すことはできませんでした…)が、やっぱり演者のこの二人面白いですね。いきなりコント始めたり…

これアニメか?という向きもあると思いますが、まあ、アニメって言ってるしアニメということで紹介しました。
企画者がラジオ畑の人なので、アニラジみたいな作品ですが、そんな雰囲気が好きな人は楽しめると思います。見てね。

リンク

みならいディーバを紹介してる先駆者が居ました。私より紹介が上手く熱があるので、貼っておきます。
huyukiitoichi.hatenadiary.jp
note.com

*1:ヤオヨロズ、2020年3月で解散していたみたいですね……さっき調べて知りました。

*2:商業アニメで使われるモーションキャプチャは光学式が多いですが、光学式は高品位なモーションがとれるものの、専用のカメラをたくさん設置したスタジオを必要とします。一方で慣性式モーションキャプチャスーツは、得られるモーションの品質は光学式に劣るものの、スタジオを必要としないので、ライブ会場等でも使うことができます(実際にみならいディーバではサイエンスホールとかでライブをしました)。その代わり誤差が蓄積してどんどん位置がずれていくので定期的なキャリブレーションを必要とします。

*3:3Dモデルデータを作る際に両腕を広げた状態で作成するので(Tポーズといいます)、モーションが適用されないとその形になります。

*4:投票で選ばれた曲をライブの最初に歌い、その音源をUSBにコピーし、ライブ終了後に「おみや」つきチケットを持ってた人に配られました。

Windows 10のモンゴル文字キーボード配列図

Windows 10にはモンゴル文字のキーボード配列がなぜか2種類入っていて、「モンゴル語 (モンゴル文字)」と「伝統的なモンゴル文字 (標準)」という名前になっている。これらは配置がやや異なる。
モンゴル語 (モンゴル文字)」の方が古くから存在し、「伝統的なモンゴル文字 (標準)」は後から追加されたようだ。čやoの位置、一部記号等が異なっている。

これを使ってキーボード配列図を作成した。

ラテン文字転写は基本的に塩谷 茂樹・中嶋 善輝『モンゴル語 (世界の言語シリーズ3)』大阪大学出版会(2011)に基づいている。


伝統的なモンゴル文字 (標準)

f:id:nixeneko:20200828231947p:plain

ソースコード

ネオ民謡―ポップにアレンジされた日本民謡を聞く

日本民謡は、多くの現代人にとって、あまり馴染みのないものではないでしょうか。
聞く機会も少ないし、また、現代の音楽になれてしまった私たちからすると、音に厚みが足りない気がするし、聴いていて飽きてしまうこともあります。

しかし、民謡の伴奏を現代的な音楽に変えると、(ちょっとエスニックな)ポップスとして普通に聞けるものになります。ドラムやベースといったリズム隊が入るだけでも驚くほど聞きやすく感じます。
日本には、民謡を現代風のトラックに乗せてアレンジした作品を発表しているアーティストが何組かいますので、この記事で紹介します。このようにアレンジされた民謡をネオ民謡(新しい民謡)と呼んでいる人もいます。歌っているのはガチの民謡歌手だったりするので、みなさん上手です。

Omodaka

寺田創一さんによる民謡テクノユニット。民謡歌手の金沢明子さんがボーカルで参加しています。
チップチューン系のピコピコ音もあり、結構面白い音作りをしています。
ライブが独特で、巫女装束に身を包んだ寺田さんがディスプレイに映った金沢さんとインタラクトするパフォーマンスが面白いです。
Omodaka以前にも同じタッグで1991年に『金沢明子 House Mix 1,2』という民謡のハウスアレンジなども発表されています。

plum song

「梅は咲いたか」という江戸端唄(はうた)です。芸妓たちを歌った歌だけあってPVは性を連想させる形象が多く出てきます。
www.youtube.com
トラックが何か聞いたことがあるという人もいるかもしれませんが、Debargeの“I Like It”です。

kokiriko bushi

富山の民謡「こきりこ節」です。
www.youtube.com


民謡の他には競艇の曲とかがあります。
他にもライブやPVなど、Youtubeに多くの動画が上がっています

NeoBallad

若狭さち(Vocal)さん、上領亘(Drums&Arrangement)さんによるテクノ民謡ユニットです。

会津磐梯山

福島県民謡の「会津磐梯山」です。「小原庄助さんなんで身上(しんしょう)つぶした 朝寝 朝酒 朝湯が大好きで それで身上つぶした ハァもっともだ」という囃子言葉が面白い曲です。
www.youtube.com

大漁唄い込み

宮城県民謡「大漁唄い込み」です。
www.youtube.com

他にもYouTubeに動画が上がっています

朝倉さや

「山形弁の歌姫」だそうで、往年の名曲を山形弁カバーしたりしています。
オーソドックスな民謡もやるし、Future Traxといって、今風のトラックをつけた民謡も歌ったりしているようです。

最上川舟唄 (River Boat Song ft.GOMESS)

山形県民謡「最上川舟唄」のアレンジです。朝倉さんの歌とGOMESSさんのラップが組み合わさって全く新しいものになっています。
www.youtube.com

Mr.Mamurogawa - 真室川音頭(民謡)

山形県民謡の「真室川音頭」のアレンジです。途中オリジナルの歌が入りますね。
www.youtube.com

他にもYouTubeに曲などが上がっています

民謡クルセイダーズ

ラテン音楽+民謡。最近ラジオとかでも聞くようになりました。ラテン音楽を中心に様々なエスニックのビートを組み合わせているらしいです。

炭坑節

福岡県民謡「炭坑節」。盆踊りとかでよく聞く有名な歌ですね。
www.youtube.com

会津磐梯山

福島県民謡の「会津磐梯山」です。人によってアレンジが違うのを聞き比べてみてもいいかもしれません。
www.youtube.com

他にもYouTubeにライブ動画等が上がっています

黒船

ジャズバンドですが、三味線が入っています。ボーカルの里アンナさんは奄美島唄をバックグラウンドとしているようなので、奄美の民謡も多いようです。奄美島唄と三味線の組み合わせが斬新です。民謡のアレンジ、オリジナル曲、ジャズのスタンダードの3つの方向性でやっているとのこと。

豊年節

奄美大島の歌「豊年節」です。
www.youtube.com

行きゅんにゃ加那節

奄美大島の歌「行きゅんにゃ加那節」です。
www.youtube.com

朝崎郁恵

奄美大島唄者朝崎郁恵さん。アルバム『南ぬ風』では、ギターや三味線等で伴奏の付いた奄美島唄が収録されているようです。

千鳥浜 with タナカアツシ&五十嵐典子

奄美民謡の「千鳥浜(ちじゅりゃはま)」。
www.youtube.com

久嶋 美さち(きゅうしま みさち)

宮崎県のネオ民謡歌手だそうです。

五木の子守唄

熊本県民謡「五木の子守唄」です。
www.youtube.com

正調刈干切唄

宮崎県民謡「正調刈干切唄」です。
www.youtube.com

寺尾紗穂『わたしの好きなわらべうた』

シンガーソングライターの寺尾紗穂さん。民謡を中心に歌っているわけではないのですが、2016年にわらべうたのカバーアルバムを出しました。静かな気持ちになるいいアルバムです。

ねんねしなされ

熊本の守子歌「ねんねしなされ」です。
www.youtube.com

七草なつな

茨城の七草の歌「七草なつな」です。
www.youtube.com

まとめ

いかがでしょうか。各アーティスト毎に2曲程度しか挙げなかったので、興味があればそこから調べて聞いてみてください。Spotifyにあったりしますので。
私も調べているうちに知ったアーティストも居るので、音源をぼちぼち集めていきたいと思います。これからこのようなアーティストが増えていくと面白いですね。

蛇足

声優の鈴木愛奈さんが民謡のバックグラウンドがあるようで、民謡アレンジとか出やしないかと少し期待しています。