ことのはたんご - 単語推測推理ゲーム「Wordle」日本語版

# この記事の内容
　[Wordle](https://www.powerlanguage.co.uk/wordle/)の日本語版である「ことのはたんご」を作製する際に利用した辞書の説明および辞書の解析。
　ことのはたんご初期に記載した物であり、現在の内容とは多少異なる点があることをご了承していただきたい。

# 作製したゲーム紹介

ことのはたんご

https://plum-chloride.jp/kotonoha-tango/index.html


![qiita.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/640108/2d91f296-0e11-f714-7133-2e8614c4a92e.jpeg)




HIT & BLOW (マスターマインド)」や「ヌメロン」といったゲームを初めとした推理ゲームの単語版
推定プレイ時間：5～30分 /日
ジャンル：推理ゲーム



# 注意書き

　本アプリケーションは営利目的での展開はしていません。
　著者によるリンク先でのアクセスログの取得や広告の掲示は行っていません。

:::note warn
ここより下は本ゲームの開発における技術的な話等を記述しています
アプリケーションの使い方を知りたい方やプレイしたい方は上記に記載のゲームのリンクよりゲームページに飛んで下さい
:::


# ゲーム紹介・作製のきっかけ
### 3行で

* [Wordle](https://www.powerlanguage.co.uk/wordle/)面白い
* 英単語を詳しく知らないと難しい
* じゃあ日本語版作ろう

### 詳細


Josh Wardle([twitter](https://twitter.com/powerlanguish))さんが作製したフリーウェブアプリである「[Wordle](https://www.powerlanguage.co.uk/wordle/)」

https://www.powerlanguage.co.uk/wordle/

このアプリは「HIT & BLOW (マスターマインド)」や「ヌメロン」といったゲームを初めとした推理ゲームの単語版である。

ゲームの流れは以下の通りである。

>1. アプリ側が5文字の単語を一つ決める
1. ユーザ側が適当な5文字の単語を入力する
1. アプリ側が5文字の単語と一致しているか判別し、一致している箇所があればオレンジで、同じ文字だが場所が違う場合は青でハイライトする
>1. 上記2～3を数回繰り返し1で定めた単語を当てる

ウェブアプリ「Wordle」におけるゲーム説明も添付する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/640108/70b2911a-6ebf-6a2c-9744-8ab6506d129c.png)
（画像引用：[Wordle - A daily word game](https://www.powerlanguage.co.uk/wordle/) [参照日2022/01/20]）

　非常に面白い作品だと思うが、一つ問題がある。それは英単語が理解出来ないと難しいといった点だ。
「HIT & BLOW」や「ヌメロン」では色や数字といった世界共通の物を利用して作られているが単語の場合だとそうとはいえない。
そのためフランス語版である「[LE MOT](https://wordle.louan.me/)」などの開発がされており、今回日本語版を作製したいと思い作製する。

# ゲーム制作前考察
## 要素分解
　ウェブアプリ「Wordle」がなぜ人気になったのか、またゲームを作製するに当たって何が必要なのか分解する。
### 人気の要因
　Wordleを作製した際には簡単な身内用のゲームだったそうだが、だんだんとSNSでの流行がうまれ話題となった。
　そのSNSの話題になった理由が下記のような書き込みである。

>Wordle 215 6/6

>⬜⬜⬜⬜⬜
>🟦⬜⬜⬜⬜
>🟦🟧⬜⬜⬜
>⬜🟦🟦🟦⬜
>⬜🟧🟦🟦⬜
>🟧🟧🟧🟧🟧

　これはゲーム画面を表しており、Wordleの215番において最大6回中6回取り組んで成功したということを表している。
　このような投稿を見にして、なんだこれはと検索し流行り始めたといった形である。

　じつはこのゲーム、1日に1回しか解くことが出来ず、またその日の単語は全ユーザーで共通といった仕組みである。
　そのため、「今日俺は3回でクリアできたぜ」「俺は6回かかっちゃったわ」などといったやりとりが出来る。

　以上よりコピーゲームを作るという点のみならず、面白いという理由のためにも下記の仕組みの搭載が必要となる

* 全ユーザーに共通した単語の提供
* リザルト画面の共有機能 

### 単語と試行回数の選定

　言語における文字数に関して、英語は全部で「AtoZ」の26文字なのに対して日本語は「あtoん」にくわえ「がtoぼ」「ぱtoぽ」「ゃゅょっー」「ぁぃぅぇぉ」の計81存在する。英語では約1100万通りの並べ方（単語は考慮しない場合）あり、日本語では先頭の「ん」や「ゃ」等の使い方を考えない場合では約35億通り存在する。また単語数で考えた場合英語では1万2972単語存在しており（Wordle使用単語）、日本語では5万8384個単語存在している（国立国語研究所：[UniDic](https://ccd.ninjal.ac.jp/unidic/)より名詞に指定されているかつ5文字の単語数、重複あり）。

　以上のことより、日本語にした際には英語ほどの気軽さは存在せず、非常に難しい物になると予想される。よって日本語の単語の選出基準に関してもう少し見直す。
　以下のテーブルは国立国語研究所：UniDicより名詞に指定されている単語に関する分類を表示した物である。

| 品詞中分類 | 品詞小分類 | 品詞小分類 | 単語数数 | 5文字の単語数 | 5文字の単語かつ重複を除いた数 |
|:-:|:-:|:-:|-:| -:| -:|
| 助動詞語幹  |  * |   *|  3 | 0 | 0 |
| 固有名詞  |  一般 |  * | 12,695  | 2,598 | 1,689 |
| 固有名詞  | 人名  | 一般  |  32,267 | 7,855 | 5,721 |
| 固有名詞  | 人名  |  名 | 36,482  | 3,742 | 1,207 |
| 固有名詞  | 人名  |  姓 | 18455  | 1,143 | 644 |
| 固有名詞  | 地名  |  一般 |  24,340 | 4,572 | 3,306 |
| 固有名詞  | 地名  |  国 | 1,203  | 265 | 115 |
|  数詞 | *  | *  | 731  | 139 | 25 |
| 普通名詞  | サ変可能  | *  |  15,938 | 3,400 | 1,289 |
| 普通名詞  | サ変形状詞可能  | *  | 246  | 26 | 7 |
| 普通名詞  |   一般| *  | 169,979  | 33,678 | 17,188 |
| 普通名詞  |   副詞可能| *  | 1,078  | 128 | 41 |
| 普通名詞  |   助数詞可能| *  | 1,438  | 189 | 70 |
| 普通名詞  |   形状詞可能|*  |  3,761 | 649 | 218 |

　以上のデータをもとにいくつか要らない物を除外していく。

**固有名詞 | 一般**
　味の素やクアルコム、クラムボン、サイゼリヤなど一般的な固有名詞があげられている。
　アイリバーやアタラファ、キナージイのようにしかし一般的に知られていないものが多い。
　よって入力する際に無いと不便だと思われるが、出題する際には除外する。
**固有名詞 | 人名**
　外国人の名前が多く、適していないと思われるため除外する。
**固有名詞 | 地名**
　国に関しては通常通り提供し、一般の地名は出題せず入力確認にのみ用いる。
**数詞**
　「六百」などのような名詞なので今回は除外する。
**普通名詞**
　一般的に使われていない名詞も多々あるが、普通な物が多いためこれらはすべて用いる

#### 使用単語
　以上より出題においては固有名詞の国および普通名詞のみ利用する。
　入力する際の単語の有無の判定には上記にくわえ固有名詞の地名および固有名詞の一般を利用する。
　よって以下が実際に使用する単語数である。

| 目的 | 単語数 |csvファイルサイズ|
|:-:|-:|-:|
|  出題 | 19,051  | 520KB|
|  検証 | 23,987  | 399KB |

# 実装
　単語辞書を使う関係上営利目的での展開できず、個人的にも営利目的での展開を望んでいないため低コストでのサイトの運営を目指す。
　よってJavaScript・HTML・CSSを利用し静的サイトとして実装する。


# 評価・その後
　実際に開発してみたところ、「消火器」「社会科」といった一般的な名詞が抜けていた。UniDicでは消火器を消火＋器、社会科を社会＋科と分けて考える「短単位」という単位を利用しており、上記のような単語が直接収録されていないことが起因している。また予想よりも多くの知らない単語が出題される傾向が大きいことが解った。そのため追加で別の辞書も用い、別の方法を用いることにする。
　そこで採用したのが、国立国語研究所(2004)『分類語彙表増補改訂版データベース』(ver.1.0)である。分類語彙表とは「語を意味によって分類・整理したシソーラス (類義語集)」(引用：[分類語彙表－増補改訂版データベース コーパス開発センター -Center for corpus development-](https://ccd.ninjal.ac.jp/goihyo.html))のことである。こちらでは固有名詞等のノイズが少ないため出題に適していると考えられる。この語彙表における類が体である物のみにフィルターして用いる。

　軽くまとめると、UniDicは近代的な単語（「エクセル」など）の掲載は多いが、逆にその網羅性が出題には適していない。分類語彙表は固有名詞を含まない一般的な日本語をまとめ上げており問題には適しているが、検証で用いるにはやや数が足りない。

　そこでこの二つの辞書を組み合わせ問題には分類語彙表を用い、検証には両者の辞書を用いる。
　本語彙表における5文字の単語数は12,558個である。これを出題とする。また軽く触ったところ簡単に5文字の単語を思いつく可能性が少ないため、網羅性も兼ねて当初はUniDicで用いていなかった単語に関しても用いる。

#### 分類語彙表におけるデータ処理
　分類語彙表を用いる際に一つ課題がある。分類語彙表では長音（ー）をすべてかなに変換している。分類目的では問題ないかも知れないが、本アプリケーションにおいては課題が残る。長音が用いられている単語は計645単語であるが、その中でも見出しと読みの文字数が違う物は38単語しか存在しない。そのため、その38単語に対しては手動で読みを整え、残りの617単語に対してはみだしと同様の位置の文字を長音で置き換えることで解決する。

　以下が本実装の際に用いた単語となる

| 目的 | 内容 |  単語数 |csvファイルサイズ|
|:-:|:-:|-:|-:|
|  出題 | 分類語彙表 | 19,051  | 520KB|
|  検証 | 分類語彙表+UniDic | 48,895  | 399KB |

# まとめ

　思い浮かべた物が完成して非常に満足である。
　しかし日本語の単語において同様の条件である5文字としてアプリケーションを開発したことがあまり良くなかった様に思える。いざゲームをプレイしてみると単語を思い浮かべるのに非常に苦戦した。
　また試行回数の上限を10回と指定したが、それでも81つ存在する日本語に対しては少ないような気がする。

　上記のようにまだまだいたらない点などやるべきことが多いと思う。個人的には文字数を4文字にすればやや易化するようには思えるが、日本語の文字数の多さからある程度の試行回数を与えないとかすりもしない問題があるようには思う。
　これをきっかけにいろいろ検証しながら学習をして、よりよいアプリケーションに改良できるように努力していきたい。
　（とりあえずJavaScriptのコードをきれいに書くところから始めたい。）