zowのプログラムな日々

日々のプログラミングとか

Xamarinはじめました

前々からGUIアプリ作成に興味があったんだけども、最近、PHPばっか書いていた反動なのか、どうにもその欲望が止まらなくてSwiftを勉強し始めた。Swiftは触ってみると結構簡単でobj-cに比べて「触れないことは無い」言語だった。オープンソース化されたってのもあって、今後もしかしたらメインストリームに出てくるかもしれないなー、と感じられた。ただ、現状だと実質的にMacでしか作ったものを触ることは出来ないし、MacGUI開発するのであればCocoaの勉強をしなくてはならないってことは避けて通れない問題だってのも感じられた。

SwiftはXcodeで開発するんだけども、GUIの開発に関しては内蔵されてるStoryboardを利用することになる。このStoryboardってのが便利なんだか不便なんだか判らない代物で、確かにお手軽ではあるんだけども、何かと敷居が高かったりもする。というのも、世の中の開発者ってのは「Macで開発する=iOSアプリを作成する」って感じで、デスクトップアプリを作成することに関しては情報があまりないのだ。しかもあったとしてもobj-cの情報ばかりで、Swiftでデスクトップアプリ開発に関する事を調べるとかなり限定されてくる。これは辛い。Swiftでビジネスロジックを書くだけなら言語仕様を勉強すれば出来ないこともないんだけども、それとCocoaについてを組み合わせるといきなり敷居が高くなるのだ。

それはともかく、GUIアプリを作成するにあたって、もう一つ考えなきゃならないことがある。マルチプラットフォームGUIってことだ。使用するメイン環境はMacだけども、Linuxも使う。これを念頭に入れていたので、今まではGUIアプリ作成はQtだったりJavaGUIだったりってのを検討していたんだけど、まだSwiftはマルチプラットフォームがどうこう言うのは時期尚早だ。

と、こういう経緯を経て、Xamarinに手を出してみた。XamarinはC#なんだけども、MS製の言語での開発経験がVB2.0の頃ぐらいなので、今まで触ったことのない言語だ。言語仕様に関してはスクリプト言語と違うってことで、今までとは勝手の違う部類なんだけども、それでもWin開発者の多さと(Swiftよりは)昔からある言語ってことでネット上の情報に関しては申し分ない。いろいろと納得いかない部分もあったりするが、全体的にとても開発しやすい言語だと感じた。なんていうか、開発者が作った言語ってよりも、アプリ使用者が作った言語って感じで、うまく言えないけども、雰囲気的に簡単なのだ。雰囲気とかって言葉で曖昧な感じで言うけども、なんていうか簡単な雰囲気なのだ。そこがSwiftと違うと感じた。

C#で開発すると言っても、Macのデスクトップなアプリを作成するのにCocoaの情報は欠かせない。だがXamarinもStoryboardを使用してUI部分を作成するので、Swiftと労力は変わらない。っていうか、SwiftではiOS向けな情報ばかりだったが、Xamarinでもそれは同じで、AndroidiOSアプリを作るって情報ばかりが世の中に溢れている。結局のところ、SwiftだろうがXamarinだろうが、GUIアプリを作るのに勉強しなければならないのは言語仕様よりもGUIフレームワークなのだ。・・・・という現実にぶつかってちょっと絶望した。Winの開発系書籍とかだとC#だろうがC++だろうがVBだろうが、GUIフレームワークの使い方の情報ってのはそれなりにあると思うが、MacだとiOS向けの開発に関するものはあってもデスクトップアプリ開発に関する物は凄い少ない。もうちょっとなんとかならんのだろうか。情報少なすぎ。

MacGUIアプリを作るのにCocoaの勉強は避けて通れない。ということを再認識したところで、Xamarinでの開発に関する情報を色々集めてみた。そこで判明したのだが、XamarinはC#だけども、このC#って言語を利用した開発環境ってのはマルチプラットフォームで色々あるということが解ってきた。結局のところ、.NETのパチもん的なMonoを利用して動かしてるんだけども、このMonoがある環境であればC#アプリを動かせるってことだ。なので、ゲーム分野で結構採用されてるっぽかった。有名どこだとUnityなんかはMonodevelopをベースにしてC#で開発ができるらしい。そうか、OSプラットフォーム依存じゃないGUIフレームワークだったらマルチプラットフォームアプリを完結して書けるんだなー、なんて薄っすら思ったとこでピンとくる。Qt+Xamarinはどうだろうか?と。

QtはマルチプラットフォームGUIフレームワークだけども、多言語に対応している。Pythonからですら使えるのだから、C#バインディングがあってもおかしくない。って事で探してみたらあった。

gitlab.com

日本語情報だとQyotoってのが見つかったんだけども、どうもこのプロジェクトはobsoleteらしい。後継がQtSharpみたいだ。

おし、これでQtアプリをXamarinで書くかー、って思ったんだけども、もうね、情報が皆無。誰もやってないんじゃなかろうか。さすがに情報が無いと敷居が高いから調べてたら、英語のフォーラムで俺と同じような疑問を持ってる人がいて、それに対する返答で「C#マルチプラットフォームGUIアプリ作るんならGTK#使えや。GTK#はMono内蔵だからMonoがある環境なら動くぞ」みたいな情報を入手した。そうかGTKか。GTKなら日本語情報は少ないが英語情報は巷に溢れかえってるのでなんとか勉強できそう。GTK#勉強するぜ!

・・・と、ここまでたどり着くのに1ヶ月かかった。Swift勉強し始めて、Xamarinインストールして、Cocoaうざいと思ってQt使おうかと思ったらGTK#、みたいな流れ。正直、C#GTKだと、XamarinじゃなくてMonodevelopでいいじゃん、って感じなんだけども、まぁいつ気が変わってCocoaを勉強しはじめるか判らんのでXamarinでGTK#ってのにこだわっていきたい。

さて、何作ろうか。