Xamarin.Formsを
実践投入してみて
自分について
 宮坂 雅彦
 @omanuke
 主に株式会社トレードワークスとい
う会社で金融向けのソフトを作成
 F#大好き
 でもモナドとかよくわかってない
 Androidよく知らない
Xamarinとのかかわり
 iPadが出たころのMonoTouchの時触る
 2012年末ぐらいにiPadアプリサンプル作成
 2013年後半にF#でPCL使えるようになった
ので案件に投入検討
 2014-15 iOS案件に投入
 2015末ぐらいからXamarin.Forms実践投入
アジェンダ
 XamarinとXamarin.Formsについて
全般感想
 Xamarin.Forms導入・開発時に調
べたこと
 VM・Mの記述について
Xamarin感想
 実行はかなり安定してる。
 Xamarinのせいで落ちたとこはバグを除いて(確か)
記憶にない。
 インクリメンタルビルドにしたときは起動時に落
ちてしばらく原因がわからず難儀したので注意。
 問題は開発環境の構築
 はるかにましになったとはいえはまりどこ多し。
時間の余裕見ておく。
 VisualStudioの言語設定を英語にしてググラビリ
ティを高めておく。
Xamarin.Formsの光と闇
 光
 UIまでコード共有できる!
 抽象化されてるのでプラットフォームの詳細知
らなくても作れる!
Xamarin.Formsの光と闇
 闇
 バージョンアップが激しい
 いろいろバグもある
 抽象化=最大公約数であり機能も足りないとこ
ろもありプラットフォームごとにゴニョゴニョ
する必要
 結局プラットフォームについて知らないとたぶ
ん作れない。むしろプラットフォームの挙動と
XFの組み合わせを考える必要がが
実案件で使っての感想
 要件次第だけど、安定して動く
し開発手段として十分使えて
コード共有化の効果も高い。
実案件で使っての感想
 向いてる場合
 プラットフォーム間で共有する画面数が多い
 プラットフォームに詳しい人があまりいない
 向いてない場合
 画面数が少ない
 各々のプラットフォームに詳しい人がいる
実案件で使っての感想
 画面数が少ないなら各々を個別に作ったほ
うが余計な地雷を踏まず早いかも
 結局コードの共有化することによる労力の
削減と、共有化をするための労力の増大を
天秤にかけて採用を検討すべき
 一部XFで共有化して、一部プラットフォー
ムごとに作って混在するもできます
導入・開発時に調査したところ
 そも安定して動くのか、採用する意味はあ
りそうか
 みためよいUIにできるのか
 要件で必要な挙動を実現できるのか
安定して動くのか、採用する意味は
ありそうか
 ミニマムなもの作って感触つかんだ
 多くの画面はワンソースでよく、その他も
Rendererなどでいけそう
 ミニマムの作成時にブラックボックス故の
デバッグの難しさなどそれほど当たらな
かった
 ソースも公開されましたし安心ですね
 行けそうだということであとは走りながら
調査
見た目いい感じにできるのか
 Grial
 http://grialkit.com/
見た目いい感じにできるのか
 Xamarin.Forms in Anger
 https://www.syntaxismyui.com
/xamarin-forms-in-anger/
見た目いい感じにできるのか
 Hanselman.Forms
 https://github.com/jamesmontemagno/Hanselman.Form
s
見た目いい感じにできるのか
 Xamarin Evolve 2016
 https://github.com/xamarinhq/app-evolve
必要な挙動は実現できるのか
 調べたもの
 MasterDetail,Tab,NavigationPush,Popup,Overlay
の混在=ビュー全体の骨格の実現性
 Picker・Alert
 色などスタイルカスタマイズ
 オーバーレイ
 カルーセルビュー
 2Dでの描画
 回転制御
必要な挙動は実現できるのか
 MasterDetail,Tab,NavigationPush,Popup,O
verlay表示はいい感じにできるのか
 後述のOverlayのもの使ってiOS側はデフォルト
のままでいけそう
 Android側はMasterDetailとTabbedPage組み合
わせるとActionBarの下にMasterページが表示さ
れてしょっぱい
 AppCompat入れたらMasterの表示がいい感じに
なってMaterial万歳\(^o^)/
必要な挙動は実現できるのか
 AppCompat導入してNavigationPageをもつ
TabbedPageを使うと違うタブを選んだ瞬間に
すっ飛ぶように。
 エラー文言をもとに検索してたどるとXFのバグ
らしい
 2.2で治るようなので修正待ち
 これで行けるかと思ったらMaterialにしたら
TabbedPageが左右スワイプで切り替わるように
なった -> 仕様のビューの挙動がぶつかってよ
ろしくない
必要な挙動は実現できるのか
 XF・Xamarinがらみだと解決法出てこず
 Xamarinのキーワード入れないでぐぐったら
ViewManagerゴニョゴニョで行けるらしい
 AndroidよくしらないしXFでどうやるかわから
ない\(^o^)/オワタ
 フォーラムで同じようなこと訪ねてる人が4,5
か月たっても解決してない
 Android側は全部自前描画することに決めた
 フル自前描画なのでカスタマイズもしやすい!
(白目)
必要な挙動は実現できるのか
 Picker・Alert
 AndroidとiOSで挙動は違うけど仕様的に問題な
かった
 Picker、iOS側で完了、キャンセルと二つボタン
あるものが必要だったけどRendererでやり方わ
からないので仕様変えた
 iOS側、OKじゃなく完了とするならinfo.plistに
対応言語追加する
必要な挙動は実現できるのか
 スタイルカスタマイズ
 プラットフォームのテーマ、Xamarin.Formsでの
指定、Tintなどプラットフォームごとの指定を
組み合わせる
 ナビゲーションバーのアイコンの色指定などXF
だと無理でRendererいるっぽい
 iOSタブバーの非選択の色がTintの色に引きずら
れてる
 なるべくこだわらない仕様にしたほうがよさげ
 なにかまとまったのがほしいところ
必要な挙動は実現できるのか
 オーバーレイ
 XFのビューからネイティブのビューを取り出す
奴があったのでそれ使ってゴニョゴニョ
 https://github.com/rid00z/LoadingFormsViewFro
mNative
必要な挙動は実現できるのか
 カルーセルビュー
 それっぽいのは見つかったけれど、ぐるぐる回
転する奴が見つからなかったのでRelativeLayout
使って自作
 公式で入ったらしい<-今ここ
 自分で作ったほうがカスタマイズもできますし
…(白目)
必要な挙動は実現できるのか
 2Dでの描画
 SkiaSharpが最近出たので使ってみた
 とりあえず速いようだし必要な機能はあったの
で乗り換え。今のところ特に問題ない。
 ドキュメントがあまりないしググっても見つか
らない…
必要な挙動は実現できるのか
 回転制御
 ネイティブのAPIを各プラットフォームで呼ぶ
 iOS側、OrientationをセットしてからMainPageを
リセット的なことしないと反映されない<-XFの
バグっぽい
 下のリンクのようなやつで対処
 https://forums.xamarin.com/discussion/42849/fix-
orientation-for-one-page-in-the-app-is-it-
possible-with-xamarin-forms
 http://forums.xamarin.com/discussion/comment/1
42012#Comment_142012
MVVM
 Xamarin.Formsで書くならMVVMで書きた
いですよね?
 ViewModelとModel書くならF#つかいたい
ですよね?
F#で書くと幸せ
 F#で書くと
 楽に
 バグも少なく
 そして楽しく
 ViewModelとModelを記述することが可能です。
Xamarinの中の人もF#好き
 CEOのミゲル氏もEvolveのキーノートでF#
愛を披露
Xamarinの中の人もF#好き
 ミゲル氏、redditにも降臨してF#愛を披露
 “I really enjoy F# personally.”
 “There is an interesting phenomenon happening at
Xamarin. Whenever one of our engineers starts working
with F#, they tend to embrace it and stay there.”
 https://www.reddit.com/r/programmerchat/comments/4dx
pcp/i_am_miguel_de_icaza_i_started_xamarin_mono_gnome
/
Xamarin開発でF#使う環境が整っ
てる
 C#と同等とまではいかないがF#にもだい
ぶ力を入れてる
 Xamarin Studio6.0でもF#向けの改善がい
ろいろ
 https://developer.xamarin.com/releases/studio/x
amarin.studio_6.0/xamarin.studio_6.0/#F_Enhanc
ements
Xamarin.FormsアプリもF#だけで
作れる
 PetzoldさんがF#だけでXFアプリ作る方法
解説
 http://www.charlespetzold.com/blog/2015/10/W
riting-Xamarin-Forms-Apps-in-FSharp.html
 Xamarin StudioだとF#のXamarin.Formsテ
ンプレートもある模様。VSはまだ?
C#とF#の混在
 …とはいえたぶんF#でXF全部作るのはツー
ルのサポートなど考えると手間かかりそう
な予感…
 どうせUI側はXAMLメインで書ければ薄い
層になりますし…
C#とF#の混在
 結論としてUI層はC#、
ViewModel・ModelはF#で書く
のが最も生産的
※個人の感想です
まとめ
 XFはまだバージョンアップも激しいが(バ
グにあたらなければ)挙動も安定してる
 見た目もよい感じにできるし実案件にも使
える(はず)
 差分だけRendererなどで吸収、その他は
コード共有することが可能
 ViewModel・ModelはF#で書くと幸せにな
れる
全体構造

Xamarin.forms実践投入してみて