Ubuntu Weekly Recipe

第284回 クロスプラットフォームなアプリケーション開発フレームワークQtでプログラミングをはじめる

この記事を読むのに必要な時間:およそ 4 分

第276回 Ubuntuオフラインミーティング2013.05 Tokyo――IT屋ではない人からみた体験レポートよりバトンを渡されてから大変遅くなってしまいました。今回は幅広く使われているアプリケーション開発フレームワークのQtについて紹介します。また,UbuntuにおいてのQtも紹介します。

Qtとは

Qt(キュート)とは,プログラミング言語C++で書かれたクロスプラットフォームな開発フレームワーク注1です。たとえば仮想化ソフトのVirtualBoxは、Linux・Windows・Macで動作します。これには扱いやすいフロントエンドGUIがありますが,これはQtで作られています注2)。また,扱いやすいQtCreatorというIDEで快適にプログラミングをすることができます。

図1 QtCreator

図1 QtCreator

注1)
最初はGUIツールキットとして誕生しました。しかし,今では次で述べるように機能の豊富なライブラリとなっています。ちなみにGUIツールキットとしては、Qtの他にGTK+やTkなどが有名です。
注2)
プロジェクトファイルの先頭にQtが使われていることが記述されています。ソースコードをたどるとplatformディレクトリがあり,各種OSのコードがあることがわかります。

次のような特徴があるため,プログラミング初心者から上級者までお勧めできるフレームワークです。

特徴

クロスプラットフォーム

アプリケーションを動かす環境は,パソコンだけでもUNIX系OS・Windows・Macなどがありますし,カーナビなどいわゆる組込み機器などがあります。いずれも,ディスプレイへの表示や文字入力など多くの仕組みが異なります。そこで、移植性の良いプログラミングをするには抽象化された仕組みが必要になります。Qtはこれを提供しています。

非常に膨大で多様なライブラリ

アプリケーションを開発する際には,様々なライブラリを用意しなければならないことが多いです。たとえば、データベースにアクセスしたりときにはWebページをロードしたりしなければいけないこともあるかもしれません。Qtは非常に膨大な機能を提供しているため,Qtだけで必要充分なアプリケーションを作ることが可能です。その豊富なライブラリを他の言語でも使えるようにとオープンソースな多数のバインディングが存在します。

C++以外にもQMLと呼ばれるJavaScriptライクな言語が用意されている

Qtを使った開発には言語としては基本的にC++を使います。しかし,近年求められるユーザエクスペリエンスの高い,いわゆるアニメーション効果や3D効果があるユーザインターフェースの作成については,必ずしも最適とは言えませんでした。また,これらを実現するためにはOpenGL/ESなどのテクノロジーを利用する必要性がありますが,これには専門性が求められるため敷居が高い分野でした。

QML(Qt Meta-object Language)はこれらを解決する方法として考案され,実装されています。QMLはJavaScriptをベースに作成された言語で,C++が苦手とするUIの記述などが比較的に簡単にできるようになっています。

開発はオープンに行われている

もともとQtはノルウェーのTrolltech社によって作られたGUIツールキットで,その後Nokia社に移り現在はDigia社が商用サポートなどを行なっています。Nokia社の時代にQtをよりオープンにするプロジェクトが発足し,現在はqt-projectという形で開発しています。そのため、メーリングリスト・バグトラッキングシステム・フォーラム・IRCが整備されておりQt(ライブラリ)側に問題があった際でも,いわゆるオープンソースのやり方でこれを解決していくことが可能です。詳しくは次のURLを参考にしてください。

http://qt-project.org/contribute

http://blog.qt.digia.com/jp/2011/09/14/qt-project/

バージョンについて

Qtには現在,Qt4.8とQt5の2つのバージョンがあります。

Qt4.8は2005年にリリースされたQt4.0から順当にアップデートされてきた,4.0系最後のバージョンです。最初のリリースから8年以上経つ枯れた環境です。今あるQtのアプリケーションはほぼ4.0系と考えてよいでしょう。

Qt5はQtQuick2という目玉機能を搭載し2012年にリリースされたバージョンです。かなり久しぶりのメジャーバージョンアップということになります。その他にも,Qt Platform Abstraction(QPA)と呼ばれる描画のバックエンドをより効率的に開発するための仕組みなどが導入されたり,WebKit2が採用されたりしています。

今日のWebブームの火付け役とも言えるGoogle Mapは2005年頃,スマートフォンやタブレットの代表であるiPhoneやAndroidが出てきたのが2008年頃だと考えると、Qt4が設計された時と今はだいぶ取り巻く環境が違うということが実感できると思います。Qt5はQt4の強みをそのままにイマドキのデバイスやテクノロジーに対応できるように再設計された待望のバージョンと言えるでしょう。 詳しくはIntroducing Qt5のページを参照してください。

QMLを使ったプログラミングについてですが,Qt4でも,QtQuick1を使ってプログラミングが可能です。しかし,QtQuick2が存在する今はこれが含まれるQt5を利用することを推奨します。

まとめると,既存のアプリケーションについてはQt4で開発を行い、新規にプロジェクトを起こす場合やQMLを使ったアプリケーションを作りたい場合はQt5を選択すると良いでしょう。

ライセンスについて

LGPLv2.1とDigia社がライセンスしているコマーシャルライセンスの2つがあります。よって,Qtを用いて作成したアプリケーションは必ずしもソースコードを公開する必要はありません。詳しくは,ライセンスのページを参考にしてください。それぞれの機能差などは比較のページを参照してください。

著者プロフィール

松本直樹(まつもとなおき)

とあるメーカー系企業に務めるエンジニア。玄箱PRO(ARM)でDebianを触ったことがきっかけでデスクトップLinuxを使い始めて,今はどこにでもいるUbuntuユーザの1人。

コメント

  • w.setWindowsTitle("HelloQtWindow");

    w.setWindowsTitle("HelloQtWindow");
    は、
    w.setWindowTitle("helloqwindow");
    の誤です。

    Commented : #1  web-dreamers (2013/12/05, 21:13)

コメントの記入