NixOS 26.05でEmacsのmozc.elから日本語入力ができなくなる問題と解決
概要
ibus-engines.プレフィクスつきでmozcへの依存を作っている人は、プレフィクスなしのmozcへの依存に切り替える必要があるかもしれません。
nixpkgsのnixos-26.05でEmacsのmozc.elの変更漏れが顕在化しましたが、
fix mozc_emacs_helper path
として修正PRは提出済みです。
背景
NixOS 26.05
がリリースされたので、自分のdotfilesをnixos-25.11から移行させていました。
ある程度弄って、ビルドができるようになって、
stateVersionが古いこと由来の警告以外を解消しました。
stateVersionの変更はまた大きめの変更になると思うのでnixpkgsのアップデートとは別途で行うつもりです。
そうして再起動したら概ね正常に動いていたのですが、 Emacsで日本語入力ができなくなっていました。
環境
システム
- NixOS 26.05 (Yarara)
- nixpkgs nixos-26.05
- GNU Emacs 30.2 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo version 1.18.4, Xaw3d scroll bars)
- mozc-im 20160412.22
- mozc.el 20260519.247
home.packagesにibus-engines.mozc-utを含めてmozc_emacs_helperを提供
Emacsの日本語入力設定
問題が起きたときの自分のEmacsの日本語入力関連設定は以下の通りです。
(leaf
mozc-im
:ensure t
:when (member system-type '(gnu gnu/linux gnu/kfreebsd))
:require t
:custom
(default-input-method . "japanese-mozc-im")
(mozc-candidate-style . 'echo-area))
mozc-im
はmozc.elの薄いラッパーで、検索機能を利用する時にもmozcを使えるようになります。
問題
日本語入力モードを有効にして文字を入力しようとすると、 mozc本体のダイアログで、
変換エンジンプログラムの起動に失敗しました。
というエラーが出て変換できませんでした。
GUIアプリケーションのfcitx5-mozc経由の入力は問題なく動作します。
Emacs経由のみが問題です。
原因
複数の問題があり、どれが決定的に問題だったのかは結局よくわかりません。
多分自分がibusのmozcに依存していたのが一番の問題だったような気はします。
どれも正しく修正していったので、一部だけ不完全な状態に戻して厳密に切り分け検証する気力はありません。
私のdotfiles側の設定
fcitx5.addonsには以下のようにfcitx5-mozc-utを指定していました。
i18n.inputMethod = {
enable = true;
type = "fcitx5";
fcitx5.addons = with pkgs; [
fcitx5-gtk
fcitx5-mozc-ut
qt6Packages.fcitx5-configtool
];
};
しかしEmacs向けには、
home.packages = with pkgs; [
ibus-engines.mozc-ut # install mozc_emacs_helper
];
としてibus-engines.mozc-utをhome.packagesに含めていました。
これは前のバージョンでは正しい設定でした。
しかし後述するようにmozc_emacs_helperはibusの依存から切り離されたので、通常のmozcのパッケージをインストールするべきです。
今通常の日本語入力にはfcitxを使っているので、 ibusの依存を入れる必要もありません。
シンプルに以下のように書き換えました。
home.packages = with pkgs; [
mozc-ut # install `mozc_emacs_helper`
];
nixpkgsのEmacsのmozcのパッチの変更漏れ
バイナリの実体と参照パスの乖離
nixpkgsの現行のmozcのビルド定義の
mozc_emacs_helperのインストール場所では以下のようにmozc_emacs_helperをインストールしています。
install -Dm555 "bazel-bin/unix/emacs/mozc_emacs_helper" "$out/bin/mozc_emacs_helper"
一方nixpkgsの
MELPA mozcビルドでは、次のようにmozc.el内の文字列を書き換えるパッチを適用しています。
--replace '"mozc_emacs_helper"' '"${pkgs.ibus-engines.mozc}/lib/mozc/mozc_emacs_helper"'
nixpkgsの本流ではmozcがibusに依存しなくなったのに、 melpaのoverlayでは変更漏れが発生したため、齟齬が生じています。
経緯
- 2022-04:
mozc: make mozc.el to find mozc_emacs_helper by taku0 · Pull Request #166914 · NixOS/nixpkgsで、
melpa-packages.nixの現在のパッチが導入された。当時の旧ibus-mozcはGYPベースのビルドで、ヘルパーを$out/lib/mozc/mozc_emacs_helperに配置していたため当時はパスが整合していた。 - 2024-10: コミットmozc: rename ibus-mozc -> mozc · NixOS/nixpkgs@c46f9d2で、 Bazelベースに全面書き直しが始まる。
- 2026-03:
mozc: make ibus dependency optional (opt-in) by nacno-toporiame · Pull Request #483843 · NixOS/nixpkgsがマージされ、
ibusフロントエンドが分離。
mozc_emacs_helperの最終的なインストール先が$out/bin/mozc_emacs_helperに確定。一方でmelpa-packages.nixは2022年以降このmozc関連箇所が更新されておらず、古い/lib/mozc/パスが取り残された。 - 2026-05: NixOS 26.05 (Yarara)として上記変更がリリースされEmacsからの利用者で症状が顕在化。
修正PRの提出
この問題はパスを修正するだけの話なので、とりあえずPRを提出しておきました。
emacsPackages.mozc: fix mozc_emacs_helper path by ncaq · Pull Request #526967 · NixOS/nixpkgs
Emacs側の設定
Emacsのmozcパッケージのデフォルトでは、
mozc-helper-program-nameに"mozc_emacs_helper"の値がプログラムの名前だけで入っています。
これをフルパスで明示的に指定する以下の構成に書き換えました。
(leaf
mozc-im
:ensure t
:when (member system-type '(gnu gnu/linux gnu/kfreebsd))
:require t
:custom
(default-input-method . "japanese-mozc-im")
(mozc-candidate-style . 'echo-area)
`(mozc-helper-program-name . ,(executable-find "mozc_emacs_helper")))
これでEmacsがどのmozc_emacs_helperを呼び出しているかが明確になり、トラブルシューティングがやりやすくなります。
今の環境では"/etc/profiles/per-user/ncaq/bin/mozc_emacs_helper"の値が入っています。
ただこれは基本的に必要ないかもしれません。 PATHから探しているはずなので。
今回は複数パッケージの変更が絡んでいるので、どれを呼び出しているのか明白にするためにデバッグの一環として書いておきました。今後も別に害になることはないと思うのでそのままにしておきます。
どうせPATHに入っていないものは呼び出せないので、 NixOS以外の環境で互換性が壊れるということはありません。
fcitxとibusを使い分けているようなユーザはexecutable-findではなく、自分の好みのパスを直接指定することでうまく動くようになるかもしれません。
結果
私の環境ではこれらの修正を行ったら、
Emacs環境でも元通りmozc.elベースの日本語入力ができるように直りました。
私のPRがマージされた場合でも、自分の設定でibus-engines.mozc-utをPATHに入れてmozc_emacs_helperを提供している場合は、
ibusフリーなmozcのパッケージへの依存に切り替える必要があると思います。