この記事は、[学生さん・初心者さん大歓迎!]Xamarin Advent Calendar 2016 の2日目の記事です。
今年の2月に買収され、4月には無償化の発表があり、「Xamarinはいいぞ」の掛け声とともにある一定度の知名度を獲得したXamarinですが、実際に触ってみていい感じに書いている方もいれば、うーんとなった方も多いのではないでしょうか。
私自身まだ学生の身ですが、学生がXamarinを使うことのメリット・デメリットを考えて色々書いていきたいと思います。
言語面
Xamarinで主に使用されるのはC#とXAMLです。一方、iOSとAndroidをネイティブで書こうとした際はSwiftとJavaになるでしょう。
この2つの言語を初めて触る人であれば、両方同時に習得するよりはC#一本だけの書き方を覚えるほうが楽ではあります。
C#が出来るようになることのメリットとしては、UnityやASP.NETといったフレームワークへの参入がしやすくなるといった点です。
また、VisualStudioをメインで使用するため、VSへの知識が増えるという点も大きいと思います。
一方、デメリットとしては、Javaなどに比べるとC#の使用頻度は低いという点です。
Swiftと比べても、SwiftはiOSアプリの開発がメイン用途のため使用用途がJavaやC#に比べ限定はされますが、それでも勢力を伸ばしつつあり、言語自身の人気としても抜かれる可能性が高くあります。
プラットフォームとして
Xamarinの推しのポイントである「複数プラットフォームを同一環境で、コードを共通化できる」 という点について考えてみます。
Xamarin Nativeであれば、UI部分などを元のネイティブ環境と同じように(AndroidのレイアウトXMLやiOSのストーリーボード)作ることができ、ロジックの部分やモデルの部分、データベース・アクセスなどの部分を共通化できます。
Xamarin.Formsであれば、UI部分まで共通化させることが可能です。
メリットとしては、このように一度書いたものを別言語で再度実装し直す必要がなくなるということがあります。
特に、JavaとSwiftに限った面で言えば言語仕様の違いとしてnull非許容があるかといった点でModel自身にNull非許容であるというような制約をJavaでは加えられなくなります。
デメリットとしては、確かに共通化できる部分はできますが、最終的にプラットフォーム依存のコードなどは各OSごとの実装となってしまう箇所が出てきてしまいます。(実際Xamarinに触れた方ならわかるかもしれません・・・)
また、各プラットフォームごとに作られている様々なOSSライブラリが基本的に使えなくなってしまうので、ライブラリによって便利になっていた部分を自分自身で実装し直す、いわゆる車輪の再発明的なことをやらざるを得ない可能性が出てきてしまいます。
学習コストとして
Xamarinを使用した開発において必要なスキルとしては、
- C#(XAML)への知識
- Xamarin自体のAPIの知識
- .NET系への知識
- 各プラットフォームの最低限の知識(エラー解決方法や内部ロジックなど)
- 各プラットフォームのAPI(Xamarin Nativeはmust、FormsはOptional)
が必要だと個人的には感じています。
結局のところ、下2つのような各プラットフォームへの知識がどうしても必要になってしまうので、最終的な学習コストは非常に高くなってしまうというのが自分のイメージです。
今までプログラミングやアプリ開発にあまり縁のなかった人がいきなりこの5つを進めようとすると、非常に厳しいかとは思います。
しかし、逆に考えると一気に両プラットフォームの知識を身につけることができ、+αでC#/.NETへの知識がついてくると考えれば学生くらいの知識の吸収力であれば逆に効率がよくなるのかなとも思います。
さいごに
私自身は元からマルチプラットフォームというのが大好きで、何個かモバイルアプリ開発のプラットフォームは見てみましたが、俗に言うハイブリッドアプリは個人的になんか違うという面が強くありました。
しかし、2月にXamarinを初めて聞き、触ってみたところ、まさしく自分が求めている形での開発ができると思いました。
(元からAndroidをやっていたというのもすんなり入りやすかった点かもしれません。)
もちろん万人にフィットするとは考えていないので、ぜひ一度触ってみて、こういうものかと見てほしいと思っています。
自分自身の考えとしては、学生といういろいろ手を出しやすい期間だからこそ、触ってほしいと思っています。