Xamarin(ザマリン) とはなんぞや

  • 427
    いいね
  • 4
    コメント

【2017年7月時点の情報で更新しました。】

Xamarin(ザマリンと読みます) とはなんぞや、個人開発者として使う時にどうなるの、的な事をさらっと書いてみようと思います。

Xamarin は 2016年2月、Microsoft に買収され、 Visual Studio に無償で同梱されることになりました。

Xamarin 自体は元企業名であり、その歴史は .NET の Linux 版を開発していた Ximian という企業が Novell に買収されて、その後レイオフされて作った企業で・・・した。
このあたりの歴史については @atsushieno さんちょまどさん のブログが(読み物としても)おもしろいです。
Microsoftに買収されたことにより企業としての Xamarin はなくなりますが、現在のところ Xamarin という開発ツールの名称は、Visual Studio や、Xamarin Studio の中に見ることができます。

で、同社が開発した、 .NET技術で iOS や Android アプリが作成できる SDK が、Xamarin.iOS だったり、Xamarin.Android だったりするわけですが、それらに Mac アプリを開発できる Xamarin.Mac や、Xamarin Studio という統合開発環境を加えたツール群をまるごとひっくるめて Xamarin と呼んでいます。
(Xamarin社は他にも、クラウド上で実機テストができる Xamarin Test Cloud, C#のPlaygroundツールXamarin Workbooks などのプロダクトがあります)

作成できるアプリケーション

開発ツールの Xamarin を利用して作成できるアプリは、まず以下のものがあります。

  • Mono を利用したアプリケーション、クラスライブラリ
  • iOSアプリ(Xamarin.iOS)
  • Androidアプリ(Xamarin.Android)
  • macOSアプリ(Xamarin.Mac)
  • 複数のプラットフォームで再利用可能なクラスライブラリ(.NET Standard または PCL)

さらに、 Xamarin.Forms というフレームワークによって、以下のアプリも作成可能です。

  • Windows(UWP) アプリ
  • Tizenアプリ(※開発中)
  • Linuxアプリ(※開発中)

Windows 用の .NETアプリ(Windows.Forms や WPF)は、Xamarin 自体では作成できません。それは Visual Studio の役割です。ただ、.NET Standard(または PCL)と呼ばれる、プラットフォームを問わず動作するアセンブリ(DLL) を作成できますし、そもそも Mono と .NET の API はほとんど同じなので、書いたコードは Windows でも流用できます。

どこが共通化できる?

まず、Xamarin.Android, Xamarin.iOS, Xamarin.Mac が提供するのは、

各プラットフォーム(PF)版の.NET API + 各PFのAPIの.NETラッパクラス

です。

「各PF版の.NET API」とは、いわゆる基本クラスで、基本的な型だったり、文字列処理だったり LINQ だったりその他もろもろです。

一方、「各PFのAPIの.NETラッパクラス」とは、Android なら Android SDK、iOS なら CocoaTouch の API を .NET で記述できるラッパーです。ここにプラットフォーム間の互換性はありません。

なので、画面を作るのに Xamarin.Android なら Activity クラスを使いますし、Xamarin.iOS なら ViewController クラスを使います。
GPS を使うのに、.Android なら LocationManager を使いますし、.iOS なら CLLocationManager を使います。

つまり、共通にできるのは「コア」な部分だけで、「画面」と「各PF固有の機能」は共通化することができません。従って、各プラットフォーム の API は理解しておく必要があります。それから .NET Framework の基本クラスライブラリも。

上司に言うと「なんだその程度か」と返されると思いますが、コア部分だけでも、 Javaと Swift でそれぞれ実装しなくて良い というのは十分に価値があると思うんですよね僕は。

は、異なるプラットフォームで共通化できる箇所が具体的に示された有益な情報です。

ほかのクロスプラットフォーム開発可能な SDK(Titanium とか Abobe AIR とか)との比較はこちら → かきました : Xamarin vs 他のクロスプラットフォーム開発ツール

画面まで共通化できる Xamarin.Forms

これはいわゆる Titanium Mobile や Adobe Air, Delphi XE, 最近では React Native と同じアプローチで、共通の画面定義体から、各種プラットフォーム(Android, iOS, Windows Phone, UWP)向けの画面を生成します。Adobe Air, Delphi XE と異なるのは、それぞれのプラットフォームが提供するUIパーツが使用されるという点です。
画面定義体は XAML(ザムル, WPF のそれとは違います)か C# のコードで記述します。他にも ValueConverter, バインディング可能なプロパティなど .NET アプリ開発者に馴染みのある要素を使って開発できます。
XAML のグラフィカルなエディタはないので手書きするしかありませんが、XAML Previewer for Xamarin.Formsや、Gorilla Playerを使って、リアルタイムにプレビューさせることができます。

このXamarin.Formsフレームワークの活用は広がりを見せていて、以下のものに対応(または目下対応中)します。

  • Android
  • iOS
  • UWP
  • macOS ※ver3.0で対応予定
  • Tizen ※ver3.0で対応予定
  • Windows(WPF) ※ver3.0で対応予定
  • Linux(GTK#) ※ver3.0で対応予定

2016年11月に、TizenがXamarin.Forms対応プラットフォームに加わると発表された事は、ちょっとした驚きとともに迎え入れられました。今後は Xamarin.Forms 3.0 で Tizen の他に macOS、そしてなんと WPF や GTK# を使った Linux アプリ開発にも対応する予定です。

Xamarin.Formsは発展途上でも何でもありません。実戦投入できるフレームワーク です。
複数プラットフォームで辻褄を合わせて共通なインターフェースとして公開しなければならないので、提供されるUIコントロールは少ないですが、Xamarin.Android, Xamarin.iOS の上に成り立っているので、 ネイティブの部品をXamarin.Forms化することは容易 です。なぜならネイティブのAPIも同じ言語で同じIDEを使って開発・デバッグできるからです(例えば React Native では、AndroidネイティブのAPIをJavaScript側にブリッジする箇所は Java で書かなければなりません)。

Macの人は Visual Studio for Mac、Win の人は Visual Studio で開発しますよ

Mac 向けの Visual Studio、Visual Studio for Mac がされました。
中身は実質 Xamarin Studio で、 Windows版の Visual Studio の機能がすべて搭載されているわけではありません。
Xamarin Studio もしばらくは Visual Studio for Mac と同じ機能を搭載していくようなので、どちらを使ってもよいと思います。

Windows の場合、Visual Studio 2017 に同梱されるようになり、また無料化されたため、 Visual Studio Community でも利用できるようになりました。
(これまで提供されてきた Windows版の Xamarin Studio は、提供終了となりました。)
Visual Studio 2015 でも使用可能ですが、環境構築でハマることが多いので Visual Studio 2017 を推奨します。Visual Studio 2017 では、Xamarin のインストールが簡単になっています。それでも既定の選択だとかなりの容量が必要なので、次のリンクを参考に、定義オプションを外すとよいでしょう。

Visual Studio 2015 と Visual Studio 2017 は共存が可能です。

その他の開発ツールには JetBrains Rider があります。また開発中の製品ですが、現時点でも開発に使用することができます。

また iOS アプリを開発する場合は、ビルドや実行・デバッグのために Mac が必要なので、現実的には Mac 必須です。これは買収された後も変わっていません。
Remoted iOS Simulator (for Windows) が搭載され、Windows の画面でアプリを実行することができるようになりましたが、iOS アプリのビルドには Mac がどうしても必要になります。

だからiOSアプリを作るならMacは必要なんだってば!

Xamarin Live Player が発表されて、次のような日本語記事が公開されています。

が、 「macOS不要でiOSアプリが 公開 できる」というのは間違い(誤訳)です。
Xamarin Live Player(XLP)の実行形式は、

で解説されているとおり、XLP用のiOSアプリがソースコードをインタープリタ形式で実行しているに過ぎません。つまり、実際のアプリが動作しているわけではなく、アプリを配布・公開するには、これまで通りmacOSでビルドする必要があります。あと これ

Xamarin のコアライブラリはオープンソースになりました

Xamarin の基盤となっている Mono は元々オープンソースです。

Xamarin.Android, Xamarin.iOS, Xamarin.Mac, Xamarin.Forms のこれまでプロプライエタリだったライブラリ群は、いずれもMITライセンスによるオープンソースになりました → Xamarin Open Source SDK

Xamarin Studio の IDE としての機能は元々オープンソースである MonoDevelop なので、純粋な Mono アプリケーションを作成するのにも使用されます。Xamarin Studio の Xamarin固有のプラグイン部は、オープンソース化されないとのことです。つまり、Microsoftとしては「開発ツールが収益源」ということになります。

価格

Xamarin自体は無償になりましたが、企業利用の場合、大抵は Visual Studio の購入が必要になります。

個人の場合

Windowsの人は、Visual Studio Community で開発・配布ができるようになりました。
Macの人は、Visual Studio for Mac で(もちろん Xamarin Studio でも) 開発・配布ができるようになりました。

企業の場合

Windowsの人は、Visual Studio のサブスクリプションの購入が必要です。
Macの人は、Visual Studio for Mac で開発を行いますが、Windowsと同様、Visual Studio サブスクリプションの購入が必要です。

詳しくは、 Xamarin の開発環境を整理しよう - Xamarin 日本語情報 を参考に、あるいは Microsoft へ問い合わせてください。

@nuits_jp さんが「絶対わかるXamarinライセンスの判断方法」を書いてくれました!

日本語情報について

2017年7月現在、Xamarin の日本語情報もだいぶ増えてきました。

書籍(商業出版:発売日が新しい順)

基礎から学ぶ Xamarinプログラミング

めずらしく Xamarin.Android, Xamarin.iOS の「Xamarinネイティブ」と MvvmCross というフレームワークをフィーチャーした内容とのことです。

プログラミングXamarin 上 Xamarin.FormsとC#によるクロスプラットフォームモバイルアプリ開発

ついに登場、Xamarin.Formsのバイブル「ペゾルド本」の日本語訳書籍、@atsushieno さんが XamarinFormsBookReading で巡回されてるやつですね。下巻も期待!

Xamarinエキスパート養成読本 (Software Design plus)

「エキスパートになる」というよりは、「初心者の人がとりあえずXamarin.Formsでアプリを作れるようになる」ところまでが書かれています。

Xamarinではじめるスマホアプリ開発

こちらも初心者向け。Visual Studio for Mac が使われていてどちらかというとiOSアプリ寄りの解説がされています。

C#によるiOS、Android、Windowsアプリケーション開発入門

内容は少し古いですが、基礎の理解には問題ありません。

.NET開発テクノロジ入門2016年版 Visual Studio 2015対応版

.NET開発全般についての書籍ですが、Xamarinについての章があります。C#/.NET自体もこれから勉強するという方にはふさわしいでしょう。

書籍(個人または同人出版:発売日が新しい順)

Essential Xamarin Yin/Yang (陰/陽)

@atsushieno さん主宰のサークル「Xamaritans(6名、私も参加しております)」が執筆したXamarin技術誌です。
陰(Yin) と 陽(Yang) の2冊となっており、技術書典2超技術書典 で販売しました。
現在は Boothにて製本版またはダウンロード版を購入 できます。
また、加筆や最新の情報で更新された商業本化 が進行中です、ご期待下さい!

かずきのXamarin.Forms入門(Kindle版)

元MVPで現Microsoftの中の人 @okazuki さんによる自費出版本です。Xamarin.Formsの日本語での入門にはピッタリです。
そしてなんと同内容のものが Slideshare で無料配布されております!ありがたい!

Webサイト、ブログ

コミュニティ

  • Japan Xamarin User Group (JXUG) - @ytabuchi さんが代表と務められているコミュニティ。定期的に勉強会、ハンズオンなどを開いています。
  • JXUG - connpass - 登録しておくとXamarinのハンズオンや勉強会の通知を受け取れます

Microsoft に買収され、より多くの人に知ってもらえ、使ってもらえるようになった Xamarin、事実上クロスプラットフォーム開発の最良の選択肢になったと言えますね。

最後に注意点

Visual Studio + Xamarin はクロスプラットフォームアプリ開発が行える非常に強力な開発ツールですが、Android や iOS のアプリ開発の知識は 必須 です。特に開発中に期待通りに動作しない事象が発生した場合、基本であるネイティブに立ち返って調べる必要があります(トラブルシューティングの方法を「Xamarin を使用したアプリ開発での、問題解決の方法」に書きました)。

また、Visual Studio は最強のIDEであるのはその通りですが、Androidアプリ開発には Android Studio、iOSアプリ開発にはXcodeという公式な開発ツールがあり、それらの方が便利な機能もあります。

そのため、Android Studio や Xcode で Android、iOSアプリを開発できるようになった上で、Visual Studio+Xamarin でクロスプラットフォーム開発をするのが、最大の効果を得られる方法です。

Java も Swift も学んで C# で D.R.Y(Don't Repeat Yourself) するのが Xamarin です

この投稿は Xamarin Advent Calendar 20131日目の記事です。