Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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.

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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 など

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

2022-05-28 11/26 最近の Mozc ● 2018年2月〜2020年4月まで更新が停止、日本語入力の危機 – 独自パッチで対応 ● 平成→令和: 日付変換、合字「 」 ㋿ ● 新しい GCC でのコンパイルエラー修正 ● ビルドスクリプトの Python 3 対応 ● フォークすれば良かったのでは? – Google のビッグデータなしに再生成できない辞書データがあり難しい ● 2020年4月から小松さんが更新を再開 – 某所の人が働きかけてくれた – OSS版のみの機能追加も

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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 }

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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