UbuntuでMozcの新しいバージョンをビルドするには


# UbuntuでMozcをビルド
[Mozc](https://github.com/google/mozc)は言わずとしれた、日本語入力のためのソフトウェアです。  
Ubuntu:23.10(mantic),Debian:12(bookworm)で、Mozcをgitリポジトリのソースからビルドしてみます。(Ubuntu:23.04(lunar)は下記のDebianと同じ手順でビルドできると思います。)

公式のgit版ソース[^1]では、ibus-mozcのgypでのビルドが取り除かれたため、bazelでのビルドになります。Ubuntuのbazel-bootstrapパッケージでは、バージョンが古いのでビルドできません。新しいbazelをビルドしようとしてもbazelのバージョンが古いため、bazelを用いたビルドは無理でした。  
新しいバージョンのbazelを別途、用意します。

## bazelのインストール
1. bazelのバージョン7.3.2をバイナリインストール[^2]します。
    Linux版の7.3.2が出ています。
    (bazelのオプションに--noenable_bzlmodを使えば、古いバージョンのbazelでもビルドできるかもしれません。)
    ```sh
    aria2c -c https://github.com/bazelbuild/bazel/releases/download/7.3.2/bazel-7.3.2-installer-linux-x86_64.sh
    bash bazel-7.3.2-installer-linux-x86_64.sh --user
    source ~/.bazel/bin/bazel-complete.bash
    export PATH="$PATH:$HOME/bin"
    bazel --version
    ```
    ```
    bazel 7.3.2
    ```

1. bazelを使わないで、ソースからbazelをビルドする場合。[^7]
    bazel-${version}-dist.zipをダウンロードして、ビルドします。  
    TMPDIRを設定しているのは、/tmpが小さい場合の対策です。
    ```sh
    sudo apt-get install build-essential python3 zip unzip default-jdk-headless
    wget https://github.com/bazelbuild/bazel/releases/download/7.3.2/bazel-7.3.2-dist.zip
    unzip -d bazel-src bazel-7.3.2-dist.zip
    cd bazel-src
    mkdir -p ~/.tmp
    env EXTRA_BAZEL_ARGS="--tool_java_runtime_version=local_jdk" TMPDIR=~/.tmp bash ./compile.sh 
    sudo cp output/bazel /usr/local/bin
    bazel --version
    ```
    ```
    bazel 7.3.2- (@non-git)
    ```

1. カスタムAPTレポジトリを追加する
    ```sh
    sudo apt-get install apt-transport-https curl gnupg -y
    curl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg --dearmor >bazel-archive-keyring.gpg
    sudo mv bazel-archive-keyring.gpg /usr/share/keyrings
    echo "deb [arch=amd64 signed-by=/usr/share/keyrings/bazel-archive-keyring.gpg] https://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
    sudo apt-get update
    sudo apt-get install -y bazel
    bazel --version
    ```

1. ラッパーのbazeliskをインストール
    ```sh
    sudo curl -Lo /usr/local/bin/bazel https://github.com/bazelbuild/bazelisk/releases/download/v1.22.0/bazelisk-linux-amd64
    sudo chmod +x /usr/local/bin/bazel
    bazel --version
    ```

## ビルドに必要なパッケージの取得
ソースパッケージのダウンロードを有効にしておきます。  
Debianの場合は、`/etc/apt/sources.list.d/debian.sources`のTypesにdeb-srcを加えて、`apt-get update`しておきます。
Ubuntuの場合は、`/etc/apt/sources.list`のdeb-srcのコメントアウトを取り除いて、`apt-get update`しておけばOKです。
Ubuntu-24.04(noble)の場合は、`/etc/apt/sources.list.d/ubuntu.sources`のTypesにdeb-srcを加えて、`apt-get update`しておきます。
```sh
sudo apt-get build-dep mozc
sudo apt-get install qt6ct qt6-base-dev libfcitx5-qt6-dev
```
### Ubuntu:manticコンテナなどで一から導入する場合。
```sh
apt-get update
apt-get install -y sudo apt-utils wget
sudo sed 's/^.*deb-src /deb-src /' -i /etc/apt/sources.list
sudo apt-get update
sudo apt-get build-dep -y mozc
sudo apt-get install -y build-essential dpkg-dev make git qt6ct qt6-base-dev libfcitx5-qt6-dev curl unzip
```
### Ubuntu:nobleコンテナなどで一から導入する場合。
```sh
apt-get update
apt-get install -y sudo apt-utils wget
sudo sed 's/Types: deb *$/Types: deb deb-src/' -i /etc/apt/sources.list.d/ubuntu.sources
sudo apt-get update
sudo apt-get build-dep -y mozc
sudo apt-get install -y build-essential dpkg-dev make git qt6ct qt6-base-dev libfcitx5-qt6-dev curl unzip
```

## Mozcの最新版ソースを取得
debパッケージを作るのに必要なファイルだけを別レポジトリに用意しました。
```sh
mkdir -p build
cd build
git clone --recursive --filter=tree:0 https://github.com/google/mozc.git mozc
git clone --filter=tree:0 -b main https://github.com/phoepsilonix/mozc-deb.git mozc-deb
```

## ビルド
```sh
cd mozc
cp -a ../mozc-deb/debian ./
ls debian/patches/*.patch|xargs -n1 patch -p1 -i 
fakeroot debian/rules binary
```
パッチをあてたうえで、```fakeroot debian/rules binary```を使って、ビルドしています。
無事終わったら、ひとつ上のディレクトリにパッケージが作成されます。

パッチの微修正が終わったので、次のコマンドでもバイナリパッケージは作成できるかと思います。
```sh
cd mozc
cp -a ../mozc-deb/debian ./
dpkg-buildpackage -b --no-sign
```

```sh
ls ../*.deb
```

## インストール
ibus-mozcの設定ファイルを削除しておきます。  
削除しておけば、mozc_rendererの設定値が新しく書き出されるようです。  
個人的にカスタマイズを行っている人はバックアップしておいてください。
```sh
rm ~/.config/mozc/ibus_config.textproto
```

作成したパッケージを手動インストールします。
```sh
cd ..
sudo dpkg -i mozc-data*.deb mozc-server*.deb mozc-utils-gui*.deb ibus-mozc*.deb
sudo apt-get --fix-broken install
sudo dpkg -i mozc-data*.deb mozc-server*.deb mozc-utils-gui*.deb ibus-mozc*.deb
ibus restart
```

fcitx5-mozcの場合には、ibus-mozc*.debの部分を、```fcitx5-mozc*.deb```に置き換えてください。
またアイコンが含まれるfcitx-mozc-dataパッケージもインストールしてください。
```sh
sudo dpkg -i mozc-data*.deb mozc-server*.deb mozc-utils-gui*.deb fcitx5-mozc*.deb fcitx-mozc-data_*.deb
sudo apt-get --fix-broken install
sudo dpkg -i mozc-data*.deb mozc-server*.deb mozc-utils-gui*.deb fcitx5-mozc*.deb fcitx-mozc-data_*.deb
```

## 入力例
waylandでも用例表示が行われました。  
![](https://res.cloudinary.com/zenn/image/fetch/s--_KHrhLmM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_1200/https://storage.googleapis.com/zenn-user-upload/deployed-images/76b46c0c998a5315ccc7a13c.png%3Fsha%3D45eb3d77fd8c64b18cf01e57ff0a6caa57222df4)
![](https://res.cloudinary.com/zenn/image/fetch/s--ptNX6G4t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_1200/https://storage.googleapis.com/zenn-user-upload/deployed-images/8e98fae4720e725c3fcdd6e5.png%3Fsha%3Dfe764870ff65e42432ad0c94b2e452e3869befbe)

## 不要パッケージのアンインストール
次のコマンドで、ビルドのためにインストールしたパッケージをアンインストールできると思います。
```sh
sudo apt-get autoremove
```

# 説明
上記のレポジトリでは、apt-get source mozcで入手できるパッケージソースをベースに以下の修正を行っています。

## 1. debian/rules
fcitxも含めて、bazelでビルドをするように修正しています。uimはターゲットから削除しています。
デバッグ情報やbuild-idの形式でパッケージング時にエラーがでるため、CFLAGS、CXXFLAGS、LDFLAGSを調整しています。これに関連してbazelコマンドにlinkoptをつけないとLDFLAGSが反映されませんでしたので、その点も調整しました。

+ CFLAGS,CXXFLAGSに`-gdwarf-4`を追加。
+ LDFLAGSに`-Wl,--build-id=sha1`を追加。
+ bazelに`--linkopt "$(LDFLAGS)"`オプションを指定。
+ bazelに--copt,--cxxoptも追加。CPPFLAGSを加えるとredifinitionエラーになります。
+ Ubuntuでは標準でltoが有効になっていますが、無効にしました。gcc,clangどちらでもビルドできるかと思います。
+ bazel-7.3系以降、--linkoptは一つの項目のみ受け付けるように変更されたので、それに伴う修正。

```
ifeq ($(shell dpkg-vendor --derives-from Ubuntu && echo yes), yes)
    export DEB_BUILD_MAINT_OPTIONS += optimize=-lto
endif

CPPFLAGS:=$(shell dpkg-buildflags --get CPPFLAGS)
CFLAGS:=$(shell dpkg-buildflags --get CFLAGS) $(CPPFLAGS) -fPIE -gdwarf-4 -fPIC
CXXFLAGS:=$(shell dpkg-buildflags --get CXXFLAGS) $(CPPFLAGS) -fPIE -gdwarf-4 -fPIC
LDFLAGS:=$(shell dpkg-buildflags --get LDFLAGS) -Wl,--as-needed -Wl,--build-id=sha1
BAZEL_LDFLAGS:=$(shell echo $(LDFLAGS)|xargs -n1 echo "--linkopt")
BAZEL_CFLAGS:=$(shell echo $(shell dpkg-buildflags --get CFLAGS) -fPIE -gdwarf-4 -fPIC|xargs -n1 echo "--copt")
BAZEL_CXXFLAGS:=$(shell echo $(shell dpkg-buildflags --get CXXFLAGS) -fPIE -gdwarf-4 -fPIC|xargs -n1 echo "--cxxopt")
```
```sh
bazel build $(TARGET_STATIC) --config oss_linux --config release_build $(BAZEL_LDFLAGS) $(BAZEL_CFLAGS) $(BAZEL_CXXFLAGS)
```
```sh
bazel build $(TARGETS) $(TARGET_FCITX5) $(TARGET_FCITX) --config oss_linux --config release_build $(BAZEL_LDFLAGS) $(BAZEL_CFLAGS) $(BAZEL_CXXFLAGS)
```

## 2. installファイル
gypはout_linux、bazelはbazel-binに、コンパイルされたファイルができるので、その違いを反映しました。
fcitxもbazelビルドに切り替えました。またfcitxの言語別のメッセージファイルも増えていましたので追加しました。

## 3. patchファイル
fcitx,fcitx5のパッチは、元々配布されているパッケージとほぼ同じ中身のパッチだと思います。  
fcitx-mozcレポジトリ[^3]で、gitコマンドで生成したものに、置き換えています。  
アイコンとアイコン以外の２つのパッチファイルに分けている理由は、パッチに修正を加えた場合、エディタによってアイコンのバイナリ部分も変更されてしまう場合があり、その場合、アイコン画像として壊れてしまうからです。
```sh:パッチ生成手順
git clone --filter=tree:0 --no-single-branch https://github.com/fcitx/mozc.git fcitx-mozc
cd fcitx-mozc
git diff origin/master..origin/fcitx --text --binary -- ':!scripts/icons/*' ':!.github/*' ':!.*' > 0001-Support-fcitx.patch
git diff origin/master..origin/fcitx --text --binary -- 'scripts/icons/*' > 0002-fcitx5-icon.patch
```
それに加えてビルド時にエラーを出さないため、いくつかパッチを追加しています。(gcc,clangのどちらでもビルドできるように、一応配慮してみました。)

上記に加えて、私の出したPR(pull request)の65の修正も取り込んでいます。
```sh
wget https://github.com/fcitx/mozc/pull/65.patch
```
65.patch(`debian/patches/0003-fcitx-bazel.patch`)は、fcitx-mozcをビルドするための修正パッチです。fcitxは、現在はfcitx5に開発が移行しており、基本的にメンテナンス外となっており、それを補うためのパッチとなっています。変更箇所は、Mozc本体のログ関連のヘッダ変更の追従や、gypだけでなく、bazelでのビルドも可能にする修正パッチとなっています。

これらが、Ubuntu/manticのパッケージソースとの相違点です。

# Debianでもビルド
debian/bookworm向けにも用意してみました。  
bazelは上記の手順で別途同様にインストールしておきましょう。
```sh
sudo apt-get build-dep mozc
sudo apt-get install qt6ct qt6-base-dev libfcitx5-qt6-dev
```
もしもパッケージが不足していたら、下記パッケージもチェックしてみてください。
```sh
sudo apt-get install libfcitx5core-dev libfcitx5utils-dev fcitx5-modules-dev libfcitx5core-dev libfcitx5config-dev
```

Debian:bookwormコンテナなどで一からインストールする場合、下記コマンドで必要なパッケージが揃うと思います。(githubのDebian:bookwormのコンテナで、動作確認済み。)  
```sh
apt-get update
apt-get install sudo apt-utils wget
sudo sed 's/Types: deb *$/Types: deb deb-src/' -i /etc/apt/sources.list.d/debian.sources
sudo apt-get update
sudo apt-get build-dep mozc
sudo apt-get install build-essential dpkg-dev make git qt6ct qt6-base-dev libfcitx5-qt6-dev curl unzip
```

パッチについては、fcitxのバージョンがUbuntuとは異なるので、パッチが若干異なっています。
```diff:0001-Support-fcitx.patch
diff --git a/debian/patches/0001-Support-fcitx.patch b/debian/patches/0001-Support-fcitx.patch
index 15e0110e0..3ee64052f 100644
--- a/debian/patches/0001-Support-fcitx.patch
+++ b/debian/patches/0001-Support-fcitx.patch
@@ -6279,14 +6279,14 @@ index 000000000..7e3e78d61
 +  toolMenu_.addAction(&aboutAction_);
 +
 +  toolAction_.setMenu(&toolMenu_);
-+
++/*
 +  globalConfigReloadHandle_ =
 +      instance_->watchEvent(EventType::GlobalConfigReloaded,
 +                            EventWatcherPhase::Default, [this](Event &) {
 +                              ResetClientPool();
 +                              return true;
 +                            });
-+
++*/
 +  reloadConfig();
 +}
 +
```
ビルド手順は、Ubuntuの手順と基本的に同じになるはずです。

distrobox + podman のDeiban:12環境でもビルドを行いました。
Debian/bookwormでも、ビルドできるようになっていると思います。  
Ubuntu:23.04(lunar)も、こちらのブランチを使えばビルド可能だと思います。
```sh
mkdir -p build
cd build
git clone --recursive --filter=tree:0 https://github.com/google/mozc.git mozc
git clone --filter=tree:0 -b main https://github.com/phoepsilonix/mozc-deb.git mozc-deb
cd mozc
cp -a ../mozc-deb/debian ./
patch -p1 -i ../mozc-deb/debian-12.patch
ls debian/patches/*.patch|xargs -n1 patch -p1 -i 
fakeroot debian/rules binary
```
または
```sh
mkdir -p build
cd build
git clone --recursive --filter=tree:0 https://github.com/google/mozc.git mozc
git clone --filter=tree:0 -b main https://github.com/phoepsilonix/mozc-deb.git mozc-deb
cd mozc
cp -a ../mozc-deb/debian ./
patch -p1 -i ../mozc-deb/debian-12.patch
dpkg-buildpackage -b --no-sign
```

あらかじめibus-mozcの設定ファイルを削除しておきます。削除しておけば、mozc_rendererの設定値が新しく書き出されるようです。
キーの入れ替えなど、独自設定を行っている場合には、バックアップしておいて、後で修正してください。
```sh
rm ~/.config/mozc/ibus_config.textproto
```

ビルドした新しいバージョンのパッケージを手動インストール。
```sh
cd ..
sudo dpkg -i mozc-data*.deb mozc-server*.deb mozc-utils-gui*.deb ibus-mozc*.deb
sudo apt-get --fix-broken install
sudo dpkg -i mozc-data*.deb mozc-server*.deb mozc-utils-gui*.deb ibus-mozc*.deb
ibus restart
```

fcitx5-mozcの場合には、ibus-mozc*.debの部分を、```fcitx5-mozc*.deb```に置き換えてください。
またアイコンが含まれるfcitx-mozc-dataパッケージもインストールしてください。
```sh
sudo dpkg -i mozc-data*.deb mozc-server*.deb mozc-utils-gui*.deb fcitx5-mozc*.deb fcitx-mozc-data_*.deb
sudo apt-get --fix-broken install
sudo dpkg -i mozc-data*.deb mozc-server*.deb mozc-utils-gui*.deb fcitx5-mozc*.deb fcitx-mozc-data_*.deb
```

ibusで用いるキーボードの配列とmozcを追加しておきます、
```sh
ibus-setup
```

# 環境変数の設定について
ibus-mozcを使う場合、GNOME(Wayland)では、設定しないほうが良いので、im-configをアンインストールします。  
- fcitx5-mozcではim-configを使ったほうが良さそうです。
- purgeを指定しないと、設定ファイルが残されるため、環境変数が設定されてしまいます。
```sh
sudo apt-get purge im-config
```
X11などデスクトップ環境によっては、環境変数を設定しておくほうが良い場合があるかもしれません。
その場合には、im-configを用いて、InputMethodとしてibusを用いることを指定しておきます。
```sh
sudo apt-get install im-config
im-config -n ibus
```
im-configで環境変数も設定されるようです。(GNOME,KDEなど、デスクトップ環境によって、別の手順が必要になる場合もあるかもしれません。)
ただしGNOMEの設定画面など、それぞれのデスクトップ環境が用意している設定画面で指定したほうが、無難かもしれません。

ログアウトまたは再起動で、設定が反映されます。  
ライトモード推奨です。  
ダークスタイルのテーマを利用すると、変換候補の文字が配色的に見えにくくなる場合があります。（見えにくくなった場合には、テーマをライトテーマに戻したうえで、`ibus restart`コマンドを実行してみてください。）

# カスタムフォント指定について
変換候補の窓に表示されるフォントのサイズや種類を変更したい場合、デスクトップ環境によって対応が異なります。
GNOME環境の場合、Ibus-Mozcについては変換候補のフォントの種類やサイズを指定するibus setupのカスタムフォントの設定が、反映されない場合があります。ibus setupよりもGNOME固有の機能が優先されているようです。GNOMEが機能としても持っているアクセシビリティのための文字サイズの倍率などはGNOME Tweaksやgsettingsコマンドを用いればサイズ変更は可能です。ただ変換候補の窓に表示される文字のカスタムフォント指定やIbusのテーマ設定などは、customize Ibusなどの拡張機能を用いても、反映されない場合があります。なおFcitx5-Mozcであれば拡張機能の[Input Method Panel(gnome-extension-kimpanel)](https://extensions.gnome.org/extension/261/kimpanel/)を用いることで、変換候補の窓に表示されるフォントの種類やサイズを変更可能です。
GNOME以外のデスクトップ環境では、ibus setupの設定が有効な環境もあると思いますので、それぞれの環境に応じて、色々と試してみてください。

# flatpakアプリケーションと環境変数
flatpakアプリケーションにも環境変数を渡すこと可能です。[^8][^9][^10]  
アプリケーションによって、うまく動かない場合があれば、試してみるのも手でしょう。
## ibus
```sh
sudo flatpak --system override --env="GTK_IM_MODULE=ibus QT_IM_MODULE=ibus XMODIFIERS='@im=ibus'"
```
## fcitx
```sh
sudo flatpak --system override --env="GTK_IM_MODULE=fcitx QT_IM_MODULE=fcitx XMODIFIERS='@im=fcitx'"
```
## Wayland対応
```sh
flatpak --user override --socket=wayland
```
## GTK Themeの変更
```sh
sudo flatpak override --filesystem=$HOME/.themes
sudo flatpak override --env=GTK_THEME=chosen-theme
```

## overrideの取り消し
```sh
sudo flatpak override --reset
```

# 感想
上記の手順で作成したパッケージを試してみました。
入力自体は、Flatpak版のブラウザでも問題ありませんでした。

mozc_rendererのenbaledをTrueにしておくと用例表示が行われます。
Waylandでも問題なく、用例表示が行われました。
もしもダークスタイルで変換候補の文字の色が見にくい場合は、一旦ダークスタイルをオフにして、`ibus restart`してみてください。
またFalseにすると、用例表示はされないですが、テーマによる配色の問題などは起きないと思います。
ライトテーマ推奨です。
```txt:~/.config/mozc/ibus_config.textproto
# This settings are available in 2.29.5205 and later versions
mozc_renderer {
  enabled : True
  compatible_wayland_desktop_names : ["GNOME"]
}
```

fcitx5-mozcも、比較的見やすかったです。
用例表示は、標準では候補のフォーカスがあたっている単語のみですが、表示されますので便利です。またオプションで用例表示を常に表示するという設定もあります。その設定だとフォーカスのあたっている単語以外も用例表示が入力窓に表示され、Ibus-Mozcと似たような表示になります。またGNOME拡張機能をインストールすれば、見やすさが変わるかもしれません。お好みで導入してみましょう。


# 付記
最新のMozcソースはqt6を利用しています。  
Ubuntu/jammyなどでは、おそらくfcitx5のqt6のヘッダがないため、ビルド時にエラーがでます。  
fcitx5のパッケージが古い場合には、ビルドがそのままではできないと思います。  
Ubuntu/mantic、Debian/bookwormでは、上記のレポジトリを使えば、ビルドできるかと思います。

Ubuntu,Debianのbazelのパッケージが更新され、ビルドがしやすくなるといいですね。
もちろん古いバージョンのままのパッケージであっても、日本語入力環境としては、十分、機能しているわけですし、必ずしも新しいバージョンにする必要はないとは思います。

ただibus-mozcの用例表示が充実してきたなら、waylandでも用例表示が行えるようになっているようですから、新しいバージョンにしたいなと思うかもしれませんね。

メンテナの方々、これからも頑張ってください。

# 付記２
## flatpak-fcitx5
flatpak版のfcitx5-mozcが動作する環境は多いと思われます。  
マイナーなディストリビューションでも、flatpakに対応していたら、日本語入力は可能になることでしょう。  
安定版も比較的バージョンが新しいです。
unstable版のインストールは下記を参照してください。

https://fcitx-im.org/wiki/Install_Fcitx_5#Install_Fcitx_5_from_Flatpak


### 安定版
安定版を利用する場合は、flatpakコマンドでインストールして、
```sh
flatpak install org.fcitx.Fcitx5 org.fcitx.Fcitx5.Addon.Mozc
```
ログイン時に、
```sh
flatpak run org.fcitx.Fcitx5
```
を自動起動するように、設定しておけばOKです。
#### 自動起動の設定例
```sh
ls /var/lib/flatpak/app/org.fcitx.Fcitx5/x86_64/stable/active/files/share/applications/org.fcitx.Fcitx5.desktop
mkdir -p ~/.config/autostart
cp /var/lib/flatpak/app/org.fcitx.Fcitx5/x86_64/stable/active/files/share/applications/org.fcitx.Fcitx5.desktop ~/.config/autostart/
sed -i "s|Exec=.*|Exec=/usr/bin/flatpak run --branch=stable --arch=x86_64 --command=/app/bin/fcitx5 org.fcitx.Fcitx5|" ~/.config/autostart/org.fcitx.Fcitx5.desktop
```

### GNOMEの場合
GNOME(Wayland)では、[Input Method Panel(gnome-extension-kimpanel)](https://extensions.gnome.org/extension/261/kimpanel/)を導入することで、GNOMEのアプリケーション一覧を検索する場合などでも、変換候補の窓が表示されるようになるようです。また変換候補の表示フォントの種類やサイズの指定もできるので便利です。  
GNOMEの拡張機能を管理するソフトを導入して、設定しましょう。
拡張機能の管理ソフトで直接インストールできない場合には、Webブラウザからインストールする形になります。

#### Flatpak版(非公式)
こちらの拡張機能の管理ソフトは拡張機能を検索して、インストールすることができるようです。  
```sh
flatpak install com.mattjakeman.ExtensionManager
```
#### Ubuntu(APT)
```sh
sudo apt install gnome-shell-extension-manager
```
#### flatpak版gnome公式  
```sh
flatpak install org.gnome.Extensions
```

### その他
flatpak自体の導入は、[Ubuntu Quick Setup](https://flatpak.org/setup/Ubuntu),[Debian Quick Setup](https://flatpak.org/setup/Debian)を参考にしてください。

もしもMozcに郵便番号辞書が組み込まれていない場合には、[郵便番号辞書Mozcユーザー辞書形式](https://github.com/phoepsilonix/japanese-zip-code-dictionary/)も活用できます。  
ダウンロードしたファイルの圧縮を解除して出てくる`user_dic-japanese-zip-code-ken-01.txt`,`user_dic-japanese-zip-code-jigyosyo-01.txt`をユーザー辞書に取り込んでください。
```sh
wget https://github.com/phoepsilonix/japanese-zip-code-dictionary/releases/download/20241005/user_dic-japanese-zip-code.tar.xz
tar xf user_dic-japanese-zip-code.tar.xz
```

SudachiDictをベースにMozc辞書形式に変換したものは、下記にあります。  
ただし全件をユーザー辞書として取り込むと、重くて反応しなくなる場合があります。(2025年初頭の更新で、若干改善されたように思います。)  
[mozcdic-ut-sudachidict](https://github.com/phoepsilonix/mozcdic-ut-sudachidict/releases)

```sh
wget https://github.com/phoepsilonix/mozcdic-ut-sudachidict/releases/download/20230927/user_dic-ut-sudachidict.tar.xz
tar xf user_dic-ut-sudachidict.tar.xz
```
## カラー絵文字
変換候補の絵文字表示が、一部の環境下で白黒絵文字(Dejavu Sans)が優先される場合があるようです。  
Noto Color Emojiなどを優先したい場合には、いくつかの対処法があります。
1. font manager[^12]で無効にする
    font managerでDejavu Sansのチェックを外し、無効化します。
    ```sh
    sudo apt install font-manager
    ```
2. fonts-dejavu-coreメタパッケージを削除する。
    ```sh
    sudo apt-get purge fonts-dejavu-core
    ```
3. fontconfigの設定ファイルを用意して、絵文字を優先させる。
    ```sh
    mkdir -p ~/.config/fontconfig/conf.d
    ```
    ```xml:~/.config/fontconfig/conf.d/50-color-emoji.conf
    <?xml version="1.0"?>
    <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
    <fontconfig>
    
      <alias>
        <family>serif</family>
        <prefer>
          <family>system-ui</family>
          <family>emoji</family>
        </prefer>
      </alias>
    
      <alias>
        <family>sans-serif</family>
        <prefer>
          <family>system-ui</family>
          <family>emoji</family>
        </prefer> 
      </alias>
    
      <alias>
        <family>monospace</family>
        <prefer>
          <family>system-ui</family>
          <family>emoji</family>
        </prefer>
      </alias>
    </fontconfig>
    ```
    上記の`~/.config/fontconfig/conf.d/50-color-emoji.conf`ファイルを作成して、次のコマンドを実行してみてください。
    ```sh
    fc-cache -vf
    ibus restart
    ```
4. ibus-mozcのmozc_rendererをオフにする。

## 以下、駄文。
なんとなくですがibus-mozc、fcitx5-mozcが、現状、広く使われている日本語入力環境ではないでしょうか？  
Ubuntu,DebianのMozcは比較的バージョンが古めではあります。ただ十分、機能はあるといえます。
もしもの潜在的な問題があった場合の修正や、新機能が追加されたときに追従されるかは、正直わかりません。  
flatpakを導入すれば、flatpak版のfcitx5のアドオンでMozcが動作します。そちらならば特定のディストリビューションに縛られないので、比較的、新しいバージョンの提供が期待できるでしょう。  
flatpak版fcitx5は自動化も進めて、メンテナンスコストを下げているみたいなので、しばらくは新しいバージョンのMozcを提供してくれる存在として、活躍するのではと思います。(特にマイナーディストリビューションにおいて)(flatpak版のIbusは敷居が高そうです。)
とはいえ、言語入力は基本的な機能ですから、標準的なパッケージに含まれていることが望ましいことには変わりありません。  
私自身はDebian、Ubuntuのメンテナーの流儀や文化がわからないし、時間がたくさんかかりそうなので、パッケージ化を働きかけるのは、難しいです。  

必要そうなことは、おおまかに３点あるのだろうと思います。
ビルドに必要なbazelパッケージを公式レポジトリに含めてもらうこと。  
 - bazelまたはbazeliskをパッケージに含めてもらうこと。  
  Windows向けのbazelビルドの調整などが、終わったら、おそらく完全にbazelに一本化されるのではないかと思っています。公式に合わせるなら、こちらのやり方に合わせるのが楽ではあります。  
あるいは、  
 - 公式が止めたLinux向けgypビルドを独自にメンテナンスして維持すること。  
  （現在のDebianのメンテナーの方々は、こちらの方式かと思います）  
  サブモジュールを別パッケージに分離することをやめて、ビルドに必要なソース一式としてupstreamのMozcソースとして扱うという、対応がとれるなら、そしてその上でgypビルドができる状態であれば、最新のMozcソースへの追随が楽になるのではと愚考しています。  
上記のどちらかのアプローチを取ることになるでしょう。  

ただ依存するライブラリやサブモジュールの関係を考えると、bazelビルドを受け入れることが、容易ですし、メンテナンスも楽だと思います。ソースを一揃い揃えて、オフラインでビルドする方法も、一応はありますし、bazelまたはラッパーのbazeliskのいずれかが、UbuntuやDebianの公式レポジトリに含められることが前提条件になりそうです。

そして思い切って過去のパッチの積み重ねからジャンプして、新しく新規に仕切り直すことを提案して、受け入れてもらうこと、ではないかと愚考しています。依存関係のあるサブモジュールのパッケージも含めてです。(Qt6関係のパッケージはすでにあるみたいなので、難しくはないでしょう。)
そして仕切り直したあとにメンテナーが存在することが３点目。(今もいらっしゃるでしょうが、具体的な動きを未確認なので、状況を存じ上げません。)
一年に数回でも、継続的に、更新を確認することができたなら、新しいバージョンの導入体制を維持できるのではないかと思います。

個人的には現状、Manjaroを使っていますので、そちらで困ることはありません。また他のマイナーな環境下でも、どうにかなりそうなので、動機づけが低いのです。
ただUbuntuはカスタマイズやチューニングなど、いろんな面で秀でているとは思うし、Debianは古き良き環境を守ってくれていて、それをベースに様々な派生もあります。それらも素晴らしいことではあります。だから、標準で新しいバージョンも使えるなら、なお嬉しく思います。  
ディストリビューターやメンテナーとしては、ライセンス的にも機能的にも安心できるソースを自分たちの管理下のレポジトリに、置いておきたいのでしょう。またパッケージを分割することも、メンテナンスコストはかかりますが、メリットがあることも理解はできます。セキュリティーへの対応も、あることでしょう。
ただ肥大化してきたレポジトリのメンテナンスは、どう考えても大仕事です。だからこそ、いろんなアプローチが生まれてきたのでしょう。  
NixOSやAlpineのような路線でも、OSTree路線でも、多くの環境下で資産として使えること自体が、オープンソースの素晴らしいところだと思いますから。これからも、大勢のLinuxユーザーが、いろんな形で協力して、使える環境を維持継続していくだろうとは思います。特段大きなセキュリティ上の問題でもない限り、実用面では、現状、心配することもないので、焦ることもありませんが、Canocicalが雇ってくれて、パッケージングの権限をもしもくれるとするなら、いきなりソースの中身をジャンプアップさせるように動きますが、そんなご縁も機会もなさそうなので、すでにご縁のある方々、時間はかかるかとは思いますが、これからのご活躍に期待しております。🙏  

* 追記  
  [Debian Mozc](https://tracker.debian.org/pkg/mozc)。  
  こちらで、今もgypビルドが維持されており、パッケージの更新も継続されています。  
  最新ではないものの、継続的に更新されています。バージョン番号も、bookwormで2.28,上記のレポジトリの開発版(unstable)で2.29。upstreamのソースの受け入れ準備ができているのが、(2025/1/1現在、)バージョン2.30.5544.102ということでしょう。
  この成果はUbuntuにも反映されていくことでしょう。  
  メンテナーの方のご尽力に敬意を表します。


# 仮置き場
[Ubuntu:23.10(mantic) and Debian:12(bookworm)向けMozcパッケージ](https://github.com/phoepsilonix/mozc-deb/releases)[^13]
[ArchLinux and ManjaroLinux向け Mozcパッケージ](https://github.com/phoepsilonix/mozc-arch)[^14]

タグに```with-jp-dict```がついているものが、SudachiDict[^16]やMeCab-unidic-neologd[^17]、MeCab-ipadic-neolod[^18]のデータをシステム辞書に組み込んだパッケージです。  
[Mozc辞書型式への変換プログラ厶](https://github.com/phoepsilonix/dict-to-mozc)[^15]

# その他、Mozc関連記事
[Mozc を応援するいくつかの方法](https://zenn.dev/komatsuh/articles/91def2bc633a8d)

[大概のLinuxで使えそうな日本語入力(Flatpak版Fcitx5-Mozc)](https://zenn.dev/phoepsilonix/articles/flatpak-mozc)
[Mozcをオフラインでビルドするには？](https://zenn.dev/phoepsilonix/articles/mozc-offiline-build)

[郵便番号辞書 Mozc形式作成手順](https://zenn.dev/phoepsilonix/articles/japanese-zip-code-dictionary)

[DockerでビルドしたMozcをUbuntu 22.04 LTSにインストールする](https://zenn.dev/ikuya/articles/aa69fd1009b773)
[Ubuntu 20.04 LTS/20.10でFcitx5を使用する](https://zenn.dev/ikuya/articles/f42da50d670a8562a12e)

[userdic - 日本語入力ユーザー辞書変換スクリプト](https://startide.jp/comp/im/userdic/)

[DockerでビルドしたMozcをUbuntu 22.04 LTSにインストールする](https://zenn.dev/ikuya/articles/aa69fd1009b773)

----
[^1]: [Mozc公式](https://github.com/google/mozc)
[^2]: [Ubuntu への Bazel のインストール](https://bazel.build/install/ubuntu?hl=ja#binary-installer)
[^3]: [Fcitx-Mozc](https://github.com/fcitx/mozc)
[^4]: [Mozc fork](https://github.com/phoepsilonix/mozc)
[^7]: https://bazel.build/install/compile-source?hl=ja#bootstrap-bazel
[^8]: https://www.nofuture.tv/20200229
[^9]: https://blog.lufia.org/entry/2022/01/18/203946
[^10]: https://ja.linux-console.net/?p=18264
[^11]: https://sicklylife.hatenablog.com/entry/2018/04/04/182412
[^12]: https://blog.tmtms.net/entry/2016/11/23/firefox-emoji
[^13]: [Ubuntu:23.10(mantic) and Debian:12(bookworm)向けMozcパッケージ](https://github.com/phoepsilonix/mozc-deb/releases)
[^14]: [ArchLinux and ManjaroLinux向け Mozcパッケージ](https://github.com/phoepsilonix/mozc-arch)
[^15]: [Mozc辞書型式への変換プログラ厶](https://github.com/phoepsilonix/dict-to-mozc)
[^16]: https://github.com/WorksApplications/SudachiDict
[^17]: https://github.com/neologd/mecab-unidic-neologd
[^18]: https://github.com/neologd/mecab-ipadic-neologd