ただ食って喋る

Ich esse und ich spreche

22 - mozc-Shingeta Einstellungen -- 新下駄配列を mozc にて使用する方法

2022年10月29日

Download audio file

Contents

mozc にて新下駄配列を実現する方法

  1. 前提として Version 4450 以上の mozc が必要。mozc バージョンは、「ばーじょん」の変換候補に出てくる。
  2. Linux 環境では HOME/.mozc 以下 (環境によっては $HOME/.config/mozc 以下) に config1.db というバイナリファイルが存在するが、このファイルを編集することで新下駄配列を実現できる。Windows 環境の場合 C:\Users\USERNAME\AppData\LocalLow\Google\Google Japanese Input 以下に config1.db が存在するはず。具体的には以下のような流れになる (特にこの流れに従う必要はない)。
    1. protoc という上記のバイナリファイルを変換するコマンドをインストールする。Debian/Ubuntu ベースの環境では protobuf-compiler というパッケージに含まれている。因みにこのバイナリファイルはプラットフォーム非依存なので、一旦自分好みの設定を作成してしまえば、他の環境にある mozc でも (バージョン 4450 以上であれば) 使うことができるはず (私の方では未確認)。
    2. [mozc | Tools | Properties] を選択して、ローマ字テーブルをカスタマイズする。以下に例を示す (ローマ字テーブルをエクスポートした TSV ファイルの抜粋):
      q		ー
      ー{!}	ー
      w		に
      に{!}	に
      e		は
      は{!}	は
      ...
      d		か
      か{!}	か
      k		い
      い{!}	い
      ...
      かk	れ
      いd	れ
      
    3. 上記のローマ字テーブルで重要なのは:
      1. 単打のキー入力がされた段階では「送り (pending)」に出力を入れる。
      2. 送りにて出力された文字 + {!} を入力に、その出力に件の文字だけが入ったエントリーを作成する。
      3. 同時打鍵は上記の 送りにて出力された文字 + 同時打鍵のもうひとつのキー のコンビネーションにより実現される。
    4. 一連のローマ字テーブルの編集が終わったところで、[OK] ボタンを押下して config1.db に上記の内容を保存する。
  3. mozc git repo を git clone するか を直接ローカル環境にダウンロードする。
  4. 以下のコマンドにより config1.db をテキストファイルに変換する (以下のコマンドでは $HOME/src/ 以下に mozc git repo が clone されている):
    cat $HOME/.mozc/config1.db | protoc --proto_path=$HOME/src/mozc/src/protocol --decode "mozc.config.Config" mozc/src/protocol/config.proto > $HOME/.mozc.config1.txt
    
  5. 変換されたテキストファイルに以下のような行を追加する (以下の例では 50ms が同時打鍵入力判定のタイムアウトになる):
    composing_timeout_threshold_msec: 50
    
  6. 更にテキストファイル内にある custom_roman_table という名前のキーの値の末尾に以下の内容を追加する:
    {!}\t\t\tNoTransliteration\n
    
  7. 以下のコマンドによりテキストファイルをバイナリファイルに変換し直す:
    cat $HOME/.mozc.config1.txt | protoc --proto_path=mozc/src/protocol --encode "mozc.config.Config" mozc/src/protocol/config.proto > $HOME/.mozc/config1.db
    

以上の方法で mozc により新下駄配列を使うことができるようになる (はずである)。


以下、Podcast のエピソードとして喋ったことです:

  • Google IME (Google 日本語入力) で、(config1.db の置き換えにより) 新下駄配列が使えるようになりました。
  • このアップデートによりできることと (まだ?) できないこと。
    • 同時打鍵シフト配列の新下駄配列 (と恐らく下駄配列も) 実装可能 (確認済み)。
    • Phonix かな配列 は前置シフト配列に見えるので、今回のアップデート前からも (ローマ字テーブルを変更することで) 実現できたと思われる。
    • 一方 かわせみ配列 のほうは同時打鍵を必要としている配列のように見えるので、恐らく今回のアップデートで (楽に?) 実現可能になっていると推測する。
    • 漢直入力全般に関しては…、一部の漢字や表現をローマ字テーブルで扱ったことはあるものの、T-Code や TUT-Code 全体をインポートしたことはない (というか入力されるのが確定前の文字列であることを考えると、あまり良いソリューションとは思えない) です。
    • 親指 (シフト) に関して – 恐らく key-code などのハックなどをしても実装はまだ不可能だと思われる。理由は異なる種類のシフトキーを IME 側に知らせるすべがないのと、シフトキー (mod key) ではないキーが押され、(他に何もキーが押されずに) そのキーがは離されても IME 側では最初の押下 (キー入力) をなかったことにはできないから。
  • そもそもどのようにして実装しているのか。
    • IME にある「送り」(pending) という概念を使う。
    • これは Google IME 固有の機能ではなく、例えば /ky/+/a/ で「きゃ」として (前に入力された文字列も一緒に) 入力される。
  • なぜ IME をソリューションとして選んだか。
    • 最初は key-code をハックするソリューションを考えて実装してみたのだが、「美しくない」と感じることが (特に ASCII 文字列の入力が期待されているパスワードや、vim をベースにしたナビゲーションを行う際に) 多かった。極めつけは、英単語を入力しようとしてひらがなが描画され始めた時、いちいち直接入力モードに変更して同じキーストロークを打ち直すのが嫌だった。IME を使ったソリューションであればこのような問題は起こらない。

mozc の PoC バージョンのコードは私が書きましたが、それをメンテナンスしやすい形で実装し直してくださった Hiroyuki Komatsu さんに感謝いたします。

PS: kouy さん とのやり取りで、JIS (物理キーボード) 配列での挙動をテストしてくださるとのことになったので、以下いくつか出来合いの設定を作成して公開いたします。

Timeout ANSI US Kotoeri ANSI US MS-IME JIS Kotoeri JIS MS-IME
50 mozc_US_kotoeri_50.db mozc_US_msime_50.db mozc_JIS_kotoeri_50.db mozc_JIS_msime_50.db
80 mozc_US_kotoeri_80.db mozc_US_msime_80.db mozc_JIS_kotoeri_80.db mozc_JIS_msime_80.db
110 mozc_US_kotoeri_110.db mozc_US_msime_110.db mozc_JIS_kotoeri_110.db mozc_JIS_msime_110.db
140 mozc_US_kotoeri_140.db mozc_US_msime_140.db mozc_JIS_kotoeri_140.db mozc_JIS_msime_140.db

PPS: こちらで公開されている出来合いのバイナリファイルをダウンロードしなくても、手元にあるバイナリファイルをアップロードして必要な変更が施されたファイルをダウンロードできるようにしました (Google アカウントが必要になります): https://colab.research.google.com/drive/1yrMHatUh0UUdinRgZhoObCaV2i3JTXlc?usp=sharing

Speaker(s)

kirameister
kirameister