Gaming Life

一日24時間、ゲームは10時間

GUIフレームワーク探しの旅の果てにWPFにチャレンジしている

GUIフレームワークを探して三千里

数年前から使い勝手の良いGUIツール作成用のフレームワークを探している。

今自分は、ゲームを作るならUE4かOpenSiv3D(それとUnity)を使い、CLIツールや少し込み入ったスクリプトの実装にはPythonを使っている。たまにProcessingやシェルスクリプトを使うこともある。プログラムを真面目に書くようになってもうすぐ4年、こんな具合に「これを作るならこれを使う」といった流れが確立しつつあるのだが、GUIツールの実装に使える、自分の肌にあったフレームワーク・ライブラリには出会えていない。

最初に試したのはQt。クロスプラットフォームGUIツールで最もよく使われているフレームワークの一つだと思う。映像・ゲーム業界的にも広く使われているフレームワークで、就職活動中、中途のツールエンジニアの採用要項に「Qtの使用経験○年以上」と書かれているのを頻繁に見かけた。

www.qt.io

挑戦の結果、Qtを極めるのは断念した。理由としては独自のQMakeというビルドシステムが理解できなかったこと、専用IDEであるQt Designerにどうしても馴染めなかったこと、そして何より必要なストレージ容量が多すぎた(おおよそ20GBから40GB)ことが挙げられる。特に最後の必要な容量の多さは致命的で、ただでさえ莫大な容量が必要になるUE4を使っているのに、それに加えてQtを入れておく余裕は自分のPCにはなかった。

次に試したのがOpenSiv3D。本来はゲーム開発に使うのが主なフレームワークだが、モダンなC++で書ける上、開発者が日本人でサポートも充実してることからこれでGUIツールが作れないかなーと考えた。

これも結果は断念。最低限のUIパーツは揃っているが、まだまだGUIアプリケーション開発に投入するには機能不足だった。何よりデザイナーを使ってウィジェットを配置出来ないのが不便だった。(なおOpenSiv3Dはオープンソースで開発されているので自分で実装する、という手もあったが、そんな技術力ななかった)

他にPyQt(QtのPythonバインディング)も試したが、動的型付け言語でGUIを作るというのがどうも気持ち悪くなって諦めている。

そんなこんなで色々と迷走した挙げ句、今はWPF(Windows Presentation Foundation)に挑戦している。WPFとは、Microsoftが開発したGUI開発用のフレームワークで、主にC#VB、そしてXAMLというUI配置を簡単に表現できるマークアップ言語で実装できる。WPFの歴史は意外と古く、2006年頃から使えたらしい。

WPFというと自分は「Windowwsでしか動かない」「Windowsフォームに取って代わる程の人気が出なかった(UWPと並ぶ)残念な子」「よく知らないけど.NET一族のひとつらしい」ぐらいの認識を持っていた。特にWindowsでしか動かないというのが、せっかく開発したツールもMac使いが多い(と勝手に思っている)デザイナーに使ってもらえず終いになってしまうのでは、という考えにさせてしまい、これまでチャレンジしてこなかった。

だが2019年に、クロスプラットフォームフレームワークである.NET CoreがWPFをサポートすることが発表され、WPFでWin / Linux / macOSに対応したGUIツールが開発できるようになっていた

(追記)と思ったら、.NET Coreに対応しただけでWPFWindowsでしか動かないらしい。びえん。

codezine.jp

これはやるしかないだろう、とWPFに挑戦することにした。

(ちなみに.NET Fremeworkと.NET Coreは今後統合され、.NET 5として新生。新たにUIクロスプラットフォームフレームワークが公開されるらしい。UWPと同じ運命を辿らなければ良いなあ)

触ってみての所感

まだWPFを触り始めて数日程度しか立っていないが、とにかくC#が難しい。多少なりUnityの経験があるのでなんとかなるだろうと思っていたが、C++Pythonには無い構文、当然のように使うことが求められる大量のインターフェース、参照型と値型の違いなどなど予想以上に苦しめられている。C++より難しいんじゃねえのこの言語。

ただ、WPFそのものは想像以上に使い勝手が良い。日本語ドキュメントが充実していないのは玉に瑕だが、直感的に使えて、かつVisual Studioとの相性が抜群に良いので、今後もWPFの学習を続けたいと思えた。C++書くときもコレくらいVisual Studioが仕事してくれたらなあ……

参考にしている資料

チュートリアルとして、こちらのサイトの資料を使っている。プログラミング自体の経験が浅い人には難しすぎるが、ある程度の経験がある人なら非常に参考になる資料だと思う。

http://kisuke0303.sakura.ne.jp/blog/?p=340

また、WPFが推奨している開発スタイル(デザインパターン?)であるMVVMについては、下記のページで紹介されているリンクを主に見て勉強している。まだ全部は見切れていないが……

https://qiita.com/usada-kumi/items/046c9a43b15b9e376198

結び

以上、WPFに挑戦しているよという話でした。ブログに記事として上げた以上は、これまでの挑戦のように途中で断念することなく、何かしらツールを完成させて、ここで公開できるといいなぁ。