Xamarin によるクロスプラットフォームモバイルアプリ開発

9,366 views

Published on

うずらインキュベータ - http://atnd.org/events/47898 で発表した資料です。

Published in: Technology
0 Comments
16 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
9,366
On SlideShare
0
From Embeds
0
Number of Embeds
3,665
Actions
Shares
0
Downloads
37
Comments
0
Likes
16
Embeds 0
No embeds

No notes for slide

Xamarin によるクロスプラットフォームモバイルアプリ開発

  1. 1. Xamarin による クロスプラットフォーム モバイルアプリ開発 2014.2.26 うずらインキュベータ #1 in Toyohashi, Aichi
  2. 2. 自己紹介 • Twitter: @amay077 • 位置情報エンジニア、
 モバイルアプリエンジニア、 etc • MapQuest.co.jp 
 → Cosmoroot,Inc(Nagoya) 2 Now Hot topics 地図, 位置情報, オープンデータ, C#, Android, iOS, Xamarin
  3. 3. クラウドサービスプロバイダ •        (ロジネビュラ) • •       (ジクウ) • • 千年先まで費用ゼロのクラウド型倉庫管理システム おもにココ担当 リアルタイムデータ収集プラットフォーム Nepula(ネプラ) • 基幹業務システム向けPaaS 3
  4. 4. ref http://blog.airs.co.jp/2010/12/06/hamackathon-20101204.html HexRinger developed at ハマッカソン #2 4
  5. 5. 続きは… 位置情報系Androidアプリケーションの開発 - Togetterまとめ しゃべPOI developed for OpenStreetMappers 5
  6. 6. ref シビックハックの広まりと地方エンジニアの躍進 ‒ MA9総括 ¦ finder 富士フォト with ふじのくにオープンデータ MashupAward9, アーバンデータチャレンジ東京2013 6
  7. 7. 本題 7
  8. 8. Xamarin とはなんぞや? • 「ざまりん」と読みます • .NET Framework のオープンソース実装である 「Mono」を作ってる人たちが作った企業の名前 • 及び、同社が提供するSDKやツールなどをひっ くるめた総称 8
  9. 9. ひとことで言えば .NET(C#)で、Android/iOS/Mac/ Window アプリを開発できるSDK 9
  10. 10. もうちょっと詳しく1 • Xamarin.iOS(旧MonoTouch)
 Xamarin.Android(旧MonoDroid)
 Xamarin.Mac(MonoMac) • 各プラットフォーム(PF)のMono実装
 +各PFのAPIの 薄い ラッパー • いずれもOSSではなく、有償のプロダクト (MonoMacはOSS、ただしGPL/LGPL) 10
  11. 11. もうちょっと詳しく2 • Xamarin Studio(旧MonoDevelop) • • • Win/Mac/Linux で動作するOSSな統合開発環境(IDE) モバイル開発以外でも使われる(ってか、そっちが主) Visual Studio アドイン • iOS/Android開発を実現するためのアドイン • Xamarin BUSINESSエディション以上が必要 11
  12. 12. 価格体系 ref https://store.xamarin.com/ 「/年/PF/開発者」である事に注意!(更新せずに使い続けてもOK) 学割あります(BUSINESS版が $99!!) 12
  13. 13. 使われてるの? 530,000 developers in worldwide ref http://xamarin.com/apps 13
  14. 14. 日本でも ref フェンリル株式会社 ¦ スマートフォンアプリ開発 実績 NHK 紅白 14
  15. 15. Microsoftと提携! ref http://xamarin.com/msdn • Portable Class Library が Xamarin.iOS, Xamarin.Android にも対応 • MSDNサブスクライバー向け特別価格
 Xamarin.iOS,Android BUSINESS版が30%OFF 15
  16. 16. Win+Visual Studio で作る? • iOS 開発の為に Mac が必要 • • iOS開発でUIデザイナ(Interface Builder)が使えない • • リモート接続してビルド&デバッグ Xamarin.Android には UIデザイナあります インストールや日本語入力が不安定との も ↓ Mac + Xamarin Studio での開発が 現在のベストプラクティス(個人の見解です) 16
  17. 17. Xamarin とは(もう一度) 各PFのMono実装
 +
 各PFのAPIの 薄い ラッパー 17
  18. 18. Xamarin.Android の実行モデル Android(標準) Xamarin.Android アプリケーション(Java) アプリケーション(C#) アプリケーションフレー ムワーク(Java) アプリケーションフレー JavaSE6 ムワーク(.NET) .NET4.5 BCL VM(Dalvik) Monoランタイム コアライブラリ群 コアライブラリ群 Linux カーネル Linux カーネル どちらも中間言語を ランタイムがJITコンパイルして実行 18
  19. 19. Xamarin.iOS の実行モデル iOS(標準) Xamarin.iOS アプリケーション(C#) CocoaTouch(.NET) アプリケーション(Objective-C) .NET4.5 BCL CocoaTouch CocoaTouch コアライブラリ群 コアライブラリ群 LLVMコンパイラ Mono AOTコンパイラ ARMマシン語 ARMマシン語 ARM ARM 実機 実機 19
  20. 20. 利点と欠点 • Xamarin.Android • • • ◎:Microsoftと仲が良い
 <GoogleはOracleと仲悪い(まだJava6)> △:Monoランタイムをアプリに含めるためサイズが 増加 Xamarin.iOS • ◎:ガベージコレクション、静的型付け • △:事前コンパイル(AOT)の為、使えない機能(動的 コード生成等)がある 20
  21. 21. 「薄いラッパ」である事の利点 • PFのバージョンアップに追従しやすい • 厚いラッパ(=共通API)では、複数PFで整合性を 取らないといけないので時間がかかる • PF固有の開発経験が活かせる • 潰しが利く(=PF固有の開発に戻りやすい) • 使い方が変わってしまう厚いラッパでは、戻る のは難しい 21
  22. 22. DEMO Xamarin.Android と iOS で HelloWorld 22
  23. 23. クロスプラット フォームで開発するには 23
  24. 24. どこが共通化できるの?1 共通化できるところ
 (基本ライブラリ相当機能) 共通化できないところ
 (PF固有の機能) • 基本データ型、計算処理 • 画面 • 通信処理 • センサー系(GPS、加速度等) • ストリームI/O • カメラやアドレス帳 • 非同期処理 • アプリ間連携 24
  25. 25. どこが共通化できるの?2 PCL(Portable Class Library) アプリ(C#) アプリケーションフレー ムワーク(.NET) ここは共通化できる .NET4.5 BCL .NET4.5 BCL Monoランタイム アプリ(C#) _ CocoaTouch (.NET) CocoaTouch Androidコアライブラリ群 iOSコアライブラリ群 Xamarin.Android Xamarin.iOS 25
  26. 26. そして PCL へ • PF間で共有できる「ポータブ ル」なクラスライブラリ • 実際には、対応PFセット毎にプ ロファイルが定義されている • Xamarin.Android/iOS も対応 WPF/Win8/Android/iOS に1ソース (というか1バイナリ)で対応できる 26
  27. 27. DEMO PCL をつくって Xamarin.Android と iOS から使ってみる 27
  28. 28. 既存資産の活用1 • Xamarin.Android Java Binding • • • Java ライブラリ(.jar)を利用可 .NET API は .jar から自動生成+カスタマイズ Xamarin.iOS Obj-C Binding • Obj-C の Static Library(.a)を利用可 • .NET API を自分で定義する必要あり • 補助ツール - Objective Sharpie • Java Binding より結構大変 28
  29. 29. 既存資産の活用2 • 既存の.NET資産もある程度 使える(PCLでなくても) • .NET Mobility Scanner で どの程度利用できるか調べ る事ができる • http:// scan.xamarin.com/ 29
  30. 30. 既存資産の活用3 • Xamarin Components • • Xamarinで利用できるライブラリのマーケット Nuget • • • .NET 向けのパッケージマネージャ 画面に依存しないライブラリなら使えるかも CodePlex, Githubなど • ライブラリが対応してなかったらコードを入手して Xamarin用にビルドという手も 30
  31. 31. 他のクロスプラット フォーム開発ツールとの比較 Titanium / PhoneGap / Adobe AIR / Delphi XE 31
  32. 32. Xamarin(おさらい) 言語 実行形式 共通化可能 C#(.NET) Android:JIT iOS:AOT 基本ライブラリ相当機能 (計算処理、通信処理、非同期処理など) 共通化不可能 PF固有の機能(UI, センサーなど) PF固有機能 呼び出し PF毎のAPIを呼び出し可能 32
  33. 33. Titanium Mobile 言語 JavaScript 実行形式 インタプリタ 共通化可能 共通化不可能 PF固有機能 呼び出し コアロジック、GPS など
 共通APIが用意されている機能、 Label, EditBoxなど簡素なUI PF固有のUIパーツ(CoverFlowView等) コアロジックでもPF依存が多いとの Module を作成 33
  34. 34. PhoneGap/Sencha Touch 言語 HTML5+CSS+JavaScript 実行形式 WebView上で動作するWebアプリ 共通化可能 Webアプリなので一見は共通。 共通APIが用意される一般的な機能 共通化不可能 ブラウザ依存は少なくない 共通APIが無い機能 PF固有機能 呼び出し Plugin を作成 34
  35. 35. Adobe AIR for モバイル 言語 実行形式 共通化可能 共通化不可能 PF固有機能 呼び出し ActionScript Android:JIT iOS:AOT UI含め API が用意されていれば可能。 ただしUIは独自レンダリング 基本的には無いが、 その分機能が最小公倍数である Native Extensions を作成 35
  36. 36. Delphi XE 言語 実行形式 共通化可能 共通化不可能 PF固有機能 呼び出し Delphi Android:JIT(JNI) iOS:AOT UI含め API が用意されていれば可能。
 UIは独自レンダリングだが Pixel Perfect でPFのスタイルを忠実に再現。 PF毎のAPIもあり、 それを使った場合は共通化不可能 PF毎のAPIを呼び出し可能 36
  37. 37. Others • Qt Mobile • • RoboVM • • C++ で書けるなら最強じゃね?(書けるなら) Java → LLVM → Obj-C Unity, Corona • ゲーム向けっぽい 37
  38. 38. しかし Xamarin 最大の利点は 38
  39. 39. C# 39
  40. 40. C# is Cool!!! [Objective-C]! 01 [button1 addTarget:self action:@selector(onClick:)! 02 forControlEvents:UIControlEventTouchDown];! …! 5 Lines 03 -(void)onClick:(UIButton*)button{! 04 NSLog(@“Hello”);! 05 }! ! [Java]! 01 button1.setOnClickListener(new OnClickListener() {! 02 @Override! 03 public void onClick(View view) {! 04 05 6 Lines Log.d(TAG, “Hello”);! }! 06 });! ! [C#]! 01 button1.Click += (s, e) => Debug.WriteLine(“Hello”); ref https://xamarin.com/csharp 40 1 Line
  41. 41. LINQ 01.0∼9 の数値を! 02.偶数だけにして! 03.大きい順に並び替えて! 04.10倍にして! 05.出力する! ! [C#]! 01 new int[]{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }! 02 .Where(x => x % 2 == 0)! 03 .OrderByDescending(x => x)! 04 .Select(x => x * 10)! 05 .ToList().ForEach(x => Debug.WriteLine(x));! ! [Output]! > 80 60 40 20 0 41
  42. 42. async/await ワーカースレッドで時間のかかる処理をして、終わったらメインスレッドで結果を表示 [Java]! 01 int doHeavyWork() {! 02 return /* working... */;! 03 }! ! [C#]! 01 Task<int> DoHeavyWork() {! 02 return Task.Run<int>(() => {! 03 return /* working... */;! 04 });! 05 }! 04 private void onClick(View v) {! 05 new AsyncTask<Void, Void, Integer>() { ! ! 06 @Override! 06 async void onClick(object s, EventArgs e) {! 07 protected Integer doInBackground(Void... params) result = await DoHeavyWork();! 07 var {! 08 return doHeavyWork();! 08 label1.Text = "count = " + result;! 09 }! 09 }! ! 10 protected void onPostExecute(Integer result) {! 11 label1.Text = "count = " + result;! 12 };! 13 }.execute((Void)null);! 14 } 42
  43. 43. まとめ 43
  44. 44. まとめ • Mac + Xamarin Studio + Xamarin.Android + Xamarin.iOS で クロスPF 開発 • Win は、VS + Xamarin Addin で • PCL でコアロジックをクロスPFでバイナリ共有 • C# >>>>>>> Java, Objective-C 44
  45. 45. Links • Xamarin Developer Center - http://docs.xamarin.com/ • Xamarin日本語情報(XLSoft) - http://www.xlsoft.com/jp/products/xamarin/ • Qiita - http://qiita.com/tags/xamarin • はてなグループ - http://hatenablog.com/g/12921228815715432734 • Facebookグループ - https://www.facebook.com/groups/ 778386365523431/ • インサイドXamarin(Build Insider) - http://www.buildinsider.net/mobile/ insidexamarin • StackOverflow - http://stackoverflow.com/questions/tagged/monodroid +or+monotouch+or+xamarin?sort=active 45
  46. 46. Xamarin Advent Calendar 2013 ref http://qiita.com/advent-calendar/2013/xamarin 46
  47. 47. What's Next? • Xamarin Test Cloud • Xamarin Studio iOS UI designer • X-Platform MVVM Frameworks • MvvmCross / QuickCross / ReactiveUI / etc • Using Locations and Maps • Xamarin Evolve 2014 (Oct 6-10) 47
  48. 48. ありがとうございました

×