漢字やカタカナが読めない子供でもMinecraftで遊べるようにUIを平仮名化しました。
平仮名勉強中の子供でも文字に興味を持ってくれるかなと思います。
リモートワークでの業務効率化に貢献すること間違いなしです。
対象はMinecraft Java Edition
です。
-
2020/07/04追記
Minecraft Java Edition 1.16.1(ネザーアップデート)でも動作することを確認しました。
リソースパックを指定しただけではひらがなにならない場合の対応手順を追記しました。
概要
Minecraftのリソースパックという仕組みを利用して実現しています。
バニラ範囲の文字が概ね平仮名になります。
Minecraft本体に付属するリソースファイルをひらがなに変換しリソースパックを作成します。
リソースファイルの再配布にあたるかもしれずライセンス的に問題があるかもしれないので、リソースパックを作るツールとして実現しています。
生成されたリソースパックの取り扱いは自己責任でお願いします。
環境
-
ツール実行環境 (
Docker
とMinecraft
が必要です。)-
Minecraft Java Edition
-
Windows Subsystem for Linux(Ubuntu 18.04)
- Docker version 18.09.7, build 2d0083d
-
Windows 10 Pro バージョン 2004
- Docker Desktop Community 2.2.0.5
-
macOS
- Docker Desktop Community 2.3.0.1
-
-
ツールの
Docker Image
内の環境- CentOS 7.7.1908
- mecab 0.996
- mecab-ipadic-NEologd
- python 3.6
- MeCab 0.996.2
- jaconv 0.2
TL;DR
-
リソースパックを使うとこのようになります。
-
ツールのソース,Docker Imageは下記リポジトリにUPしています。
(github packagesへのアクセスのためにdocker loginが必要です。 GitHub Packagesで利用するために Docker を設定する - Githubヘルプ)
使い方
本ツールの使い方
ツールはDockerより起動します。
(github packagesへのアクセスのためにdocker loginが必要です。 GitHub Packagesで利用するために Docker を設定する - Githubヘルプ)
コマンド
Windowsでの実行:
# windowsのユーザー名は [username] としています。
# 使用するときは環境に合わせて置き換えてください。
docker run -v /c/Users/[username]/AppData/Roaming/.minecraft/assets:/assets:ro -v /c/Users/[username]/AppData/Roaming/.minecraft/resourcepacks:/resourcepacks:rw -e "MINECRAFT_VERSION=1.12" docker.pkg.github.com/n-noguchi/mc-hiragana-resourcepack-builder/mc-hiragana-resourcepack-builder:1.0.0
Windows Subsystem for Linux (Ubuntu 18.04)での実行:
# windowsのユーザー名は [username] としています。
# 使用するときは環境に合わせて置き換えてください。
docker run -v /mnt/c/Users/[username]/AppData/Roaming/.minecraft/assets:/assets:ro \
-v /mnt/c/Users/[username]/AppData/Roaming/.minecraft/resourcepacks:/resourcepacks:rw \
-e "MINECRAFT_VERSION=1.12" docker.pkg.github.com/n-noguchi/mc-hiragana-resourcepack-builder/mc-hiragana-resourcepack-builder:1.0.0
macOSでの実行:
# macOSのユーザー名は [username] としています。
# 使用するときは環境に合わせて置き換えてください。
docker run -v "/Users/[username]/Library/Application Support/minecraft/assets:/assets:ro" \
-v "/Users/[username]/Library/Application Support/minecraft/resourcepacks:/resourcepacks:rw" \
-e "MINECRAFT_VERSION=1.12" docker.pkg.github.com/n-noguchi/mc-hiragana-resourcepack-builder/mc-hiragana-resourcepack-builder:1.0.0
引数
タイプ | 名前 | 説明 |
---|---|---|
環境変数 | MINECRAFT_VERSION |
Minecraft Java Edition のバージョンを指定します。一度起動し、ダウンロードされている必要があります。 指定可能なバージョンは 1.12 ,1.13 ,1.14 ,1.15 ,1.16 の何れかです。 |
ボリューム | /assets |
Minecraft Java Edition のassets フォルダをマウントします。 |
ボリューム | /resourcepacks |
Minecraft Java Edition のresourcepacks フォルダをマウントします。 |
出力
正常に完了すると、resourcepacks
フォルダにリソースパックが出力されます。
リソースパックの使い方
Minecraft Java Edition
のresourcepacks
フォルダにリソースパックを配置して、Minecraftを起動します。
その後、Minecraft内からリソースパックを指定します。
リソースパックのフォルダはデフォルトでは以下です。
resourcepacks
フォルダ
OS | Path |
---|---|
Windows | c:/Users/[username]/AppData/Roaming/.minecraft/resourcepacks |
macOS | /Users/[username]/Library/Application Support/minecraft/resourcepacks |
resourcepacks
のフォルダに出来上がったリソースパックを配置します。
かんりょう
を押します。既に平仮名で表示されています。(hi_jp
という言語を追加しています。)
※リソースパックを選択するだけでは、ひらがなにならない場合もあります。その場合は以下の手順を行います。
言語「にほんご(ひらがな)(JP)」を選択するとひらがなになります。
細かい話
どうやって実現できるか?
UIの文字列を差し替える方法には、リソースパックを使う方法があります。
日本語のリソースはMinecraftに同梱されているはず。
なのでそれをひらがなに翻訳し、リソースパック化すればよいと考えました。
Minecraftのリソースパックはどうやって作るのか?
まずは、作りたいリソースパックについて確認です。
リソースパックの作り方は、Minecraft公式のwikiに書いてある通りです。
下記をzipファイルにまとめたものです。
リソースパックに含むもの
- pack.mcmeta: リソースパックについてのメタ情報を格納するJSONファイル
- pack.png: リソースパックのアイコン。省略可能
- 各種リソースファイル: pack.mcmetaに記載したリソースのファイル
参考 Tutorials/Creating a resource pack - Official Minecraft Wiki
pack.mcmeta
に記載するリソースパックのフォーマットpack_format
は、Minecraftのバージョンと対応しており、古い場合は警告が出ます。
pack_format
とMinecraft Version
の対応
pack_format | Minecraft Version |
---|---|
1 | Java Edition 1.6 - Java Edition 1.8 |
2 | Java Edition 1.9 and Java Edition 1.10 |
3 | Java Edition 1.11 and Java Edition 1.12 |
4 | Java Edition 1.13 and Java Edition 1.14 |
5 | Java Edition 1.15 and Java Edition 1.16 |
Minecraftに同梱されているリソースはどこにあるのか?
Minecraft Java Edition
では、デフォルトでは以下のフォルダにリソースが格納されます。
OS | Path |
---|---|
macOS | /Users/[macのユーザー名]/Library/Application Support/minecraft/assets |
Windows | C:\Users\[Windowsのユーザー名]\AppData\Roaming\.minecraft\assets |
assetsフォルダ配下は以下のような構成です。
複数バージョンをインストールしている場合、indexes配下のファイルは別となりますが、objects配下のデータは混在して管理されています。
gitのような効率的な管理です。
assets配下のフォルダ構成
- assets/
-
indexes/
-
[Minecraftのバージョン].json
リソース名と、ハッシュコード、サイズで構成されるJSONファイル{ "objects": { "icons/icon_16x16.png": { "hash": "bdf48ef6b5d0d23bbb02e17d04865216179f510a", "size": 3665 }, "icons/icon_32x32.png": { "hash": "92750c5f93c312ba9ab413d546f32190c56d6f1f", "size": 5362 }, ~略~ "minecraft/lang/ja_jp.json": { "hash": "2a0ae8e6a984ab749fce1d6218f165f2b5d31c60", "size": 445279 }, ~略~ } }
-
-
objects/
-
参考 : Tutorials/Sound directory - Official Minecraft Wiki
Minecraftの言語リソースファイルはどのような形式になっているのか。
リソースのフォーマットはタイプごとに異なります。
言語ファイルは以下のような形式になります。1.12
と1.13
以降で形式が異なり、結構はまりました。
Minecraftバージョン | 言語リソース名(indexes/[バージョン].json記載) | 言語リソースのフォーマット |
---|---|---|
1.12 | minecraft/lang/ja_jp.lang | リソースのキー=リソースの文字列 |
1.13以降 | minecraft/lang/ja_jp.json | リソースのキーとその文字列のJSON |
Minecraft Java Edition 1.12のリソース
"minecraft/lang/ja_jp.lang": {"hash": "8eedb38dbb5220be3d5aafc2135beb105548f5e1", "size": 192067},
addServer.add=完了
addServer.enterIp=サーバーアドレス
addServer.enterName=サーバー名
addServer.hideAddress=アドレスを隠す
Minecraft Java Edition 1.15のリソース
"minecraft/lang/ja_jp.json": {"hash": "2a0ae8e6a984ab749fce1d6218f165f2b5d31c60", "size": 445279},
{
"addServer.add": "\u5b8c\u4e86",
"addServer.enterIp": "\u30b5\u30fc\u30d0\u30fc\u30a2\u30c9\u30ec\u30b9",
"addServer.enterName": "\u30b5\u30fc\u30d0\u30fc\u540d",
"addServer.hideAddress": "\u30a2\u30c9\u30ec\u30b9\u3092\u96a0\u3059",
日本語リソース(漢字かな交じりの文字)を平仮名に変換する
リソースパックの作り方、Minecraftのリソースがどう格納されているのかはわかりました。
次はこれを平仮名に変換する方法を検討します。
単純な文字の置き換えでは音読み訓読みや、文脈による読み方の違いに対応できません。
意味を汲み取って読みを取得したいのでmecab
を利用します。
また、正しい読みを取得するために辞書は充実していたほうがよいのでmecab-ipadic-NEologd
を利用します。
mecab-ipadic-NEologd環境の作り方
mecab+meacb-ipadic-NEologd環境の作り方はほぼ mecab-ipadic-NEologd
のREADME通りです。
README:Neologism dictionary based on the language resources on the Web for mecab-ipadic - github.com
今回はツールの配布を簡単にするようDockerで実装します。
READMEの手順だと一部対話型の部分があります。以下のように-y
をつけると強制yesでインストールできます。
RUN cd /mecab/mecab-ipadic-neologd && \
./bin/install-mecab-ipadic-neologd -y -n && \
echo `mecab-config --dicdir`"/mecab-ipadic-neologd"
参考:install-mecab-ipadic-neologd
'-y'|'--forceyes' )
IS_FORCE_YES=1
shift 1
;;
最終的にこのようなDockerfileになりました。
mecabで読みを取得する
-Oyomi
を指定することで読みを取得できます。
MeCab: Yet Another Part-of-Speech and Morphological Analyzer #出力フォーマットの変更
mecab-ipadic-NEologd
のサンプルで読みを取得してみます。
ほぼ期待した結果です。
あとはカタカナから平仮名への単純な置き換えだけです。
$ NEOLOGD=`mecab-config --dicdir`"/mecab-ipadic-neologd"
$ echo "8月3日に放送された「中居正広の金曜日の スマイルたちへ」(TBS系)で、1日たった5分でぽっこりおなかを解消するというダイエット方法を紹介。キンタロー。のダイエットにも密着。" | mecab -d $NEOLOGD
8月3日 名詞,固有名詞,一般,*,*,*,8月3日,ハチガツミッカ,ハチガツミッカ
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
放送 名詞,サ変接続,*,*,*,*,放送,ホウソウ,ホーソー
さ 動詞,自立,*,*,サ変・スル,未然レル接続,する,サ,サ
れ 動詞,接尾,*,*,一段,連用形,れる,レ,レ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
「 記号,括弧開,*,*,*,*,「,「,「
中居正広の金曜日のスマイルたちへ 名詞,固有名詞,一般,*,*,*,中居正広の金曜日のスマイルたちへ,ナカイマサヒロノキンヨウビノスマイルタチヘ,ナカイマサヒロノキンヨービノスマイル
タチヘ
」( 記号,一般,*,*,*,*,*
TBS 名詞,固有名詞,一般,*,*,*,TBS,ティービーエス,ティービーエス
系 名詞,接尾,一般,*,*,*,系,ケイ,ケイ
) 記号,一般,*,*,*,*,*
で 助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ
、 記号,読点,*,*,*,*,、,、,、
1日 名詞,固有名詞,一般,*,*,*,1日,ツイタチ,ツイタチ
たった 副詞,助詞類接続,*,*,*,*,たった,タッタ,タッタ
5分 名詞,固有名詞,一般,*,*,*,5分,ゴフン,ゴフン
で 助詞,格助詞,一般,*,*,*,で,デ,デ
ぽっこりおなか 名詞,固有名詞,一般,*,*,*,ぽっこりおなか,ポッコリオナカ,ポッコリオナカ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
解消 名詞,サ変接続,*,*,*,*,解消,カイショウ,カイショー
する 動詞,自立,*,*,サ変・スル,基本形,する,スル,スル
という 助詞,格助詞,連語,*,*,*,という,トイウ,トユウ
ダイエット方法 名詞,固有名詞,一般,*,*,*,ダイエット方法,ダイエットホウホウ,ダイエットホウホー
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
紹介 名詞,サ変接続,*,*,*,*,紹介,ショウカイ,ショーカイ
。 記号,句点,*,*,*,*,。,。,。
キンタロー。 名詞,固有名詞,一般,*,*,*,キンタロー。,キンタロー,キンタロー
の 助詞,連体化,*,*,*,*,の,ノ,ノ
ダイエット 名詞,サ変接続,*,*,*,*,ダイエット,ダイエット,ダイエット
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
も 助詞,係助詞,*,*,*,*,も,モ,モ
密着 名詞,サ変接続,*,*,*,*,密着,ミッチャク,ミッチャク
。 記号,句点,*,*,*,*,。,。,。
EOS
$ echo "8月3日に放送された「中居正広の金曜日の スマイルたちへ」(TBS系)で、1日たった5分でぽっこりおなかを解消するというダイエット方法を紹介。キンタロー。のダイエットにも密着。" | mecab -d $NEOLOGD -Oyomi
ハチガツミッカニホウソウサレタ「ナカイマサヒロノキンヨウビノスマイルタチヘ」(ティービーエスケイ)デ、ツイタチタッタゴフンデポッコリオナカヲカイショウスルトイウダイエットホウホウヲショウカイ。キンタローノダイエットニモミッチャク。
$
リソースを日本語から平仮名へ変換する
楽なPythonで実現することにしました。
pythonからmecab呼び出し
pythonのmecab
パッケージを利用します。
URL:mecab PyPI
読みを取得するモード、かつneologdの辞書を利用するので以下のようにオプションを指定します。
辞書のパスは引数から取得します。
mecab_yomi = MeCab.Tagger("-Oyomi -d {0}".format(sys.argv[1]))
カタカナから平仮名への変換
MeCabの読みはカタカナなので平仮名に変換する必要があります。
pythonのjaconv
パッケージを使います。
URL:jaconv PyPI
リソース内の特殊な文字のあつかい
日本語→カタカナ→平仮名の変換をすると、おかしな文字になるものがありました。
これらを含むリソースは変換対象外としています。
うまく変換できたもの
パンチして木材を回収します -> ぱんちしてもくざいをかいしゅうします
木を探しましょう -> きをさがしましょう
マウスを使って視点移動します -> まうすをつかってしてんいどうします
周りを見渡しましょう -> まわりをみわたしましょう
インベントリを開きましょう -> いんべんとりをひらきましょう
木を倒しましょう -> きをたおしましょう
うまく変換できない:プレースホルダー%
を持つも文字列
%s でジャンプします -> ぱーせんとs でじゃんぷします
%s、%s、%s、%s で移動します -> ぱーせんとs、ぱーせんとs、ぱーせんとs、ぱーせんとs でいどうします
%s を押します -> ぱーせんとs をおします
%s を長押しします -> ぱーせんとs をなげししします
最終的に以下のようなスクリプトになりました。
最後に
たまにおかしい翻訳がありますが、満足のいくものできました。
子供に村人ゾンビの卵どれ?
とか聞かれることもなくなり、自然と平仮名の勉強もできています。
これでリモートワークの集中力も高くなり一石二鳥です。