こんにちは。共同開発部 開発担当の伊藤です。
いわゆる「アプリストア」のあるプラットフォームも iOS、Android、Mac、Windows と、かなり数が増えてきました。
このような状況ですので、フェンリルにも「iOS と Android で同じアプリを開発したい」というご相談をよくいただきます。
しかし、iOS と Android のアプリを、それぞれで同じように作ると、コストも時間もそれに見合う程度にかかります。
「iOS も Android も、同じプログラムで動けば、もっと効率よくアプリを作っていけるのに」という要望に応えるため、様々なクロスプラットフォーム開発の技術が出てきました。
今回は、その中でも昨年末ごろから名前があがってきている Xamarin についてご紹介します。
Xamarinとは
簡単に言うと C# で iOS、Android、Mac のアプリを開発できるツールキットです。.NET Framework のオープンソース実装 Mono をベースにして作られています。
.NET Framework は元々 Windows 系の技術のため、これと Xamarin をあわせると、iOS、Android、Mac、Windows デスクトップアプリ、Windows ストアアプリ、Windows Phoneと、6プラットフォームのアプリを C# だけで記述することができます。
Objective-C や Java から利用できるネイティブのクラスやメソッドには基本的にすべてアクセスできるので、通常の開発でできることはすべてできますし、.NET Framework 向けのライブラリも活用できます。
プログラムは最終的に iOS は Xcode で作った物とかわらない ARM バイナリが出力され、Android では JIT で実行されるので、通常の開発で作ったアプリと同じレベルの速度で動作します。
また、C# は最近 async/await という非同期処理を簡単にかける記法が入ったり、データソースを扱う LINQ、ラムダ式等、言語的にも開発者を助ける機能が多く含まれており、効率的な開発ができるようになっています。
特に、Objective-C や Java だけだと XML の処理は追加ライブラリがないととても手間になりますが、.NET Framework の標準ライブラリには XML の処理に長けたクラスが含まれています。WSDL ベースの Web サービスとも親和性が高く、業務システムとの繋ぎこみにも向いています。
MVVM でコード共通化の効率を上げる
Xamarin を使えば iOS でも Android でもすべて同じ言語で書けますが、UI やカメラ・ライト・ハードウェアキーといったハードウェアに対する操作はそれぞれのネイティブで使用するクラス(UIViewController や Activityなど)をそのまま使用しています。
ただ普通に C# で書くだけだと、通常の開発と同じ程度になってしまい、せっかく得られるはずの共通化の効果があがりません。
そこで、MVVM(Model-View-ViewModel)と呼ばれる考え方を使って開発します。MVVM はソフトウェアの構成を実際のデータや処理にあたる Model と、画面に表示されるボタンやラベルといった View、そしてそれらをつなぐ ViewModel という 3 つにわけて開発しようという考え方です。
これまであった MVC(Model-View-Controller) よりも強力に、画面処理と内部処理を切り離すことができます。
Xamarin を使った開発で MVVM を強力にサポートするライブラリとして、MvvmCross があり、すべてのプラットフォームで動くコアライブラリに Model と ViewModel を用意し、アプリからコアライブラリを参照して、View をつなぐという開発をします。
また、MvvmCross に備わっているプラグイン機構を使えば、本来は共通化できないハードウェアの操作を共通化して、コアライブラリから操作することも可能です。
MVVM はフェンリルのエンジニア内での最新流行となっており、Objective-C や Android Java でも各種ライブラリを導入して積極的に取り入れるようになってきています。
プラットフォームの世界観を大事にする
クロスプラットフォーム開発でやってしまいがちなのが、実装の効率化をめざして「Android で iOS の UI を再現しよう」としてしまうことです。これは「ミミック」といわれており、ユーザーの混乱の元になってしまいます。
異なるプラットフォームでの動きをそのまま模倣するというのは、わざわざそのためのプログラムを書かないといけないため、効率化どころか余分にプログラムを開発しないといけなくなってしまいます。
たとえクロスプラットフォーム開発でも、それぞれのプラットフォームの UI にあわせたデザインで実装していくのが、ユーザーにとっても開発者にとってもベストということを忘れてはいけません。
また、「.NET Framework で WPF バリバリ書いていたけど、iOS や Android ははじめて!」という開発者の方は、Xamarin での開発を始める前にぜひ一度 Objective-C や Java 向けに書かれたネイティブ向けの開発の情報に目を通してください。言語は C# でも使っているクラスはそれぞれのプラットフォームでネイティブのものなので、その考えを尊重したコーディングをしていく必要があります。
Xamarin を使ったアプリ開発、はじめました!
フェンリルでは昨年から Xamarin を使った開発にとりくみ、すでにいくつかのアプリを開発しています。
まだまだ Xamarin を使った開発を本格的にされている会社は国内では少ないと思いますが、フェンリルではすでに MvvmCross の運用や、ネイティブコードの移植を含めて深く利用しています。
もちろん、通常の Objective-C や Java を使った開発は健在ですし、PhoneGap を使ったハイブリッドアプリも開発しています。それぞれで得意とする分野は異なりますが、アプリの性質や開発期間などを考えて、最適な選択肢をご提案できます。
モバイルプラットフォームを知り尽くしたデザイナーとエンジニアが、Xamarin を作って効率よく、プラットフォームごとに最適なクロスプラットフォームアプリをご提供します。
フェンリルの Xamarin を使ったクロスプラットフォーム開発について、詳しくはこちらのページをご覧ください。
フェンリル株式会社 | クロスプラットフォームアプリ開発 (Xamarin)
フェンリルのオフィシャル Twitter アカウントでは、フェンリルプロダクトの最新情報などをつぶやいています。よろしければフォローしてください!