少し手が空いたので、ひさびさにperl5 Text::Shinobi というモジュールを作成してみました。340年前に編纂された、かの忍術総合百科事典『万川集海』に登場する換字式暗号のencode/decodeをするものです。

暗号✨ 忍者💕 少年時代に何かで見たことがある方も多いのではないでしょうか。ちなみに、当然ながら忍者界ではテストにも出ます

モジュール化のアイディア自体は数年前に思いついたのですが、二の足を踏んでいたのは、以下のようなめんどくさい点(←ここが楽しい点でもある)によります:
- 万川集海の該当章(巻五)の原典にあたることが面倒であった
- 変換表が厳密には載っていない(忍術書では大事なところを「これは口伝」と割愛する
- 変換後の文字について、そのままのShapeの漢字が存在するが…、(例:「横」)
- それらをJIS(X 0208, X 0212, X 0213)の視点で見た場合、あるものと無いものがする
- Unicodeの視点で見た場合(perlであることもあり基本Unicodeにマッピングしたい)、最近のバージョンで入ったものやいわゆるutf8mb4の範囲であったりする
- 特にJIS外由来でUnicodeに入っている文字の場合、表示できるフォントが入っているかどうかが環境や状況(該当文字のlang判定)によって異なる。
ですがこのたび、
- 昨年発売の 完本 万川集海 により内閣文庫本を容易に参照できるようになったこと!
- 変換表は現代一般的とされる「栬」を「い」スタートするものと固定
- 変換後の文字を選択できるようにしつつも、「その時_ほとんどの_ブラウザで表示可能な文字をデフォルトとする」をコンセプトとする妥協。
などと決め、気合を入れUnicode表と対決。検証には うみほたる 様の記事と同梱のreadme.txtを激烈参照させていただきました。Unicodeに採用された文字の数点が「忍びいろは」由来であることなど、興味深かったです。Unicodeに生き続ける忍術! (参考: JIS X0213規格票のp205, p282「附随書6(規定)」(X0213_09.pdf)にて用例として示されています。
ブラウザの標準環境で表示可能な文字というのが曲者で、中国語フォントへのfallbackを考慮すると(たとえばMacの場合でゴシック体の場合はPingFang HK)、最終的にはシミュレータでちまちま確認。(結果Android 4.xは見捨てることに… 苦
しかしこういった泥臭い確認作業(2016)、

10年前(2007)やってたことと大して変わらない件www

emoji4unicodeがそうであったように、Unicodeやフォント環境などは今後も変わるもの。忍びいろはが流行すると、現在対応するUnicodeがない文字もUnicode採用されるカモ!!