テキストをギャル文字に変換するコマンドを作った

>Nimτ〃日本語を≠〃ャﾉﾚ文字ッﾎ*ﾚ|文字列｜=変換すlﾚ⊃マ*ﾉ┣〃を作ﾚﾉмаＵ+ﾆ。＝σ記事τ〃|?作ッ+ﾆ⊃マ*ﾉ┣〃σ使ﾚ|方├、仕組彡を解説Ｕмаす。


※原文: Nimで日本語をギャル文字っぽい文字列に変換するコマンドを作りました。
この記事では作ったコマンドの使い方と、仕組みを解説します。

# ギャル文字とは

ひらがなやカタカナ、漢字などの任意の文字を、元の文字以外の任意の1つ以上の文字列の組み合わせで表現する表現技法を指します（たぶん）。

以下がギャル文字の一例です。

> ァﾚヽ⊃`λ_寸>`

原文: あいうえお

# なぜ作ったか

作れそうだったから作りました。

# ソースコード

ソースコードは以下。

https://github.com/jiro4989/gyaric

nimble packageにも登録ずみですので、Nimユーザであれば以下のコマンドでインストールできます。

```bash
nimble install gyaric
```

# 使い方

以下のように実行することで、任意の文字をギャル文字に変換します。

```bash
echo <任意の文字> | gyaric encode
```

以下のコマンドで元の文字列に『ある程度まで』復元できます。
※完全には復元できません。

```bash
echo <ギャル文字> | gyaric decode
```

# 仕組み

Tableのキーにひらがな、カタカナ1文字を持ち、値に変換候補のギャル文字を1つ以上持たせただけです。かなり単純。

```nim
import tables, random, strutils

const
  dict = {
    "あ": @["ぁ", "ァ"],
    "ア": @["ァ", "了"],
    "い": @["ﾚヽ", "ﾚ|", "ヰ"],
    "ぃ": @["ы"],
    "イ": @["亻"],
    "う": @["⊃`"],
    "ウ": @["宀"],
    "え": @["ゑ", "λ_"],
    "エ": @["ヱ"],
    "お": @["寸>`"],
    "オ": @["才", "ｵ"],
    "が": @["ｶヾ", "ｶ〃", "ｶゞ", "ヵ〃"],
    "ガ": @["ｶヾ", "ｶ〃", "ｶゞ", "ヵ〃"],
    "か": @["ｶl", "ｶゝ", "ｶヽ", "ヵゝ"],
    "カ": @["ヵ"],
    "ぎ": @["(ｷ〃", "‡〃", "≠〃"],
    "ギ": @["‡〃", "≠〃"],
    "き": @["(ｷ", "‡", "≠"],
    "キ": @["‡", "≠"],
    "ぐ": @["＜〃"],
    "く": @["＜"],
    "げ": @["｜ﾅ〃", "ﾚﾅ〃"],
    "ゲ": @["ヶ〃"],
    "け": @["｜ﾅ", "ﾚﾅ"],
    "ケ": @["ヶ"],
    "ご": @["⊃〃", "⊇〃"],
    "ゴ": @["⊃〃", "⊇〃"],
    "こ": @["＝"],
    "コ": @["⊃", "⊇"],
    "サ": @["廾"],
    "さ": @["±"],
    "し": @["ι", "υ", "∪", "U", "Ｕ"],
    "じ": @["ι〃", "υ〃", "∪〃", "Uﾞ", "Ｕﾞ"],
    "ソ": @["`ﾉ", "ヽﾉ"],
    "だ": @["tﾆﾞ", "+ﾆ〃", "ﾅﾆ〃", "ﾅこﾞ"],
    "た": @["tﾆ", "+ﾆ", "ﾅﾆ", "ﾅこ"],
    "ヂ": @["干〃", "千〃"],
    "チ": @["干", "千"],
    "づ": @["⊃〃", "っ〃"],
    "つ": @["⊃"],
    "ツ": @["〃ﾉ"],
    "っ": @["ッ"],
    "で": @["τ〃"],
    "て": @["〒", "τ"],
    "テ": @["〒", "τ"],
    "ド": @["├〃", "┣〃"],
    "ト": @["├", "┣"],
    "と": @["├", "?"],
    "な": @["ﾅょ", "+?", "+ょ", "fょ"],
    "ナ": @["ﾅ"],
    "に": @["｜=", "｜ﾆ", "ﾚﾆ"],
    "ニ": @["ﾆ"],
    "ね": @["ｷａ", "пё", "Йё"],
    "の": @["σ"],
    "ネ": @["пё", "Йё", "ネ"],
    "ノ": @["/", "丿"],
    "バ": @["ﾊ〃", "/ヽ〃"],
    "パ": @["ﾊo", "/ヽo"],
    "ぱ": @["ﾊo", "/ヽo"],
    "は": @["|?", "ﾚ?", "は"],
    "ハ": @["/ヽ"],
    "ビ": @["ﾋ〃"],
    "ぴ": @["ﾋo", "ﾋ*"],
    "ピ": @["ﾋo", "ﾋ*"],
    "ヒ": @["ﾋ"],
    "ブ": @["ﾌ〃", "┐〃"],
    "プ": @["ﾌo", "┐o", "┐*"],
    "ぷ": @["ﾌo", "┐o", "┐*"],
    "べ": @["∧〃"],
    "ベ": @["∧〃"],
    "ぺ": @["ﾍo", "∧o", "∧*"],
    "ペ": @["ﾍo", "∧o", "∧*"],
    "ボ": @["ﾎ〃"],
    "ポ": @["ﾎo", "ﾎ*"],
    "ぽ": @["ﾎo", "ﾎ*"],
    "ほ": @["│ま"],
    "マ": @["ма", "マ"],
    "ま": @["ма", "ま"],
    "ミ": @["Ξ", "彡"],
    "み": @["Ξ", "彡", "ゐ"],
    "ム": @["厶", "∠、", "＜、"],
    "む": @["厶", "∠、", "＜、"],
    "メ": @["×", "乂", "〆"],
    "も": @["м○", "も"],
    "モ": @["м○", "モ"],
    "や": @["ゃ"],
    "ゃ": @["ャ"],
    "ヤ": @["ャ"],
    "ゆ": @["ゅ"],
    "ユ": @["ュ"],
    "ゅ": @["ュ"],
    "よ": @["∋", "чOo0"],
    "ヨ": @["∋"],
    "ょ": @["ョ"],
    "ら": @["ら", "ζ"],
    "り": @["L|", "└ﾉ", "Lﾉ", "ﾚﾉ"],
    "リ": @["L|", "└ﾉ", "Lﾉ", "ﾚﾉ"],
    "る": @["lﾚ", "｣レ", "/レ", "ﾉﾚ"],
    "ル": @["lﾚ", "｣レ", "/レ", "ﾉﾚ"],
    "れ": @["れ", "ｷν", "└"],
    "レ": @["レ", "└"],
    "ろ": @["з", "З"],
    "ロ": @["口"],
    "わ": @["ゎ", "ｷっ"],
    "ワ": @["ヮ"],
    "ん": @["ω", "μ", "ｗ"],
    "ン": @["*ﾉ"],
    }.toTable
```

encode処理では、単純に置換処理でギャル文字に置き換えるという処理を行っています。

「完全には復元できません」と書いたのは、encode処理後の文字列から元の文字列を一意に特定できないためです。特定できるようにもできるのですが、面倒だったのでそこまで作りこんでいません。

# まとめ

以下の内容について説明しました。

- ギャル文字のこと
- gyaricコマンドの作り
  - 単純な置換処理で実現した
  - 100％元の文字に復元はできない

ギャル文字を誰かに送りたくなった時は、思い出していただければ幸いです。

以上です。