ぴよぴよエンジニアの日記

クラウドベンダーに勤める見習いSEの日記です。発言は私自身の見解であり、必ずしも所属組織の立場、戦略、意見を代表するものではありません。

部門旅行用のアプリを Xamarin.Forms で作ってリリースしました

9月29日、30日と部門の研修旅行がありまして、研修旅行用のアプリをリリースしたお話です.

Xamarin.Forms で実装していて、iOS, Android 両対応です.

ダウンロード数は、Android 20 対して、iOS が 70 という割合でした.
想像より iOS の割合が多いなという印象です.


CAMS2017

CAMS2017

  • Daiki Kawanuma
  • Navigation
  • Free
play.google.com

*ランタイム課金の関係上、今はサーバーサイド止めています.



期間

期間にして2ヶ月費やしてますが、実際の作業期間だと1ヶ月弱といった感じです.

f:id:Santea:20170930180131p:plain:w250

GitHub の草だとこんな感じ.
一番濃いところがリリース直前です.

全体の作業時間は正確に把握していませんが、体感で60~70時間くらいかなと思います.



クライアントサイド

f:id:Santea:20170930192810j:plain

クライアントサイドは Xamarin.Forms + Prism.Forms + ReactiveProperty です.

実装開始時は MVVM でちゃんと作ろうと考えていましたが、結果を見ると残念なものになってしまいましたw

Prism はほぼ INavigationService にしか使っていない有様で、ReactiveProperty の使い方も fat ViewModel な実装になっています(というか、ほぼ Model 書いてない汗).


ただ、Xamarin.Forms で実装した成果はちゃんと挙がっていて、短期間で iOS, Android の2つを仕上げるには View も共通化できる Xamarin.Forms を使うしか選択肢が無かったように思えます(もちろん Xamarin.Forms が唯一解という意味ではなく、View まで共通化できるクロスプラットフォームが良かったという話です).

凝った機能が無いなら Web アプリでもいいじゃんという意見もあるかと思いますが、URL を配布してブックマークさせるという工程は意外にハードルが高いと思っていて、その点アプリなら1回ダウンロードしてもらえばすぐに起動してもらえるので、ガワだけでもアプリ化するのは有効だと思います.



サーバーサイド

サーバーサイドは SpringBoot + Doma2 + Tymeleaf で、Bluemix 上の Liberty for Java に乗せています.

同期のスキルセットを考えて、サーバーサイドは Java にするかくらいの気持ちで決めました.わりとテキトーです.

今思うと、LoopBack などでもっと簡易に実装できたなぁと思うので、サーバーサイドは一度見直したいところです.



画面

f:id:Santea:20170930204832j:plain

画面数は root を含めると10画面です(上記+ログイン画面、WebView).

CardView の様な View などは Evolve 公式アプリを参考にしています.
Evolve のアプリは学ぶところが色々あって、非常に参考になりました.
(CustomRender でなく、Forms の View でやりくりしてるところなど凄いです)



まとめ

今回は Xamarin.Forms を、あくまで内向けですが実戦投入してみました.
短期間の軽量な開発だと、やはりクロスプラットフォームは光るところがあるなと感じました.

今回の開発で得たいくつかの気づきは、今後小出しにしていきたいと思います.


以上です.