本サイトからスピンオフした姉妹サイトです。xsp2014年4月24日MonoDevelopでアプリをビルド/実行/デバッグするための機能を解説。iOS/Android向けのGUIデザイナーや、MonoDevelopのカスタムアドインについても紹介する。Studio)の基本的な機能やC#コーディング補助機能についても説明した。今回も引き続きMonoDevelopについて解説する。前回説明した通り、MonoDevelopは、必ずしも.NETのプロジェクトだけをターゲットとするものではない。主としてC#を対象としているが、C/C++や他の言語のサポートも可能だ。それらをビルドする方法、および実行する方法は、それぞれ、プロジェクトの種類によって決まってくる。プロジェクトモデルのそれぞれについて、対応するアドインがビルド方法と実行方法を定義する(C#コンソールプロジェクトすら、アドインで定義されている)。.NETのプロジェクトは、単にMSBuildを呼び出すのが一般的だ。C#のプロジェクトは以前はMonoDevelop独自のビルダーを使用していたし、Xamarin.iOSについては現在でもこれが使われているが、それ以外ではMSBuildに移行している。F#アドインでは、MSBuildが使用されている。MonoのMSBuild(コマンドラインツールとしてはxbuildである)は、まだ古いビルドエンジンを使用しているので、例えばC#インラインタスクは機能しない。MSBuildが利用できない種類のプロジェクトについては、アドインの開発者がビルドのコマンドを実装することになる。C/C++プロジェクトについては、プロジェクトプロパティの内容に基づいて、gccが呼び出されるようなコマンドがアドインで実装されている。ビルドされたアプリケーションを実行する方法も、プロジェクトモデルに依存する。.NETのコンソールアプリケーションなら、単純にmonoに実行させる(デバッグ実行については後述する)。Windowsの場合は、コンソールアプリケーションを実行するランタイムを、「.NET(CLR)」と「mono」から選択できる。ASP.NETアプリケーションなら、monoのWebサーバー「xsp」を起動して、Webアプリケーションのスタートアップページ(index.aspxなど)をブラウザーで開く。NUnitテストライブラリであれば、NUnitのテストランナーが走り、[単体テスト]パッドに結果が表示される。.NET以外のプロジェクトモデルについては(実のところ.NETでも同様だが)、それを定義したアドインが実行コマンドを定義・実装する必要がある。無ければ実行コマンドは無効になる。Xamarinのモバイル製品についても、同様のことが言える。実のところ、Xamarin.iOSもXamarin.Androidも、これまでの回で説明した通り、ビルドおよび実行のプロセスはかなり多岐にわたる、複雑なものだ。それぞれにさまざまなビルド処理があり、またアプリケーションのデプロイメントもそれぞれのプラットフォームの流儀に従って行われる。Studioの(MonoDevelop本体に無い)アドインが実装している。アプリケーションのデバッグMonoDevelopは、ブレークポイントの設定やステップ実行などを実現するデバッグ機能を備えている。例によって、MonoDevelopは.NET以外のプロジェクトモデルをサポートしていて、MonoDevelopが自らデバッグ対象プログラムを知り尽くしていることはなく、デバッグ機能の実現は主にプロジェクトモデルを提供するアドイン側が責任を負う。デバッグ実行にmonoが使用される場合は、デバッグ機能はmonoランタイム上に実装されているデバッガーが利用される。一方で、MonoDevelopは、エディターUIなどを含む、いわゆるデバッガーのフロントエンドも提供している。各アドインが実際に実装するのは、デバッガー本体の機能と、デバッガーのフロントエンドの機能を、関連付ける(統合する)コードである。フロントエンドはプロジェクトモデルから独立して定義されている。少々乱暴な例を挙げるなら、どんなプロジェクトであっても、ブレークポイントの追加はF9キーを押すだけでよいはずだ。MonoDevelopのデバッガー・フロントエンドには、以下のような機能がある。留め表示も可能ファンクション・ブレークポイント:Android.App.Activity.OnCreateやAndroid.App.Activity.OnCreate(Android.OS.Bundle)のような書式で指定した型のメソッドの呼び出しでブレークデバッガー・フロントエンドから送られたデバッガーの制御命令をどうデバッガーに反映するかは、原理的には実行コマンドと同様、プロジェクトモデル側で定義する。debugger」のAPIを使用してデバッグ操作が行われる。Webアプリケーションをデバッグするには、Webサーバー「xsp」を起動しているmonoを、リモートでデバッグ制御する必要がある(次の画面は、ASP.NETプロジェクトのデバッグ例)。ちなみにWindows上で動作するMonoDevelopは、アプリケーションをCLR上で実行するが、デバッグについてはICorDebugなどのWindowsネイティブのデバッグAPIを呼び出すようになっている(MonoDevelop.Debugger.Win32.dllを参照)。C/C++のプロジェクトなら、gdbを操作するアドインもmonodevelopのソースに含まれている(デフォルトではビルドされない)。Studioのアドインが、それぞれのプラットフォームの流儀に従って、リモートデバッグ機能を実装している。Studioの大きな特徴の1つは、IDEに統合されたGUIデザイナーである。Builderに編集を完全に委任している)。MonoDevelop自体、伝統的にGtk#アプリケーションを設計するために、Gtk#のGUIデザイナーをサポートしてきた(これ自体はXamarinと無関係なので、詳しくは説明しない)。個別のUIデザイナーについて言及する前に、MonoDevelopが提供する共通の機能について説明しておきたい。アウトライン]パッドなどを実装してきた。これはUIデザイナーに固有の話ではないが、それぞれのパッドはメインメニューの[ビュー]から[パッド]を選択して表示有無を切り替えられる。MonoDevelopはIDEによく見られるドッキングビューを採用しており、それぞれのパッドはメインウィンドウから切り離したり、自動的に隠したりすることが可能だ。UIデザイナーiOSデザイナーについては、公式サイトにあるイントロダクションおよびウォークスルーガイドを追って試してみると、基本的な使い方が把握できるだろう。[プロパティ]パッドに含まれるプロパティ設定コントロールはXcodeのものと同等だ。イベントの設定については、Xcodeで行うようなアウトレットを自ら設定するような煩雑さはない。iOSデザイナーで特徴的なのは、自ら作成したカスタムコントロールを登録して使用できる点だ。これについても、公式サイトにデザイン可能なカスタムコントロールの作成方法およびそのウォークスルーガイドがあるので、それらを参照されたい。UIデザイナーAndroidデザイナーについても、デザイナーの基本的な使い方とウォークスルーガイドが用意されているので、それらを参考にされたい。Androidデザイナーの仕組みについては、Xamarin.Androidの回でコラムとして説明したので、興味のある読者はそれも参考にされたい。Androidデザイナーには、iOSデザイナーのようなカスタムコントロールやイベントのサポートなどは含まれていない。実現は可能かもしれないが、Androidフレームワークでビューをロードするやり方について、途中でイベントの登録などを行うカスタムコードを挟み込む余地がないことが、1つの理由として考えられる。「android:onClick」などは、属性として記述できる。MonoDevelopのカスタムアドインMonoDevelopに限らず、一般的にIDEにはアドイン機構(あるいはプラグイン、アドオン、エクステンション)が備わっている。IDEが提供する機能を、IDEのコードベースで全て実装するのは無理があるので、一般的にIDEは、アドイン機構で自身を拡張する余地を残している。MonoDevelop本体にデフォルトで含まれている機能も、大半がアドイン機構によって実現している。仕組みの話をする前に、MonoDevelopコミュニティによるアドインについて説明しておこう。Studioのアップデートに使用されるダイアログとは別物だ)。アドインマネージャーのダイアログこのダイアログの[Gallery]タブには、(現在インストールされていない)コミュニティアドインがリストアップされる。そのカタログは、MonoDevelopの公式リポジトリからダウンロードされる。リポジトリは、自分で追加することもできる。MonoDevelopの公式リポジトリを使用しないカスタムアドイン開発者は、独自のカタログを公開していることも多いので、その場合はMonoDevelopユーザーが自分で追加する必要がある。どのようなアドインが存在するかは、筆者はここで細かく紹介することはしないので、読者の皆さんに確かめていただきたい。MonoDevelopのアドインは、「mono-addins」というライブラリの機構に基づいて作成されており、自分でアドインを作成する場合は、その流儀に従う必要がある。アドインは、IDE側で定義された「拡張ポイント」に、拡張する機能の名前とコードを記述したアドインアセンブリ名.addin.xmlというアドイン記述XMLファイルを必要とする。このXMLファイルを「EmbeddedResource」としてアドインアセンブリのdllに含めることで、MonoDevelopがこれをアドインとして認識できるようになる。MonoDevelop本体には、細々としたコンポーネントが、アドインとして実装されている。例を挙げるなら、以下の機能は、それぞれアドインとして実装されている。正規表現ツールキットアドインの拡張ポイントはXPathのようなパス名で識別され、これは必ずしもMonoDevelopによって安定した識別子が与えられているとは言えないので、IDEのバージョンが上がると、それまで機能していたアドインが部分的に機能しなくなる場合もある。使えていたアドインの機能が使えなくなったと思ったら、アドインダイアログで、そのアドインが無効になっていないかを確認した方がよいだろう。アドイン開発者であれば、アドインをビルドする際に、参照アセンブリで使用していたAPIが変更されて、ビルドエラーになって気付くことも多いだろう(もっとも、これもその依存IDEコンポーネントのAPIがどれだけ安定しているかに依存する)。カスタムアドインを作成する方法については、ここでは詳しく取り上げる余地がないので、MonoDevelop公式サイトのウォークスルーガイドを参照されたい。MonoDevelopに独自拡張機能を追加することは、カスタムアドインで簡単に行える。それは「メインメニューに項目を1つ追加するだけ」というレベルではなく、独自のアプリケーションモデルを追加したり、[プロジェクト]パッドに手を加えてNuGetサポートやWebサービス参照を追加したりするようなレベルの改変が、アドインを書くレベルで実現可能だということだ。クールなアドインを開発できたら、ぜひともコミュニティに公開していただきたいと思う。XamarinのMonoDevelopハッカーには、独自アドインの作成から始めて、MonoDevelopをハックする仕事に就いたメンバーも複数存在している。開発コミュニティでフィードバックを得たり質問を投げたりすることもできるだろう。Studio/MonoDevelopの基本機能と、C#コーディング補助機能Xamarin.iOSの仕組みとアプリケーションの構成Xamarinを構成するソフトウェア。※以下では、本稿の前後を合わせて5回分(第10回~第14回)のみ表示しています。INDEX]を参照してください。Xamarin.AndroidにおけるJava相互運用の仕組みと、Javaバインディング・プロジェクトXamarin.AndroidでJavaとの相互運用を実現するアーキテクチャについて、さらにメモリ管理などの注意点を説明。Xamarin.Androidの制限事項についても解説する。MonoDevelopの基本的な機能を解説。C#コーディング補助機能についても紹介する。MonoDevelopにおけるビルド/実行/デバッグと、iOS/Android向けのGUIデザイナーMonoDevelopでアプリをビルド/実行/デバッグするための機能を解説。iOS/Android向けのGUIデザイナーや、MonoDevelopのカスタムアドインについても紹介する。Xamarinと、ポータブル・クラス・ライブラリ(PCL)複数プラットフォーム向けのライブラリを作れるPCLの概要と利点について解説。Xamarin.iOSやXamarin.Androidでの利用方法や、XamarinでPCLを実現する仕組み、PCLの課題を説明する。Xamarin.Formsの基本構想と仕組みクロスプラットフォームで使用できるモバイルUIライブラリであるXamarin.Formsの基本構想や仕組みについて説明する。機械学習エンジニアを目指す人~初中級者のための技術情報サイトです。2023最適なビューへの切り替えを推奨します:スマートフォン用表示に。