はじめに
mediba advent calendar 2016の6日目担当の@f-matsushimaです。主にネイティブアプリの開発やっております。
アプリの開発といったら、iOSでは、Objective-CやSwift、Androidでは、Javaが一般的だと思いますが、私が担当するプロジェクトでは、これからXamarinでの開発を行うことになりました。
そこで、今回はXamarinを採用するにあたっての、私が感じたXamarinのメリット・デメリットを書いていこうと思います。Xamarinに少し興味があった方、Xamarinを採用したいけど、上司を説得しなければいけない方の参考になれればなと思います。
Xamarin採用の経緯
まずは、Xamarinを採用するに至った経緯をざっと説明します。
- アプリの大幅なUI改修、機能追加の話が上がる
- 修正範囲も広く、もともとバグも多かったので、いっそのこと作りなおした方が早くね?
- どうせ作りなおすなら、クロスプラットフォームで開発した方が楽だよね
- Xamarinで開発開始 ←今ココ
といった感じで、なんかすんなりとXamarin採用が決まりました。これはmedibaのCREDOのValueに「挑戦を応援して失敗を責めない」というのがあるのですが、割りと新しいことにもチャレンジできる風土があるというのもあったかもしれません。
Xamarinのメリット・デメリット
メリット
クロスプラットフォーム
まずなんといっても、クロスプラットフォームであることです。iOSやAndroidで別々で開発を行わなくていいのは、それだけで大変魅力的です。今回開発するにあたって、通信処理やデータ管理処理など、いわゆるビジネスロジックの部分にも手を加えたかったので、その部分をiOSとAndroidそれぞれで作らないといけないのは、工数的にも非常にネックでした。しかし、Xamarinであれば、ひとつさえ作ってしまえばいいのです。更に、Xamarin.Formsを使えば、画面も共通化できちゃいます。もうXamarinを使わない手はないです。
C#で開発
言語がC#であることもポイント高いです。クロスプラットフォームであれば、Cordovaなども選択肢にあがるのですが、私自身JavaScriptには慣れていないせいもあり、ちょっと躊躇してしまうところがありました。その点C#であれば、Unityを使ってC#で開発を行ったこともありましたし、取っ付き易いだろうと考えました。それに、C#であれば、ラムダ式やLINQ、async/awaitを活用することで、コードがすっきり書けちゃうのはすごくいいです。ネイティブなので、Cordovaと比べて、パフォーマンス面でも有利です。
iOS、Android開発の経験を活かせる
C#で開発するからといって、これまでiOS、Androidで開発してきた経験が全く活かせなくなるかというと、そんなことはありません。むしろ逆にバンバン必要になると思います。クロスプラットフォームで処理が共通化されているとは言っても、どうしてもUI部品やプッシュ通知などで、デバイス特有の処理を書く場面は出てきちゃいます。この場合、言語こそC#ですけど、処理のやり方は、それぞれにあったものになるため、ここでiOS、Android開発の知識が必要になるというわけです。
私のチームでは、私の他にiOSエンジニアが1名、Androidエンジニアが1名いるのですが、今までの経験を活かせない全く新しいことを0からやると言ったら、無理を強いてしまうことになってしまうのですが、Xamarinであれば、そこまで大変なことにはならないのではないかと思っています。
デメリット
学習コスト
どうしても新しいことを始める以上学習コストはかかります。Xamarinの公式ガイダンスを読めばほとんどのことがわかるのですが、英語なのでちょっときついですし、日本語の書籍が今のところほぼ皆無なのも痛いです。私のチームでは、学習期間として2週間時間を確保しました。
完全に共通化できない
先ほど、iOS、Android開発の経験を活かせると書きましたが、裏を返せば、うまく共通化できていないところも多いので、各デバイスごとに処理を書かなければいけないということです。それがあまりにも多いと、クロスプラットフォームのメリットは薄まりますし、それなら慣れている、Objective-CやSwift、Javaで書いたほうが、逆に早く作れてしまうということもありうると思います。とは言いましても、今のところ、そこまで多くなることはないと考えています。
おわりに
Xamarinを採用するにあたってのメリット・デメリットを挙げてきましたが、私はメリットの方が大きいのではないかと思っております。確かに最初は大変かも知れませんが、今後追加機能の開発を行う際でも、ひとつ作っちゃうだけで済むようになりますし、将来的に見ても、採用する価値はあると思います。会社の方針として今後どのような開発を行っていくのか分からないところもありますが、私個人としては、今後もXamarinでの開発を推進していけたらなと思っております。