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

D1083b01617050d3698240b077e5a018?s=128

Fuminobu TAKEYAMA

May 28, 2022
Tweet

More Decks by Fuminobu TAKEYAMA

Other Decks in Technology

Transcript

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

  2. 2022-05-28 2/26 自己紹介 • 武山 文信 • Linux ディストリビューション openSUSE

    向けの 日本語関連のパッケージを中心にメンテしている – 2011年から Mozc のパッケージをメンテしていたらしい • 出没するコミュニティ – 小江戸らぐ、東海道らぐ – XDDC (Cross Distro Developers Camp) ------------------------------------------------------------------- Thu Jul 7 11:11:03 UTC 2011 - ftake@geeko.jp - Initial import * Upstream version: 1.1.758 * I refered to kazukado's and xkitty68's packages.
  3. 2022-05-28 3/26 openSUSE といえば、管理ツール YaST • ハードウェア設定、ユーザー管理、各種サーバー管理を GUI/TUI で –

    Samba, VNC, HTTP, NTP
  4. 2022-05-28 4/26 2つの openSUSE Tumbleweed 常に最新 安定 ローリング・リリース 新しいカーネルやライブラリを使いたい人 アプリケーションのテスト環境

    年次アップデート 有償サポートなしで安定版を使いたい人 普段遣いのデスクトップやサーバーに
  5. 2022-05-28 5/26 openSUSE Leap • SUSE Linux Enterprise (SLE) ベースのディストリビューション

    – 基本的には SLE と同一のパッケージ – openSUSE 独自パッケージ(デスクトップアプリなど)や設定 • openSUSE Leap 15.4 を来週リリース予定!
  6. 2022-05-28 6/26 今日の話 • ディストリビューション開発者とアップストリームプロジェクトとの関係 • Linux の日本語入力の構成 • 最近の

    Mozc • 新機能の話をしつつ、その機能に関連した コードコミット以外で技術的に貢献した事例を紹介
  7. 2022-05-28 7/26 Mozc • Google 日本語入力の OSS 版 – ソースコードは同じ

    – 辞書が異なる • 単語は OSS の辞書を使いつつ、 パラメータは Google 内の秘密のデータから求められている(はず) • 主に日本語変換のエンジン部分 – キーバインドもこだわりがあるとか – 詳細は次のスライドで • 多くの人が使っているけど、OSC で話す人がいない…
  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 など
  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
  10. 2022-05-28 10/26 Mozc との関係 • Mozc そのものの開発者ではありません – ビルドし、簡単に使えるようにパッケージとして openSUSE

    のユーザーに提供 – Mozc 以外にも、いろいろなプロジェクトと関わる (IBus, Fcitx, ...) • アプストリームファースト – バグや機能追加が必要な場合、原則としてアップストリーム(Mozc)などの関係 者と協力して修正する(パッチを作成して送るなど) • 独自パッチ – ディストリビューション固有の問題や機能の場合 – アップストリームの開発が停止してしまった場合、修正を受け入れられない場合
  11. 2022-05-28 11/26 最近の Mozc • 2018年2月〜2020年4月まで更新が停止、日本語入力の危機 – 独自パッチで対応 • 平成→令和:

    日付変換、合字「 」 ㋿ • 新しい GCC でのコンパイルエラー修正 • ビルドスクリプトの Python 3 対応 • フォークすれば良かったのでは? – Google のビッグデータなしに再生成できない辞書データがあり難しい • 2020年4月から小松さんが更新を再開 – 某所の人が働きかけてくれた – OSS版のみの機能追加も
  12. 2022-05-28 12/26 Mozc への貢献の仕方 1/2 • コードのコミット(Pull request、パッチ送付)ができなかった – Google

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

    コーディングルールとか分からない • 今回紹介する方法 – バグ報告 – 問題の原因の特定と、修正方法の提示 – プロトタイプ実装(捨てる前提、pull request は出さない、Proof of Concept) と、その他 OSS
  14. 2022-05-28 14/26 Linux 版 Mozc の新機能 • 目立つ機能の変更はないが、ibus-mozc が変わった –

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

    – マルチ言語、マルチプラットフォーム対応 • パッケージメンテー泣かせ – カジュアルに必要なファイルをオンラインから取得するスタイル – 同じく Bazel を使用する Tensorflow のパッケージを参考に、 ローカルファイルを使ってビルドするように頑張った • fcitx-mozc のビルド方法を間違えて苦労 – ※本家に含まれていないパッチ扱い – コマンドを間違えても、それっぽいバイナリ(動かない)が出るので紛らわしい
  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
  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
  18. 2022-05-28 18/26 ibus-mozc/起動時の変換モードのカスタマイズ 2/2 • 設定ファイルで変更可能に – active_on_launch • True:

    起動時に日本語入力ON • False: 起動時に日本語入力OFF(デフォルト) • この機能に関する貢献方法 – プロトタイプ実装をして、実現方法を提示 • 2013年の自身で作成したバグレポートにプロトタイプ実装を投稿 • 動くものがあると、取り込んでもらいやすい(ことが多い) • 最終的なコードは小松さんが書き直したものに active_on_launch: True 21行追加、8行削除
  19. 2022-05-28 19/26 ibus-mozc/キーボードレイアウトの選択 1/4 • IBus はキーボードレイアウトの制御も行う – Fcitx も同様

    • ibus-mozc は キーボードレイアウトの指定に 対応していなかった
  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
  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 }
  22. 2022-05-28 22/26 ibus-mozc/キーボードレイアウトの選択 4/4 • この機能に関する貢献方法: 仕様の提案 – 最初の実装では layout

    のみ – layout_variant と rank を設定可能にする提案 • openSUSEの独自パッチと同様の設定ができるように • layout_variant: dvorak のような言語レイアウトの派生オプション • rank: 0 以上の場合、IBus をリセットしたときに自動的に登録される(小さい順で)
  23. 2022-05-28 23/26 ibus-mozc: 変換候補画面が Qt に 1/3 • 見た目も機能も同じ –

    設定ツールは Qt なのに、変換候補画面だけ Gtk だった – Gtk 2 の EOL に合わせての変更 • この機能に関する貢献方法 – 環境依存の問題の報告 – 原因特定、修正方法提示
  24. 2022-05-28 24/26 ibus-mozc: 変換候補画面が Qt に 2/3 • 問題点1: ウインドウから候補があふれる

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

    – 文字を入力するごとにウインドウを閉じて更新し、再表示していたため、 KDE のウインドウエフェクトでフェードがかかってしまった • エフェクトがなければ、一瞬で表示されるため閉じたことが分からない • KDE でしか再現しない – ウインドウを消さずにリサイズするように変更してもらった • ただし、今度はリサイズエフェクトが適用されてしまうが、だいぶマシ – https://github.com/google/mozc/issues/548
  26. 2022-05-28 26/26 まとめ • Mozc の更新が再開し、Linux 向けの改善も行われている • 問題の早期解決、機能実現なら、コードをコミットしない選択もあり –

    バグ報告だけではなく、技術的な情報提供やプロトタイプもできるとよい – 残念ながらコミット履歴には残らない – 最終的にコードを書いてくれる人が忙しかったり、いなかったりする場合は そのまま取り込めるコードがあるとよい