はじめに
c#を少しObjective-cを多少触ったことがあるPHPerな僕がXamarinを使用して
ネイティブアプリ開発した感想をまとめました。
個人的な意見もありますので参考程度に観ていただければと思います。
背景
健康管理アプリをWeb、iOS、Androidでリリースしたいという案件の開発を
頂きましてネイティブアプリ開発を行うことになりました。
なぜXamarinを選んだかというと、
iOSとAndroidを別々に開発するのは改修コストがかかるというのと、
Objective-c、javaの経験者を雇うのは採用コストが高いという要望があり、
技術的挑戦をする意味でXamarinしかもXamarin.Formsを採用しました。
Xamarinを採用してみての率直な感想
c#は描きやすくわかりやい言語で思い描いた設計をそのまま形にできる素晴らしいものでした。またXamarin.FormsはMVVMパターンが採用されており高凝縮に設計することができて非常に見通の良いコードに実装する事ができました。
ただ・・・
やはりまだまだ発展途上な技術でネイティブアプリを開発する上で、
大変なことはいくつかありました。
Xamarinのとほほなところ・・・(個人的見解)
描画の差異
Xamarin.Formsで共通のコンポーネントを使用しても、当たり前のようにiOSとAndroidで描画の差異が出ます。なので各OSごとにレンダリングを調整することなんて当たり前のようにやらなければいきません。Androidで正しく表示されるようにレイアウトを組み直すなんてことも普通にあります。またプラットフォーム依存する処理は各OS毎に実装する必要があります。
なのでカスタムレンダラー、DependencyServiceは避けては通れません。
挙動の差異
描画の差異だけでなく挙動にも違いが多々あります。
例えばモーダルを表示して閉じた際に前のページのOnAppearingがiOSでは呼ばれるが、
Androidでは呼ばれないなど、またAndroidのみFrameのタップイベントで例外が発生するなどがありました。
なので各OSごとに挙動を合わせるように実装を工夫しなくてはなりません。
Xamarinを使ってよかったところ
コードの共通化と開発工数の短縮
iOSとAndroidで約70%以上はコードを共通化することができました。
UIはもちろんページやアプリのライフサイクル、からAPI通信部分とViewModelを共通化できたので、システム根幹部分はほぼ共通化することができました。
なので書くコード量が減り工数の短縮は出来たかと思います。
シンプルかつ見通しの良い設計
個人的な見解ではありますがXamarin.Formsのイデオムは非常に解りやすいアーキテクチャになっているのでほぼ初見の人でも理解できます。
またc#のわかりやすさと書きやすさも合わさって見通しの良い設計にすることができるかと思います。
まとめ
Xamarinはまだまだ発展途上な技術なので選定は考える必要がありますが、スピーディーかつ簡潔にハイブリッドアプリを実装することができる開発手段です。
またPrismなどのフレームワークを使用したらさらにモダンな設計にする事が可能です。
JXUGなどのコミュニティーが盛んになってきているので、
Xamarinと共に成長したいという気概があるのであれば面白い技術かと思います。