Upgrade to Pro — share decks privately, control downloads, hide ads and more …

たまには日本語入力 Mozc の話でもしようか ― 新機能の紹介とコードコミットができないプロジェクトとの関わり方

たまには日本語入力 Mozc の話でもしようか ― 新機能の紹介とコードコミットができないプロジェクトとの関わり方

Mozc は Google 日本語入力の OSS 版で、今では Linux デスクトップを使う上では欠かせないものとなっています。しばらくの間、更新が止まっており、Linux 上での日本語入力が危ぶまれていましたが、最近では開発が再開し、Linux 向けの改良も進んでいます。

本セミナーでは、Linux ディストリビューションの 1 つである openSUSE 向けに Mozc のパッケージを作成している武山が、最近の Mozc の変更点の紹介をしつつ、どのように Mozc の開発に関わってきたかを紹介します。特に Mozc は、第三者がプルリクエストなどを通して、直接コードを提供することがほとんどできないポリシーを採用しており(2022年4月時点)、特殊な OSS プロジェクトへの関わり方について話したいと思います。

トピック
- コードコミット以外の技術的な貢献方法
- Linux の日本語入力のおさらい
- ibus-mozc の設定ファイル
- Bazel

Fuminobu TAKEYAMA

May 28, 2022
Tweet

More Decks by Fuminobu TAKEYAMA

Other Decks in Technology

Transcript

  1. 2022-05-28 1/26
    たまには日本語入力 Mozc の話でもしようか
    新機能の紹介とコードコミットができないプロジェクトとの関わり方
    武山 文信

    View Slide

  2. 2022-05-28 2/26
    自己紹介
    ● 武山 文信
    ● Linux ディストリビューション openSUSE 向けの
    日本語関連のパッケージを中心にメンテしている
    – 2011年から Mozc のパッケージをメンテしていたらしい
    ● 出没するコミュニティ
    – 小江戸らぐ、東海道らぐ
    – XDDC
    (Cross Distro Developers Camp)
    -------------------------------------------------------------------
    Thu Jul 7 11:11:03 UTC 2011 - [email protected]
    - Initial import
    * Upstream version: 1.1.758
    * I refered to kazukado's and xkitty68's packages.

    View Slide

  3. 2022-05-28 3/26
    openSUSE といえば、管理ツール YaST
    ● ハードウェア設定、ユーザー管理、各種サーバー管理を GUI/TUI で
    – Samba, VNC, HTTP, NTP

    View Slide

  4. 2022-05-28 4/26
    2つの openSUSE
    Tumbleweed
    常に最新 安定
    ローリング・リリース
    新しいカーネルやライブラリを使いたい人
    アプリケーションのテスト環境
    年次アップデート
    有償サポートなしで安定版を使いたい人
    普段遣いのデスクトップやサーバーに

    View Slide

  5. 2022-05-28 5/26
    openSUSE Leap
    ● SUSE Linux Enterprise (SLE) ベースのディストリビューション
    – 基本的には SLE と同一のパッケージ
    – openSUSE 独自パッケージ(デスクトップアプリなど)や設定
    ● openSUSE Leap 15.4 を来週リリース予定!

    View Slide

  6. 2022-05-28 6/26
    今日の話
    ● ディストリビューション開発者とアップストリームプロジェクトとの関係
    ● Linux の日本語入力の構成
    ● 最近の Mozc
    ● 新機能の話をしつつ、その機能に関連した
    コードコミット以外で技術的に貢献した事例を紹介

    View Slide

  7. 2022-05-28 7/26
    Mozc
    ● Google 日本語入力の OSS 版
    – ソースコードは同じ
    – 辞書が異なる
    ● 単語は OSS の辞書を使いつつ、
    パラメータは Google 内の秘密のデータから求められている(はず)
    ● 主に日本語変換のエンジン部分
    – キーバインドもこだわりがあるとか
    – 詳細は次のスライドで
    ● 多くの人が使っているけど、OSC で話す人がいない…

    View Slide

  8. 2022-05-28 8/26
    Linux の日本語入力 1/2
    ● インプットメソッドフレームワークとエンジンの2段構成
    インプットメソッド
    フレームワーク
    (IMF)
    IBus
    GTK アプリ
    Qt アプリ
    X11 アプリ
    変換エンジン
    Mozc
    プラグイン
    ibus-mozc
    GTK IM
    Module
    Qt IM
    Module
    IMF 独自
    ここで変換
    他に Fcitx など

    View Slide

  9. 2022-05-28 9/26
    Linux の日本語入力 2/2
    ● Wayland のプロトコルも徐々に使われるように
    – 日本語などの入力には機能不足だった(変換ウインドウの表示など)
    インプットメソッド
    フレームワーク
    (IMF)
    IBus
    GTK アプリ
    GTK IM
    Module
    text-input-v3
    Wayland
    サーバー
    input-method-v2
    こうなっていくが、未実装?
    GNOME
    Shell
    (Waylandサーバー)
    IBus 独自
    GNOME 42, GTK 4
    変換エンジン
    Mozc
    プラグイン
    ibus-mozc

    View Slide

  10. 2022-05-28 10/26
    Mozc との関係
    ● Mozc そのものの開発者ではありません
    – ビルドし、簡単に使えるようにパッケージとして openSUSE のユーザーに提供
    – Mozc 以外にも、いろいろなプロジェクトと関わる (IBus, Fcitx, ...)
    ● アプストリームファースト
    – バグや機能追加が必要な場合、原則としてアップストリーム(Mozc)などの関係
    者と協力して修正する(パッチを作成して送るなど)
    ● 独自パッチ
    – ディストリビューション固有の問題や機能の場合
    – アップストリームの開発が停止してしまった場合、修正を受け入れられない場合

    View Slide

  11. 2022-05-28 11/26
    最近の Mozc
    ● 2018年2月〜2020年4月まで更新が停止、日本語入力の危機
    – 独自パッチで対応
    ● 平成→令和: 日付変換、合字「 」

    ● 新しい GCC でのコンパイルエラー修正
    ● ビルドスクリプトの Python 3 対応
    ● フォークすれば良かったのでは?
    – Google のビッグデータなしに再生成できない辞書データがあり難しい
    ● 2020年4月から小松さんが更新を再開
    – 某所の人が働きかけてくれた
    – OSS版のみの機能追加も

    View Slide

  12. 2022-05-28 12/26
    Mozc への貢献の仕方 1/2
    ● コードのコミット(Pull request、パッチ送付)ができなかった
    – Google 日本語入力との兼ね合い?で著作権をすべて持っておきたかった?
    ● 権利移譲など、解決方法はあるが…
    – 現在は一部ディレクトリについて開放
    – 近々、ibus-mozc もコードコミットできるように
    ● コードコミットがすべてか?
    – No。他にもいろいろある
    – コード至上主義な人もいる
    ● ログに残る
    ● タイポの修正みたいな pull request をやたらと見かけるのは気のせいか?

    View Slide

  13. 2022-05-28 13/26
    Mozc への貢献の仕方 2/2
    ● きっと中の人がコードを書いたほうが早い
    – 開発環境を整えるのが面倒
    – コーディングルールとか分からない
    ● 今回紹介する方法
    – バグ報告
    – 問題の原因の特定と、修正方法の提示
    – プロトタイプ実装(捨てる前提、pull request は出さない、Proof of Concept)
    と、その他 OSS

    View Slide

  14. 2022-05-28 14/26
    Linux 版 Mozc の新機能
    ● 目立つ機能の変更はないが、ibus-mozc が変わった
    – 「令和」に公式で対応
    – ★ビルドツールが Bazel になった
    – ibus-mozc 関連
    ● ★設定ファイルが導入された
    ● ★ibus-mozc で起動時の変換モードをカスタマイズできるようになった
    ● ★ibus-mozc で使用するキーボードレイアウトを選択できるようになった
    ● ★変換候補ウインドウが GTK 2 から Qt になった
    – アイコンが高解像度になった
    ● 誤変換への対策もよく行われている
    ★について、今回は紹介

    View Slide

  15. 2022-05-28 15/26
    ビルドツールが Bazel になった
    ● Bazel
    – Google が中心となって開発しているビルドツール
    – マルチ言語、マルチプラットフォーム対応
    ● パッケージメンテー泣かせ
    – カジュアルに必要なファイルをオンラインから取得するスタイル
    – 同じく Bazel を使用する Tensorflow のパッケージを参考に、
    ローカルファイルを使ってビルドするように頑張った
    ● fcitx-mozc のビルド方法を間違えて苦労
    – ※本家に含まれていないパッチ扱い
    – コマンドを間違えても、それっぽいバイナリ(動かない)が出るので紛らわしい

    View Slide

  16. 2022-05-28 16/26
    ibus-mozc/設定ファイルが導入された
    ● これまで、Mozc自体の設定画面はあるが、
    ibus-mozc 固有の設定が無かった
    ● ~/.mozc/ibus_config.textproto
    – または ~/.config/mozc
    – Protocol Buffer のテキスト形式
    ● ただし GUI はまだない
    ● このあとの新機能はこのファイルを使います
    engines {
    name : "mozc-jp"
    longname : "Mozc"
    layout : "ja"
    layout_variant : ""
    layout_option : ""
    rank : 80
    }
    active_on_launch: True

    View Slide

  17. 2022-05-28 17/26
    ibus-mozc/起動時の変換モードのカスタマイズ 1/2
    ● これまでは起動時日本語入力OFFだった
    – IBus 1.5 の途中で、直接入力に「日本語キーボード」を使用する方針から、
    Anthy や Mozc の直接入力モードを使用する方針に変更したため
    ● 起動時 ON 設定を可能にする要望は出していた(2013年に)
    – https://github.com/google/mozc/issues/201
    – 複数のキーボードレイアウトを切り替えることが必要な人は
    US キーボードなどから Mozc に切り替えた後の日本語 ON 操作が面倒
    Meta-Spaceで切り替え Mozc 固定、全角/半角で切り替え

    A

    View Slide

  18. 2022-05-28 18/26
    ibus-mozc/起動時の変換モードのカスタマイズ 2/2
    ● 設定ファイルで変更可能に
    – active_on_launch
    ● True: 起動時に日本語入力ON
    ● False: 起動時に日本語入力OFF(デフォルト)
    ● この機能に関する貢献方法
    – プロトタイプ実装をして、実現方法を提示
    ● 2013年の自身で作成したバグレポートにプロトタイプ実装を投稿
    ● 動くものがあると、取り込んでもらいやすい(ことが多い)
    ● 最終的なコードは小松さんが書き直したものに
    active_on_launch: True
    21行追加、8行削除

    View Slide

  19. 2022-05-28 19/26
    ibus-mozc/キーボードレイアウトの選択 1/4
    ● IBus はキーボードレイアウトの制御も行う
    – Fcitx も同様
    ● ibus-mozc は
    キーボードレイアウトの指定に
    対応していなかった

    View Slide

  20. 2022-05-28 20/26
    ibus-mozc/キーボードレイアウトの選択 2/4
    ● openSUSE では独自パッチで、3 種類の Mozc を選べるように
    してきた
    – Mozc
    ● レイアウトは変更しない
    – Mozc – JP layout
    ● 日本語キーボードに切り替えて
    Mozc を使用
    – Mozc – US Dvorak layout
    – Mozc – US layout

    View Slide

  21. 2022-05-28 21/26
    ibus-mozc/キーボードレイアウトの選択 3/4
    ● 設定ファイルで変更可能に
    – layout と layout_variant で指定可能
    – この設定例では Mozc – Dvorak というエンジンが IBus に追加される
    ● 細かい設定項目は次のスライドで
    engines {
    name : "mozc-dv"
    longname : "Mozc – Dvorak"
    layout : "us"
    layout_variant : "dvorak"
    layout_option : ""
    rank : 80
    }

    View Slide

  22. 2022-05-28 22/26
    ibus-mozc/キーボードレイアウトの選択 4/4
    ● この機能に関する貢献方法: 仕様の提案
    – 最初の実装では layout のみ
    – layout_variant と rank を設定可能にする提案
    ● openSUSEの独自パッチと同様の設定ができるように
    ● layout_variant:
    dvorak のような言語レイアウトの派生オプション
    ● rank:
    0 以上の場合、IBus をリセットしたときに自動的に登録される(小さい順で)

    View Slide

  23. 2022-05-28 23/26
    ibus-mozc: 変換候補画面が Qt に 1/3
    ● 見た目も機能も同じ
    – 設定ツールは Qt なのに、変換候補画面だけ Gtk だった
    – Gtk 2 の EOL に合わせての変更
    ● この機能に関する貢献方法
    – 環境依存の問題の報告
    – 原因特定、修正方法提示

    View Slide

  24. 2022-05-28 24/26
    ibus-mozc: 変換候補画面が Qt に 2/3
    ● 問題点1: ウインドウから候補があふれる
    – 画面解像度やデスクトップ環境由来の最小のセルの高さ・幅があり、
    コード上で設定した幅になっていなかった
    – テーブルウィジェットだけの簡単なアプリを作り
    最小幅を変える方法を見つけて報告
    – https://github.com/google/mozc/issues/547
    画面右と下が切れている

    View Slide

  25. 2022-05-28 25/26
    ibus-mozc: 変換候補画面が Qt に 3/3
    ● 問題2: 文字を入力するごとに、画面がちらつく
    – 文字を入力するごとにウインドウを閉じて更新し、再表示していたため、
    KDE のウインドウエフェクトでフェードがかかってしまった
    ● エフェクトがなければ、一瞬で表示されるため閉じたことが分からない
    ● KDE でしか再現しない
    – ウインドウを消さずにリサイズするように変更してもらった
    ● ただし、今度はリサイズエフェクトが適用されてしまうが、だいぶマシ
    – https://github.com/google/mozc/issues/548

    View Slide

  26. 2022-05-28 26/26
    まとめ
    ● Mozc の更新が再開し、Linux 向けの改善も行われている
    ● 問題の早期解決、機能実現なら、コードをコミットしない選択もあり
    – バグ報告だけではなく、技術的な情報提供やプロトタイプもできるとよい
    – 残念ながらコミット履歴には残らない
    – 最終的にコードを書いてくれる人が忙しかったり、いなかったりする場合は
    そのまま取り込めるコードがあるとよい

    View Slide