書籍購入:『Qt QuickではじめるクロスプラットフォームUIプログラミング』

Qt祭り、最終日。これで、参考になりそうな日本語のQtの本は網羅したかなあ?

UIまわりをどう実装するか検討が必要で、その為にもQt Quickで開発する場合の資料が欲しかったところ。ウィジェット・ベースの開発を扱った本は(少ないとはいえ)何冊か存在するが、QMLでの開発については本書のみ。貴重だ。

Digiaとしては、少なくともモバイル向けの開発ではウィジェットではなくQMLを押しているようだ。

実際のところ、WPF/XAMLを使った開発のように、QMLでの実装はUIというかMVVMでいうVに留めておき、MとVMC++ベースで開発するようにすれば、うまくいけばQMLでの実装部分を差し替えるだけでPC・モバイル間でのクロスプラットフォーム対応ができそうだ。QMLの部分も、うまく実装すれば個々の要素は流用が効くのではないだろうか。

難点は、現状ではQMLは出たばかりで熟れていないこと、ライセンス絡みの問題で個人開発者や資金力の乏しいスタートアップ企業がモバイル向けクロスプラットフォーム開発に使用するのが難しいことだろうか?

Qtのオープンソース版でLGPLを採用しつつクローズドソースとする戦略は、PC向け開発やAndroid向け開発では有効だ。アプリ本体のソースコードは非公開としつつもリバースエンジニアリングを許可し、Qtを動的リンクする実装にし、使用したQtのソースコードを公開すればよい(LGPLでQtを使用している旨を、ユーザが見ることができる場所に記載しておくこと)。もしリバースエンジニアリングも禁止したい部分があるのならば、その部分はQtを使用しない独立したライブラリとして実装し、アプリに動的リンクするようにすれば回避できるのではないだろうか?

しかしiOSに関しては、Appleが動的リンクを許可していないため、Qtを静的リンクするしかない。その場合は、静的リンクされたアプリのソースコードかバイナリコードを公開しなくてはならない。それを避けるためにはQtの商用版で開発し、Qtのライセンスとして商用ライセンスを選択しなくてはならない。

静的リンクする問題を回避できたとしても、AppleJITを許可していないため、QMLのコードをインタプリタで実行することになり、アプリのパフォーマンスに影響が出てしまう。これを回避する方法であるQMLのコンパイラは、現状では商用版にしか含まれていない。

現状では、QtでiOS向けのアプリを開発するには商用版を使わざるをえない。

ここで悪いことに、Qtのライセンスは開発者ごとに必要だ。商用ライセンスを採用するためには、最初から商用版を使用して開発しなくてはならない(途中から移行するのはNGなはず)。また、同一のアプリの開発にて商用版とオープンソース版を混在して使用することは禁止されている。そして、各プラットフォームごとに商用版を購入しなくてはならない。

つまりQtでクロスプラットフォーム開発を行おうとした時、プラットフォームにiOSが含まれた時点で、各プラットフォームごとに当該プラットフォームに関わる開発者分の商用ライセンスを購入しなくてはならなくなる。

これでは個人の開発者やスタートアップ企業(特にまだ資金に余裕がない段階)は金銭的にQtを採用できない。

この辺をうまい具合に緩和できれば、PCとモバイル端末を股に掛けたクロスプラットフォーム開発での採用が広がっていく気がするのだが、どうだろうか? QMLは筋は悪くない技術だし、CやC++で書かれた比較的移植性の高い既存資産を抱えている現場では、それらを少ない手間で利用できるQtは貴重な選択肢だと思うのだ。