前回は、Xamarinの概要を紹介しました。3月31日から3日間にわたって開催されたMicrosoftのイベント「Build 2016」2日目のキーノートでは、スコット・ガスリー氏により、Visual Studio Professional/Enterprise with MSDNにXamarinが含まれ、無償提供されることが発表され、話題になりました(Channel 9で動画が公開されていますので、その時の会場の盛り上がりを是非見てみてください)。
今までもVisual Studio Community 2015に付属するXamarin Starterというエディションは無償で開発・ビルド・配布ができましたが、生成できるバイナリサイズに128KBという制限がありました。現在はその制限がなくなり、Visual Studio Community 2015 Update 2に付属するXamarin Communityを使用すれば、だれでもC#のみでスマホアプリを開発して配布できるようになりました。今回はこれからXamarinを始めたい方向けに、簡単なサンプルアプリの作成を通して、前回紹介したXamarinネイティブとXamarin.Formsの開発手法のうち、Xamarinネイティブの開発手法を説明します。
Xamarinネイティブの環境とは?
Xamarinネイティブの環境では、薄くラップされたAPIが提供されるため、コードがC#で書ける以外はAndroid Java/Swift/Objective-Cなどのネイティブ開発とほとんど変わりません。初めてXamarinでスマホアプリ開発をされる方には少し敷居が高いかもしれませんが、普段から使いなれたVisual Studioを使用することで学習コストが下がることを期待しています。Mac OS Xを使用している方はXamarin Studioという統合開発環境(IDE)により、Visual Studioと同じような感覚で使用することができます。
本連載ではVisual Studio Community 2015 Update 2で開発を進めていきます。Visual Studioはこちらからダウンロードできます。Xamarinを含めたVisual Studio Community 2015 Update 2のインストール、設定方法は筆者のブログエントリーにアップしましたので参照ください。
それでは、Xamarinネイティブの開発手法で消費税を算出する簡単なiOS/Androidアプリを作成してみます。
Visual Studioを開き、[新しいプロジェクト]から、[Visual C#>Windows>Cross-Platform]を選択し、[Blank App (Native Portable)]でプロジェクトを作成します。この例では「XamarinNative」というプロジェクト名にします。
PCLプロジェクト、iOS、Android、Windows Phone 8.1の合計4つのプロジェクトが作成されます。iOSプロジェクトにはStoryboard
、ViewController
、Info.plist
など、iOSネイティブ開発者であれば見慣れたファイルが並んでいます。Androidプロジェクトも同様にLayout
、Activity
、Android.Manifest
など見慣れたファイル、フォルダが並んでいます。
Androidアプリの作成
iOSアプリのビルドにはMacマシンが必要になりますので、まずはAndroidアプリを作ってみます。
Main.axml
をダブルクリックしてAndroid Designerで開き、[ツールボックス]から[TextView]をドラッグ&ドロップで配置します。[プロパティ]ウィンドウでtextSize
やlayout_margin
にdp値を指定するなどして、見た目を整えていきます。同様に[EditText]や[Button]も配置して整えます。結果、以下の図のようになります。
次に、「XamarinNative (移植可能)」プロジェクトに移動し、MyClass.cs
のファイル名をCalc.cs
に変更します。次のようなStaticメソッドを用意してPCLプロジェクトをビルドします。
再びAndroidプロジェクトに戻りMainActivity.cs
を開き、OnCreate
メソッドのSetContentView (Resource.Layout.Main);
以降の元々あったコードを削除し、次のコードを追加します。
ビルドしてデバッグ実行してみましょう。今回はCalc.GetTax
メソッドの部分にブレークポイントを設定してみます。数値を入力して[Calc]ボタンをタップすると、ちゃんとブレークポイントで止まり、EditText
に入力した数値が正しくTryParse
されてout
値が取得できているのがわかります。
そのまま[F11]を押すとPCLプロジェクトのCalc.GetTax
メソッドまでステップイン実行できるのがわかります。
実行結果は次のようになります。
iOSアプリの作成
Androidアプリが正しく動作していることを確認できましたので、iOSアプリを作ってみます。
Main.Storyboard
をiOS Designerで開き、[ツールボックス]ウィンドウから[Label]をドラッグ&ドロップで配置します。コントロール端の○のドラッグハンドラでコントロールのサイズを変更したり、[プロパティ]ウィンドウの[Text]を変更したり、[Font]のサイズを変更したりして、見た目を整えていきます。同様に、[Text Field]や[Button]も配置して整えます。結果、以下の図のようになります。
続いてViewController.cs
を開き、ViewDidLoaded
メソッドのbase.ViewDidLoad ();
以降の元々あったコードを削除し、次のコードを追加します。
ビルドしてデバッグ実行してみた実行結果は次のようになります。
既にお気づきの方もいるかと思いますが、Androidアプリ作成時に準備したPCLプロジェクト「XamarinNative (移植可能)」のCalc.GetTax
メソッドをAndroidプロジェクトからだけではなく、iOSプロジェクトからも呼び出しています。今回は計算メソッドだけですが、.NETで記述できるさまざまな処理をPCLプロジェクトにまとめ、iOS/Android共通ロジックとしていきます。
まとめ
以上、AndroidアプリとiOSアプリを作成してみましたが、いかがでしたでしょうか。iOS/AndroidアプリをC#のみで作成でき、コードの共通化ができることをおわかりいただけたかと思います。また、Androidプロジェクトのコード内では、FindViewById
メソッドで[Button]を宣言し、Click
メソッドのラムダ式でボタンクリック時の処理を記述しましたが、iOSプロジェクトでは[Button]はMain.Storyboard
内で宣言し、TouchUpInside
メソッドのラムダ式でボタンクリック時の処理を記述しました。
これらの手法やAPIの名前はAndroid Java/Swift/Objective-Cなどのネイティブ開発と同じで、各プラットフォームのお作法に従って記述する必要がありますので、ネイティブ開発の知識が多少は必要となります。しかし、C#の知識でロジックを共通化でき、各プラットフォームの部分もC#で簡潔に記述することができます。これにより、同じロジックを異なる言語で2回記述する必要がなくなり、生産性や保守性も上がります。ぜひ、無償化されたXamarinでスマホのアプリ開発にトライしてみてください。
今回作成したサンプルアプリはGitHubにアップしてありますので、併せて参照ください。筆者が主催しているユーザグループ、Japan Xamarin User Groupのページには各種情報へのリンクを記載しています。是非ご覧ください。
執筆者紹介
田淵義人(たぶち・よしと)
エクセルソフトにてXamarinをはじめ主に開発者向けのソフトウェアのセールスを担当しています。技術者と話が出来ないと楽しくない!より深く繋がりたいとの思いから、Xamarinを触りながらC#を勉強し「IT勉強会検索」のアプリをリリースしたり、Xamarinの勉強会を開催してほしいとの要望を受け、Japan Xamarin User Groupを主催し、各所で勉強会を開催していたりしています。2016年4月からMicrosoft MVP Visual Studio and Development Technologiesを受賞しました。Twitterアカウントは@ytabuchi