...

.... Powered by Blogger.

土曜日, 1月 10, 2009

アプリケーションフレームワークの選択で悩む


 久しぶりにWindowsのネイティブアプリケーションを組んでみようと思い立った。 Windowsのネイティブアプリを作るのは、7,8年ぶりになる。 このブランクは非常に大きいが、趣味で始める話なので気長に取り組むことにする。 どんなアプリを作ろうと思っているかは、アイディアが固まりきっていないので、まだ秘密です。

 とりあえずネイティブアプリなので、開発言語は実質C/C++に限定されてしまう。 C/C++でWindowsアプリを開発する場合、大きく分けて
  1. SDKだけで直接APIをガリガリ書く。
  2. MFCを利用する。
  3. WTLを利用する。
  4. QTなど、商用フレームワークを利用する。
と言う選択がある。 さすがにフレームワークを利用しないのは厳しいので、1は選択外として、2~4のどれを使うかで、アプリの作りが大きく変わってしまう。 それぞれ特徴があるようなので、私なりにポイントを簡単にまとめておく。
  • MFC
     古くからあるアプリケーションフレームワークだが、Microsoftが.netに力を入れ出してからは大きな更新されていないイメージがあった。 しかしVisual Studio 2008ではMFC9.0としてその機能が大きく拡張されており、最新のUIを用いたアプリケーション開発が可能になっている。 Microsoftからの情報提供や、Webでの具体的な解説も豊富にあるため、ほとんどの問題に対しての解決策を簡単に見つけることができるのが大きな利点。
     フレームワークの作りはM-VC、いわゆるDocument-View構造を採用しているが、その作りが分かり難い場合がある。 クラスライブラリとしての提供であるため、オブジェクトに不要なコードが含まれサイズが大きくなる傾向にある。 また、OpenMPなどへの対応をし難いため、最近のマルチコア/ハイパースレッディングに最適化することは難しい。

  • WTL
     以前はMicrosoftから提供されていたが、現在はオープンソースになって公開されているテンプレートライブラリ。 軽量/高速なアプリ開発ライブラリであるATLを拡張し、高度なUIを実現するために開発されている。 MicrosoftやWebにより情報を得ることはできるが、簡単な説明になっている場合が多く、具体的な問題にへの解説は不足しがち。 特に日本語での情報が少ないため、情報は英語で探すのが良い。
     フレームワークの作りはMFC同様に、Document-Viewを採用しているが、MFCとは異なり多重継承を利用しているため、シンプルな作りが可能になる。 また名前が表す通り、テンプレートでの提供であるため、コンパイル時に具象化されたクラスのみがオブジェクトにリンクされるため、コードサイズが小さくなる。

  • QTなど
     商用で提供されているものだけに、高度なUIの作成や独自のコントロールなど豊富な機能が多い。 また、Windows以外のOSにも対応しているため、移植性の高いコードを作成することが可能。 QTのように有名なもの(条件付きで無償利用できるもの)は、Webにも多くの情報があるが、やはり英語での情報入手が基本になる。 有償で利用する場合には、サポートを受けることが可能になるが、個人で利用するには敷居が高い。
     フレームワークの作りなどは、詳細を調べていないので言及できません…
 アプリの特性によってフレームワークの合う合わないがあると思うが、実装を頑張れば同じ機能を実現することは不可能ではない。 結局は、好み/馴れ/何を作りたいかによってフレームワークを選択すればよい。

 今回は、”スレッドプログラミング”、”シンプルな構造”、”Windowsネイティブ” なものを目指しているので、アプリケーションフレームワークはWTLを使うと決めた。 ついでに、標準ライブラリを補間するため、Boost c++を利用し、極力手間の掛かる実装をしない方向で進めてみることに。

0 コメント: