見出し画像

翻訳IME「Konjac」とInput Method抽象化レイヤ

竹村 太希(たけむら ひろき)

 竹村さんは大学のゼミのSlackで英語話者とリアルタイムにコミュニケーションをする必要に迫られ,キーボードから日本語をひらがなで入力し,適切な漢字かな交じり文を選択すると,翻訳された英文を入力する翻訳IME「Konjac」を開発した.機械翻訳をIME(Input Method Editor)というインタフェースで提供することで,ユーザはどんなアプリケーションでも煩わしさを感じることなく自然に外国語を入力できるようになる.この翻訳IMEの開発の過程で,各プラットフォームにそれぞれ存在するInput Methodのインタフェースを共通化するIM抽象化レイヤ「IMPlane」と通信プロトコル「IMProtocol」も開発した.これにより,アプリケーション開発者が変換ロジックの実装のみにフォーカスして,簡単にマルチプラットフォーム対応の独自IMEを実装できる.IMとIMPlaneとIMProtocolとIMEの関係を図-1に示す.

図-1 IMとIMPlaneとIMProtocolとIMEの関係

 IMPlaneはデーモンとして起動し,OSのIMに接続してIMEとして振る舞う.その後,IMPlaneとIMProtocolに対応した各IME間でTCPコネクションを確立する.日本語IMEの通信フローを図-2に示す.

図-2 日本語IMEの通信フロー

 ユーザからのキー入力が発生したタイミングで,IMがIMPlaneにInputリクエストを送信し入力を通知する.ユーザが変換キーを押すとConvertリクエストを送信する.ユーザが変換候補を選択した際にはSelectedリクエストを送信する.また,IMEからSetPreeditレスポンスを受け取ると,アプリケーションウィンドウ上にプリエディット文字列を描画する. SetCandidatesレスポンスを受け取ると,変換候補を描画し,ユーザに選択を促す.Doneレスポンスを受け取ると,確定文字列をアプリケーションへ渡し,状態をリセットする.

 この仕組みを応用して,日本語のかな漢字変換の部分を機械翻訳のDeepL APIに置き換えたりすることで,独自の翻訳IMEを開発することができる.もちろん日本語・英語以外の言語にも対応できる.竹村さんは自分自身で発表されたばかりのChatGPT APIとIMEを連携できるモックアップも開発し,デモでは大変好評だった.Web APIや特定のアプリケーションのプラグインではなく,IMEのレイヤで実装されているため,SlackやDiscord以外でもオンラインゲームのチャットにも使うことができる.IMEの開発はOSごとに独自に実装しないといけない部分が多く,ハードルが高かったが,IMPlaneを利用することで,関西弁変換や,自動おじさん構文変換など,気軽に独自のIMEを開発することができるようになる.私自身も独自のIMEを作りたくなった.

 現在のIMPlaneはmacOS向けの実装が完了している状態であるが,開発途中のWindows,Linuxへの移植作業や,独自IME開発者向けのIMPlane,IMProtocolのドキュメント整備など,今後の開発の動向をウォッチしたい.

(担当PM・執筆:竹迫 良範)

[関連URL]
https://implane.kekeho.net/

[統括PM追記] Konjacは,ドラえもんの翻訳こんにゃくにちなんで,「こんにゃく」と読む.入力したら,ユーザが途中の処理を意識することなく,目的とする外国語(のみならずオジサン言語)に翻訳した出力を出す,そのために異種OSの差を吸収するIMPlaneとIMProtocolという抽象化レイヤを設けるという発想はいかにも自然だが,実装はかなり大変だったようだ.恰好いいのだが,レイヤ間のやりとりが増えて遅くなるからだ.そこで投機的実行などのテクの登場である.こういった表に出ない苦労がスーパークリエータの格好良さでもある.

(2023年7月3日受付)
(2023年9月15日note公開)