---
title: DenoでIMEユーザー辞書を統一的に出力するツールを作った
tags:  #deno #ime  
author: [WhyK](https://convert.docswell.com/user/windchime-yk)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/4EM46YN2JW.jpg?width=480
description: toranoana.deno #16で発表したLT資料です。 bidという、IMEユーザー辞書を統一するプロジェクトについて話しています。
published: May 15, 24
canonical: https://convert.docswell.com/s/windchime-yk/K382Q1-introduce-bid
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/4EM46YN2JW.jpg)

で ユーザー辞書を統一
的に出力するツールを作った
Deno IME
toranoana.deno #16 (2024/05/15)


# Page. 2

![Page Image](https://bcdn.docswell.com/page/PERWP9D5J9.jpg)

自己紹介
と言います。
WhyK
普段
色んな会社でフロントエンドを書く仕事をしています。
休日はコードを書いたりお茶を飲んでいます。
最近嬉しかったこと
『狼と香辛料』が再アニメ化したこと。


# Page. 3

![Page Image](https://bcdn.docswell.com/page/P7XP3Q1XJX.jpg)

はじめに
で作ったものの紹介なのですが、Denoらしい話はあんまり出てきません
以降のスライドで会社的にIMEと呼んでいないものも、ここではIMEとしてまとめて呼びます
Deno


# Page. 4

![Page Image](https://bcdn.docswell.com/page/37KDY929ED.jpg)

アジェンダ
作ろうと思った動機
2. IMEユーザー辞書の現況
3. 作ったもの
4. 想定利用者
5. 出力の構造
6. 今後の展望
1.


# Page. 5

![Page Image](https://bcdn.docswell.com/page/LJ3R9W49E5.jpg)

作ろうと思った動機
個人的に所属している小規模グループが、大量の造語を抱えている
誤字しやすい造語もあるので、それを誤字しない仕組みが欲しかった
誤字検知ツールも提供しているが、あまり普及していない
文字変換の段階で介入すれば、誤字がしにくくなると考えた
を使った理由
環境が既に整えられているので、そこに悩む必要がない
Deno
標準ライブラリが豊富


# Page. 6

![Page Image](https://bcdn.docswell.com/page/8JDYGKQ8JG.jpg)

ユーザー辞書の現況
IME
辞書フォーマットは統一されていない
テキストファイルのデータが か か
TSV CSV
項目の順番や、品詞が登録できるかどうか
特に品詞が統一されていない
日本語入力は、設定変更も品詞に組み込んでいる
Google
普通名詞だけでも、Googleは名詞でmacOS日本語入力システムは普通名詞とバラバラ
各IMEの品詞がどれくらい統一できるか表を作る必要があった


# Page. 7

![Page Image](https://bcdn.docswell.com/page/VEP63KLW78.jpg)

作ったもの
（ビド）
bid
の略
build IME dictionary
対応している
IME
日本語入力
Google
Microsoft IME
現状ではCLIのみ
macOS日本語入力システム（iCloud経由でiOSなど
GitHub ActionsなどCI/CDツールを使って半自動化
も含む）
できる
GBoard
CSV / JSONファイルでの入力に対応
ATOK（Microsoft IMEのユーザー辞書取り込み）
統一された品詞
各IMEに適した辞書ファイルを出力
リポジトリ内にExcelテンプレートもある


# Page. 8

![Page Image](https://bcdn.docswell.com/page/27V34VQ9JQ.jpg)

想定利用者
造語を多く持つ組織
複数のIMEを使う人
ユーザー辞書をエイリアス代わりにしている人


# Page. 9

![Page Image](https://bcdn.docswell.com/page/5JG31LW4EL.jpg)

出力の構造
ユーザー
コア機能
CLI
ないしCSVをファイルで渡す
JSON
ファイルからデータを抜き出して渡す
ファイル拡張子を確認
break
ファイルが.jsonや.csv以外の場合]
[
を返却
`FileTypeError`
ファイル形式エラーとして表示
ファイルデータをJSONに変換
break
データに想定外のプロパティが含まれていた場合]
[JSON
を返却
`DataPropertyError`
データ形式エラーとして表示
loop
データを各IMEのテキストデータに整形
JSON
テキストデータをファイルに出力
ファイルを圧縮し、圧縮ファイルを返却
実行時のディレクトリに圧縮ファイルを作成
ユーザー
CLI
コア機能
コア機能には一部を除いてCLIに依存しない機能群
が入っている
CSVのJSON変換は std/csv/parse を利用
ファイルの作成には Deno.writeFile と
node:buffer を利用
Microsoft IMEの辞書ファイルのエンコーディン
グがUTF-16LEのため


# Page. 10

![Page Image](https://bcdn.docswell.com/page/47Q5DY3REP.jpg)

今後の展望
サイトを作りたい
Webアプリを作りたい
Googleスプレッドシートと直接連携できればもっと良い
他のIMEへの対応
日本で使われているすべてのIMEに対応したい
データが足りないので、Issueお待ちしています
JSRへの公開
Web


# Page. 11

![Page Image](https://bcdn.docswell.com/page/KE49ZW1QJ1.jpg)

ありがとうございました


