2021年初頭に SKK を Windows/Mac で Google 日本語入力からの候補取得といっしょに絵文字まで変換して使うための方法

前提・したいこと

いろいろしたいこと盛り沢山。

動作させる環境としては

  • Windows10 の WSL2 で動作させたい
  • WSL2 と VcXsrv で動かしている Emacs の ddskk からも (できるだけ) 利用したい
  • でも Mac でもできるだけ同じように環境を用意したい

そして動作自体には

  • 辞書に無い未知語は候補を Google 日本語入力 (Google Japanese Input) の API から取得したい
  • 辞書に有る語の場合は辞書から候補を取得して可能な限り高速に変換したい
  • 絵文字も入力したい

とぜいたくな感じ。2021 年、令和三年ですからね。

作業内容・手順

SKK のインストール

Windows10 では動作も軽快で安定感抜群な CorvusSKK を利用させていただいてます。

github.com

リリースから最新のインストーラーをダウンロードしてきてインストールすればふつうに完了。

Mac では AquaSKK (aquaskk?) を利用させていただいてます。

github.com

こちらもリリースから最新のインストーラーをダウンロードしてきてインストールすればふつうに完了。

yaskkserv2 のインストール

ここでは yaskkserv ではなく yaskkserv2 を使います。Rust で作られている yaskkserv2 なら比較的簡単に環境差異を気にせずに SKK 辞書サーバ (skkserv) が用意できるためです。(あと個人的に Rust に興味があったからというのも大きい)

github.com

README.md のとおり (2021/01/06時点) に作業をします。

ソースの取得

今後の更新で再ビルドしたいので git で clone します。WSL2 の環境に git が無いときは ZIP でダウンロードしても良いでしょう。(git はインストールしておくことをオススメしますが……)

cd ~/git/
git clone https://github.com/wachikun/yaskkserv2.git

私はホームディレクトリに git ディレクトリを用意してそこにソース類を置いているので、cd してから clone しています。

Rust 用意

(すでに Rust が使える環境の方は飛ばしてください)

まったく Rust の環境用意が無い場合は、 Homebrew on Linux を使ってインストールするのが手っ取り早いかもしれません。

docs.brew.sh

brew のインストールは上記のリンク先のとおりです。
脱線な上に長くなるので省略してしまいますが、私は fish を使っているので PATH を通すための環境変数設定あたりに違いがありました。対処方法は「homebrew fish」等ですぐ出てきます。

ビルド

ここは yaskkserv2 の README.md のとおりです。

cd (yaskkserv2 を clone したディレクトリ)
 cargo build --release

成功するとtarget/release の下に yaskkserv2 本体と辞書変換用の yaskkserv2_make_dictionary が作られます。

実行できるところに配置する

ビルドしてできた yaskkserv2 本体と辞書変換用の yaskkserv2_make_dictionary を実行しやすいように PATH のとおったところに配置します。

私は自分でソースからビルドしたものを ~/bin に置くことにしているので以下のコマンドでコピーして配置しました。

cp -av target/release/yaskkserv2 ~/bin/
$ cp -av target/release/yaskkserv2_make_dictionary ~/bin/

/usr/local/bin とかでも良いんじゃないかなと思います。

辞書用意・変換と yaskkserv2 の起動

yaskkserv2 は SKK 辞書の変換を必要とするので、変換元辞書の用意と変換をしてから yaskkserv2 を起動してみます。

SKK 辞書の用意

公開されている SKK 辞書をダウンロードしてきて集めても良いでしょうし、WSL2 で Ubuntu を使っているなら apt で yaskkserv (yaskkserv2 ではなく yaskkserv) をインストールすると /usr/share/skk の下にだいたいの種類の辞書ファイルが置かれるので、それを利用すると手っ取り早く進められます。以下を clone するのも便利です。

github.com

cd ~/git/
git clone https://github.com/skk-dev/dict.git

また、速く変換したいので Google 日本語入力の API に頼らず辞書ファイルから候補の語が取得できるように以下も利用させてもらいます。

github.com

cd ~/git/
git clone https://github.com/tokuhirom/skk-jisyo-neologd.git

辞書の用意ができたら yaskkserv2_make_dictionary を使って辞書を変換します。以下は上記の skk-dev の dict と SKK-JISYO.neologd を利用する想定です。
なお、絵文字の対応は skkserv ではなくCorvusSKK または AquaSKK でおこなうため、自分は utf8 ではなく eucjp のまま変換しています。

cd ~/git/dict
yaskkserv2_make_dictionary --dictionary-filename=/tmp/dictionary.yaskkserv2 SKK-JISYO.* ../skk-jisyo-neologd/SKK-JISYO.neologd

辞書表記の影響で SKK-JISYO.neologd のいくつかの語で警告が出ますが、わずかであったので無視して進めました。(気になる方は変更して変換成功するようにしてみてください。そしてその内容を書いていただけますと……)

yaskkserv2 の起動

辞書の変換までできたので、yaskkserv2 を起動します。
変換した辞書は、変換時のコマンドに渡した --dictionary-filename オプションのパスにある /tmp/dictionary.yaskkserv2 にできています。よって起動時にもこれを使います。

yaskkserv2 --no-daemonize --google-japanese-input=notfound --google-suggest --google-cache-filename=/tmp/yaskkserv2.cache /tmp/dictionary.yaskkserv2

オプションについての詳細は yaskkserv2 の README.md を見ていただくのがいちばんですが、使ったものは以下のとおりです。

  • 使いはじめは Google 日本語入力から候補をもらう処理をいろいろ試してみたかったので、--no-daemonize をつけてバックグラウンドで動作しないようにしています。
  • --google-japanese-input=notfound とすることで、Google 日本語入力からは辞書に候補が無かった場合にだけ候補を取得します。
  • --google-suggest をつけて有効化しています。
  • Google 日本語入力から取得した候補はキャッシュして何度も問い合わせしないように --google-cache-filename=/tmp/yaskkserv2.cache をつけています
  • さいごに変換した辞書の場所 /tmp/dictionary.yaskkserv2 を指定しています。

特に README.md にもあるとおりで、Google 日本語入力からの候補取得はどうしても変換ラグが発生してしまいます。 notfound オプションでできるだけ軽減させています。
また、起動ポートは指定していないので 1178 で起動していますが、AquaSKK の内蔵 skkserv を使っていたり他に skkserv が動いているのであれば

yaskkserv2 --no-daemonize  --port 1179 --google-japanese-input=notfound --google-suggest --google-cache-filename=/tmp/yaskkserv2.cache /tmp/dictionary.yaskkserv2

--port 1179 のようにポート番号を指定するオプションでポート番号を変更すれば OK です。
あとは CorvusSKK または AquaSKK で yaskkserv2 を skkserv として追加してやると利用できます。最近の WSL2 であれば、Windows 側から WSL2 への通信に localhost が利用できるので、skkserv は localhost:1178 で接続可能になっています。便利になったものです。。

また、ここまでで ddskk から yaskkserv2 に接続して変換することができるようになっています。

絵文字変換の用意と設定

絵文字も変換できるように辞書を用意します。絵文字辞書を用意してくださっている方がいらっしゃるので、以下を clone するか必要な辞書ファイルをダウンロードします。

github.com

github.com

uasi/skk-emoji-jisyo の README にもあるように、CorvusSKK または AquaSKK に直接辞書として登録します。

絵文字辞書は utf8 であり eucjp な SKK と異なるのですが、このあたりあまりいろいろすると後から混乱しそうなため

  • yaskkserv2 は ecujp の辞書と eucjp で動作させる
  • 絵文字用の utf8 の辞書は CorvusSKK または AquaSKK に直接辞書として登録する

と分けてみています。
skk-dev/dict にも絵文字辞書があるのですが、以前からこの手順と分け方で設定していたのでそのままにしています。Emacs の ddskk でも絵文字変換を使わないので、yaskkserv2 に絵文字辞書を入れたくないという背景もあります。
もしこの手順無しでもうまく絵文字変換できたよ!という方いらっしゃいましたら教えていただけますと……

お試し

以上で CorvusSKK または AquaSKK では以下の挙動が確認できるはずです。

  • 「▽へんかん」(変換)など辞書にありそうな語を変換する → 高速に変換される = yaskkserv2 経由で辞書ファイルから変換されている
  • 「▽へんかんてすと」(変換test) など辞書にない語を変換する → 数ms〜1s 程度の時間をかけて変換される = yaskkserv2 経由で Google 日本語入力から候補取得して変換されている
  • 「▽だんぼーる」(📦) など絵文字を変換する → 絵文字が変換候補に存在する = utf8 の絵文字辞書が読み込まれて変換に使えている

Emacs の ddskk では絵文字辞書を使っていないので、最後の絵文字変換以外が動作するはずです。

おわりに

Google 日本語入力を使った候補取得をおこなう場合、SKK の設定によっては辞書ファイルに存在する語に変換する場合でも Google 日本語入力に問合せしてしまい若干のラグが発生してしまうことがあるのですが、以上の設定では可能な限りローカルの辞書から候補を取得して高速に変換ができるようになっているはずです。また、WIn10 でも Mac でも、また Emacs の ddskk でも同じように変換ができるようになっているはずです。

過去にも SKK をさまざまな環境で同じように利用する方法を試行錯誤してきましたが、多くの方の作成物を繋いで利用させていただくことで 2021 年には素晴しい SKK 環境が OS やアプリケーションにとらわれることなく実現できるようになっていることに感謝です!

……と、せっかく SKK の良い感じな環境を手に入れたので長文を書いてみたくて書いた記事です!