Ubuntu 16.04LTSでのQtCreator日本語入力

[QtAdventCalender](http://qiita.com/advent-calendar/2016/qt)2日目の記事です。

　[昨日](http://qiita.com/task_jp/items/51efe05374ed05dcd001)は@task_jpさんの[Automotive Grade Linux(AGL)](https://www.automotivelinux.org)の紹介と開発お誘いの話題でした。
Automobileの分野でも、これからもりもりQtが使われていく感じですので、今から一緒に開発していくと色々楽しめそうですよね。
今回の私の記事では、先月名古屋で行われました[Qt 勉強会 @ Nagoya No2(16.11)](https://qt-users.connpass.com/event/44421/)の時に調べていた、Ubuntu環境でのQtCreator日本語入力についての内容を紹介しようと思います。

<!-- --- -->
# QtCreatorでの悲しい出来事
最近ようやくUbutnu16.04LTSに自分の開発環境をUpdateしたので、さっそくオフィシャルページのqt.ioから[Qt5.7.0 for Android(Linux 64-bit)](https://www.qt.io/download-open-source/)をダウンロードして、付属のQtCreator4.0.2を使用したところ

<b>日本語が書けないだと！！！<b>
![日本語打てない.png](https://qiita-image-store.s3.amazonaws.com/0/7975/0444af76-0878-ddcd-cb12-d5fda5f26c71.png)

って感じだったので、その原因と対応方法を探していました。

<!-- --- -->
# Ubuntuでの日本語入力

- 以前の開発環境Ubuntu 14.04LTSでは、問題なく日本語入力できていた事。
- Qt5.7.0 for Android(Linux 64-bit)を14.04に入れて使用したところ、問題なく日本語入力できる。

こんなところから、何かUbuntu側で変更がなかったか確認してみました。
Ubuntuの日本語入力について調べてみると、どうやらインプットメソッドが変更になったようでした。[^1]

| Ubuntu Version   | 日本語入力   |
|:-----------------|:----------:|
| 14.04            | iBus+Anthy |
| 16.04            | Fcitx+Mozc |

以前もiBusにて一時期に日本語入力ができない事があったので、同じ原因ではと思いQtCreatorの
plugins/platforminputcontextsあたりを覗いてみました。
![platforminputcontexts.png](https://qiita-image-store.s3.amazonaws.com/0/7975/b0b4bd90-b183-c996-1dcf-ef9c4a7ac2db.png)

・・・・fcitxないやん
さらに調べていくと、fcitxプロジェクトの方で[Qt5用のpuluginが用意されていた](https://github.com/fcitx/fcitx-qt5)ので、今回はそれを使用してみることにしました。

<!-- --- -->
# fcitx Qt5 Input Contextを導入してみる

fcitxのgitリポジトリからCodeを取得します。

```Bash:
$ git clone git@github.com:fcitx/fcitx-qt5.git
```

- 今回はRelease Versionの最新版の1.0.6を使用してみました。

```Bash:
$ cd ${git clone先のディレクトリ}
$ git checkout -b Release1.0.6 1.0.6
Switched to a new branch 'Release1.0.6'
```

<!-- --- -->
# fcitx-qt5のbulid

fcitx-qt5は、cmakeでのbuildになるので、入ってなければcmakeを導入します。
また、build時に必要なパッケージもいくつかあるので、build前に一緒に導入しておきましょう。

```Bash:
$ sudo apt-get install cmake ecm extra-cmake-modules fcitx-libs-dev
```

cmakeをする時の注意点としては、

- QtCreatorで使用するpluginを作成する場合には、QtCreator自体で使用しているQt librariesと同じバージョンが必要ですので、あらかじめ使用されているバージョンを確認しておきましょう。

> QtCreatorのヘルプ(H)→Qt Creatorについて(Q)からバージョンを確認する事ができます。
![Qtcreator.png](https://qiita-image-store.s3.amazonaws.com/0/7975/1ef8dbcf-1728-2cb3-ec81-9ffb20d0d85c.png)
僕の場合だと、Qt5.7.0 for Android(Linux 64-bit)に付属しているQtCreatorなのでQt5.7.0が使用されていました。

- cmakeを行う際に、使用するQt librariesの参照先へのプレフィックの付加が必要ですCMAKE_PREFIX_PATHにQt librariesの参照先pathを忘れずに追加しましょう。

>僕の環境では下記のように設定してcmakeしました。

```Bash:
$ cmake . -DCMAKE_PREFIX_PATH=/opt/qt/QtforAndroid/Qt5.7.0/5.7/gcc_64

Checking file [/usr/share/ECM/cmake/ECMConfig.cmake]
Checking file [/opt/qt/QtforAndroid/Qt5.7.0/5.7/gcc_64/lib/cmake/Qt5/Qt5Config.cmake]
Checking file [/opt/qt/QtforAndroid/Qt5.7.0/5.7/gcc_64/lib/cmake/Qt5Core/Qt5CoreConfig.cmake]
Checking file [/opt/qt/QtforAndroid/Qt5.7.0/5.7/gcc_64/lib/cmake/Qt5DBus/Qt5DBusConfig.cmake]
Checking file [/opt/qt/QtforAndroid/Qt5.7.0/5.7/gcc_64/lib/cmake/Qt5Widgets/Qt5WidgetsConfig.cmake]
Checking file [/opt/qt/QtforAndroid/Qt5.7.0/5.7/gcc_64/lib/cmake/Qt5Gui/Qt5GuiConfig.cmake]
Checking file [/opt/qt/QtforAndroid/Qt5.7.0/5.7/gcc_64/lib/cmake/Qt5Gui/Qt5GuiConfig.cmake]
-- Checking for module 'fcitx-utils'
--   Found fcitx-utils, version 4.2.9.1
-- Checking for module 'fcitx-config'
--   Found fcitx-config, version 4.2.9.1
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY - Success
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY - Success
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR - Success
Checking file [/opt/qt/QtforAndroid/Qt5.7.0/5.7/gcc_64/lib/cmake/Qt5Core/Qt5CoreConfig.cmake]
-- 
-- The following OPTIONAL packages have been found:

 * PkgConfig

-- The following REQUIRED packages have been found:

 * ECM (required version >= 1.4.0)
 * Qt5DBus
 * Qt5Widgets
 * Qt5 (required version >= 5.1.0)
 * Qt5Gui (required version >= 5.1.0)
 * XKBCommon (required version >= 0.5.0) , Keyboard handling library using XKB data , <http://xkbcommon.org>
 * Qt5Core

-- Configuring done
-- Generating done
-- Build files have been written to: /opt/mysrc/fcitx-qt5.git
```

正常に完了すれば、あとは通常のmakeをするだけです。

```Bash:
$ make -j 8
```
<!-- --- -->
# fcitx-qt5を導入する

fcitx-qt5以下の ./platforminputcontextに
libfcitxplatforminputcontextplugin.so
が作成されているはずです。
これをQtCreatorが参照するplatforminputcontextディレクトリにいれておきましょう。
また、Qt5 librariesの中には翻訳で利用するlinguistなど、日本語入力を使用するToolも含まれています。これを期にQt5 librariesの中のplatforminputcontextディレクトリに入れておきましょう。[^2]


```Bash:
$ cd ./platforminputcontext
$ cp libfcitxplatforminputcontextplugin.so ${QtCreatorのInstallディレクトリ}/lib/Qt/plugins/platforminputcontexts
$ cp libfcitxplatforminputcontextplugin.so ${Qt5 librariesのInstallディレクトリ}/plugins/platforminputcontexts
```

libfcitxplatforminputcontextplugin.soの導入が終わったら、QtCreatorを再起動して
日本語入力してみましょう。
![日本語入力できた.jpg](https://qiita-image-store.s3.amazonaws.com/0/7975/4e712420-c0e8-0900-a371-e96b9028e5d7.jpeg)
こんな感じにサクサク入力できるようになっているはずです。

<!-- --- -->
# おわりに
　Ubuntuなどのlinuxと違いWindowsやMacでは、なかなかこういった不具合はないと思いますが、僕のようにARMメインの組み込みボードなどで開発している場合には、linux環境でクロスコンパイルをした開発が多いと思います。QtCreatorには便利な機能がもりだくさんあるので、是非日本語を打てるようにしてストレスがない開発環境を構築してみましょう。

　[日本Qtユーザー会(Japan Qt Users' Group)](http://qt-users.jp/)では有志の方々によって、今では東京・大阪・名古屋で[勉強会](https://qt-users.connpass.com)が月１、2回のペースで開催されています。勉強会に参加することによって、こういった開発時の困ったことや、Qt自体の使い方などをいろいろ教えてくれるので、よかったら参加してみてください。

　私の住んでいる名古屋でも、12/10に[Qt 勉強会 @ Nagoya No3(16.12)](https://qt-users.connpass.com/event/45606/)が開かれます。興味があったら是非参加してみてください。

<!-- --- -->
# 注釈

[^1]:1.[[Gihyo.jp] Ubuntu 16.04 LTSの日本語入力](http://gihyo.jp/admin/serial/01/ubuntu-recipe/0417)

[^2]:2.僕のようにQt5 librariesに同梱されているQtCreatorの場合には、
\${Qt5 librariesのInstallディレクトリ}/Qt5.7.0/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts
\${Qt5 librariesのInstallディレクトリ}/Qt5.7.0/5.7/gcc_64/plugins/platforminputcontexts
になります。