読者です 読者をやめる 読者になる 読者になる

【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

MonoDevelopの衝撃

MonoDevelopを試しました。バージョンは2.8.8.4です。

予想以上にパワーアップしていて驚きました。

  1. MonoなしにMicrosoft .NET上で動く。作成したGtk#アプリも同様。
  2. ソリューションはVisual Studio互換。そのままVisual Studioで開ける。

1については、昔のGtk#アプリはMono上でしか動かなかったような記憶があります。2については以下で述べます。

ソリューションの互換性

私が試した手順を書きます。

まず、MonoDevelopC#のGtk# 2.0プロジェクトを作成します。プロジェクトの動作を確認したら、MonoDevelopは閉じます。

f:id:n7shi:20120424231145p:plain

次にそのソリューションをVC# 2010 Express Editionで開きます。ソリューションのフォーマットが2008形式らしく、変換を要求されます。変換すれば特に問題なく動作します。

f:id:n7shi:20120424232522p:plain

VC#を閉じて再びMonoDevelopで開きます。変換したのが不安でしたが、特に問題なく開けました。

VB

VBのGtk# 2.0プロジェクトも作成可能ですが、なぜか開くのに失敗しました。そのプロジェクトをVB 2010 Express Editionで開くことは可能で、C#とは異なりソリューションの変換も要求されません。

Gtk#

上のサンプルは、フォームにボタンを貼って以下のハンドラを書いたものです。

ダイアログの破棄がDispose()ではなくDestroy()なのに戸惑いました。最初はWindows Formsの感覚でダイアログのインスタンスをusingで囲んだりしたのですが、うまく動きませんでした。

Windows FormsのMessageBoxとは違い、デフォルトで親ウィンドウの中央に表示されるのは良いですね。

経緯

少し前までGUIツールを作って遊んでいましたが、最近の勉強会では半分以上の人がMacかLinuxを使っているため、Windowsでしか動かないようなツールは肩身が狭くなって来ました。

MonoでもWindows Formsアプリは動きますが、挙動が異なる部分もあります。一番問題なのはP/Invokeです。Windows Formsでは出来ないことをP/Invokeで補うことは良くありますが、そういう部分がMonoではまったく動きません。

Gtk#で開発すればMonoでの互換性は問題なさそうですが、前述のように以前Gtk#アプリはEXEダブルクリックで起動しませんでした。これではWindowsで問題があります。

以上の理由で、マルチプラットフォーム実現の手段としてMonoのことは忘れていました。

最近、PlayStation Suite SDKのオープンβ版が公開されました。MonoDevelopがMonoなしで動いているようです。

あれ?と思って本家MonoDevelopを試してみると、そちらもMonoなしで動くようになっていました。それが予想外で驚いたため、このような記事を書きました。

Visual Studioとの互換性も強化されており、マルチプラットフォーム目的でのGtk#はかなり成熟したように感じます。しばらく試しながら様子を見てみます。