SlideShare a Scribd company logo
XamarinStudio勉強会 
2014/09/08 
田村孝文 
1
いいわけ 
• Xamarin弄り始めて1ヶ月未満の入門者です。 
• 楽しいので、みんなに知ってもらいたくなりました。 
• iOS側から見た話が多くなります。 
• Androidな皆様すみません。でもAndroid側から見ても似た 
ような状況だと思います。 
• 用語の間違いがあるかもしれません 
• 英単語の発音がおかしいと思います(田村の英語能力の不具合) 
2
今日の予定 
• クロスプラットフォーム開発としてのXamarin 30分 
• 概要の説明、メリット/デメリット 
• XamarinStudioを使ってみる 30分 
• いくつかデモ、技術キーワード紹介 
• おまけ:ハマった事、参考 
• 後で見てください。 
3
クロスプラットフォーム開発 
としてのXamarin 
4
クロスプラットフォーム(1) 
• 一つのソースで、いろいろなプラットフォーム 
で動くアプリケーションを開発する事 
• ここではスマフォ領域(iOS/Android/ 
WindowsPhone..)に限定します。 
• いくつか手法/プロダクトがありますが、方向 
性が違っています。 
5
クロスプラットフォーム(2) 
• すべてをHTML5 + JavaScript で実現(PhoneGap 
Titanium) 
• UIもビジネスロジックもHTML5+JavaScriptでがんば 
る 
• ネイティブのWebViewで動いている感じ 
• iOSもAndroidも1ソースで行けるけど、重くてUIの 
チューニングがやり難い 
6
クロスプラットフォーム(3) 
• すべてをRubyで実現(RubyMotion) 
• ライブラリ部分だけ共通化(mRubyやC++) 
• UIはネイティブ(Objective-C/Java)で書く 
• ゲームに特化 (Unity) 
7
Xamarinの方向性(1) 
• ソースを「共通部分」と「OS依存部分」に分離 
• 共通部分は.NET Frameworkの機能を活用 
• 通信、ローカルストレージ、イベント、等など 
• UIの共通パーツもある(Xamarin.Form) 
• OS依存部分は、SDKを薄く覆うラッパークラスが用意されている 
• iOSとAndroidのSDK部分は別々のソース(C#)を書く 
• SDKのアップデートに追従しやすく、UIのチューニングがしやすい 
8
Xamarinの方向性(2) 
• 共通部分/Android部分/iOS部分 に分けて管理 
9
Xamarinの方向性(3) 
• UIの考え方:2種類用意されている 
• OS依存部分 ネイティブUIの薄いラッパー 
• MonoTouch, MonoDroid 
• 共通部分 汎用UIパーツ 
• Xamarin.Form http://xamarin.com/forms 
• 2種類を組み合わせていくのが良さそう 
10
Xamarin.iOSの実行モデル 
• コアライブラリ郡のラッパー 
引用:http://www.slideshare.net/amay077/xamarin-201406 
11
Xamarin.Androidの実行モデル 
• コアライブラリ郡のラッパー 
引用:http://www.slideshare.net/amay077/xamarin-201406 
12
共通部分 
引用:http://www.slideshare.net/amay077/xamarin-201406 13
Xamarinのメリット(公式発表) 
• 平均75%のコードを共通化出来る 
• Xamarin.FormsというUIパーツを使うとほぼ100% 
共通化も可能 
• ネイティブ(Objective-C/Java)へのアクセスもサポー 
ト、ネイティブのSDKやUIにもアクセス可能 
• .NET/C#で全部作れる 
http://www.xlsoft.com/jp/products/xamarin/platform.html 
14
共通化:共通化できそうな処理 
• I/O関係、通信やファイル/DBアクセス 
• ファイルパスはOS毎に違うけど、操作は共通化 
• 非同期処理 
• データのモデル、ビジネスロジック 
• シンプルなUI 
15
共通化:OS毎になりそうな処理 
• センサー (GPSや傾き、光度etcetc..) 
• OS標準サービスへのアクセス 
• 電話帳やカメラや通知やetcetc.. 
• リッチなUI 
• 画面遷移やアニメーション、凝った画面 
16
Xamarinのデメリット(1) 
• 無料ライセンス(STARTER)だと、アプリのバイナリサイズに制限が入る、共通UIが使えない 
• 有料ライセンス(INDIE) 個人向け 25ドル/月 ※トライアル期間30日あり 
17 
https://store.xamarin.com
Xamarinのデメリット(2) 
• 情報の少なさ 
• 日本語だと検索してもあまりヒットしない、書 
籍が少ない、勉強会もほとんどない 
• 部分移行が出来ない 
• これは他のクロスプラットフォームでも同様 
• RubyMotionなら出来るらしい。 
18
Xamarinのデメリット(3) 
• 当然ネイティブ側SDKの知識が必要=学習コス 
トがすごい 
19
Xamarinのメリット(私的見解) 
• C#や.NETの世界、けっこう良い 
• LINQ、イベントの仕組み、非同期処理、 
ADO.NET、アクターの概念、Rx、等など 
• C#が他言語の良い所を取りこみ+GUIを作る 
のに便利な仕組みが準備されている。VBの便 
利さがちらほら見える。 
20
Xamarinのメリット(私的見解) 
• Objective-Cで書くよりも、短く簡単に書く仕 
組みが揃っていると思う。 
• OCamlから派生したF#(関数型言語)も使える 
• 個人的な本命 
• 関数型言語でアプリを書いたらどうなるのか? 
21
もしも導入するとしたら? 
• ◎まずは「プロトタイプ作成」で使って慣れる 
• ◎「新規アプリを作る」時に使う 
• まずは慣れてるOS(iOS/Android)の新規アプリを作る 
• その後に慣れていない方のOSのUI部分を作る 
• ◎「既存アプリの別OS版を作る」時に使う 
• リリース後にネイティブアプリもXamarinで置き換える 
• ×既存ネイティブアプリのVerUpで採用すると、無駄にハマりそう。 
• 部分移行(共通部分を作ってネイティブでアクセス)が出来ない 
22
導入事例 
• あまり見つからない(アプリが何で出来てるか公開はされ 
にくい) 
• NHK紅白歌合戦アプリ 
• http://qiita.com/amay077/items/ 
b7235aefab8d2e3b72f1 
• ルナルナ 体温ノート 
• http://www.xlsoft.com/jp/products/xamarin/apps.html 
23
質疑応答 
24
XamarinStudioを使ってみる 
25
XamarinStudioを使ってみる 
• XamarinStudioのインストールと初期画面 
• デモ:空プロジェクトを動かす 
• デモ:画面をStoryboardで作る 
• デモ:検索アプリ 
26
XamarinStudioのインストール 
• XamarinStudioはMac用 
• Windowsだと、VisualStudio + Xamarin.iOS for Visual Studio 
• iOSアプリを作る場合は、まずXcodeを入れておく。 
• MacのAppStoreからインストール 
• https://xamarin.com のDownload nowからダウンロード&インス 
トール 
• インストールは時間がかかるのでお茶でも飲んで待つ。 
27
XamarinStudioの初期画面 
• チュートリアルサンプルは”TaskList”がおすすめ。”T-shirt Store”は 
無料ライセンスだと実行出来ない(バイナリが大きすぎる) 
28
デモ:XamarinStudioの初期画面 
29
デモ:空プロジェクトを動かす(1/5) 
• C#→MobileApps→Blank App ソリューションを作成 
• iOSシミュレータで動かす 
• Android側は知識不足で出来てません。 
• ファイル構成の紹介 
• 共通部分、iOS部分、Android部分 
• アセンブリ = ライブラリのようなもの 
30
デモ:空プロジェクトを動かす(2/5) 
• プロジェクト構成は3つ 
• 共通部分 
• iOS部分 
• Android部分 
• 見慣れたファイル 
31
デモ:空プロジェクトを動かす(3/5) 
• アセンブリ≒ライブラリ 
• 使うライブラリは参照に 
入れる 
• ソース上でusingキーワー 
ドが必要 
• 扱いがJavaのjarファイル 
に良く似てる 
32
デモ:空プロジェクトを動かす(4/5) 
• iOSシミュレータで動かすには、「スタート 
アッププロジェクトに設定」が必要 
33
デモ:空プロジェクトを動かす(5/5) 
• ライセンスチェックが入るかもしれない 
34
デモ:空プロジェクトを動かす 
35
デモ:画面をStoryboardで作る(1/4) 
• ソリューションをC#→iPhone→SingleViewApplicationで作 
る 
• XXXViewController.cs と XXXViewController.design.cs 
• ボタンとテキストボックスを追加 
• プロパティの「name」を設定すると、design.csに変数 
が出来る 
• イベントの登録 
36
デモ:画面をStoryboardで作る(2/4) 
• Storyboard画面はXcodeとほぼ同じ 
37
デモ:画面をStoryboardで作る(3/4) 
• UIパーツを追加して、プロパティの「name」 
を設定すると、XXX.design.csに変数が出来る 
38
デモ:画面をStoryboardで作る(4/4) 
• イベントの登録、方法が2種類 
• StoryboardのUIパーツをダブルクリックで 
関数生成される 
• += でのイベント登録 
39
デモ:画面をStoryboardで作る 
40
デモ:知恵検索アプリ(1/5) 
• 検索ボックスでキーワードを入れ 
て、知恵検索する 
• 使った技術 
• Storyboardで画面作成 
• 非同期通信(async/await) 
• LINQ 
git https://github.com/taktamur/ChieSearch 
41
デモ:知恵検索アプリ(2/5) 
• async/await 非同期処理の為のC#仕様 
42
デモ:知恵検索アプリ(3/5) 
• await以降は、非同期処理が終わってから実行される 
43
デモ:知恵検索アプリ(4/5) 
• LINQ = 統合言語クエリ Language Integrated Query 
• .NETで、配列等のコレクションを扱う為の仕組み。 
SQL的な見た目 
• from ~~~ where~~~ select ~~~ 
• 各種データソース用のLINQが用意されている 
• データベース用、XML用、オブジェクト用、 
http://msdn.microsoft.com/ja-jp/library/bb308959.aspx 
44
デモ:知恵検索アプリ(5/5) 
• LINQ to XML 
• 「xmlDocumentにある”Question”の集合か 
ら、”Content”の値を集めて返す」 
45
デモ:知恵検索アプリ 
46
質疑応答 
47
おまけ 
48
ハマったらつぶやけ! 
• まだニッチなせいか、ハマってる事をTwitter 
につぶやくと、詳しい人が教えてくれるかも 
http://togetter.com/li/715991 
49
ハマったら記録を晒せ! 
• BlogやQiitaに記録を残しておくと、詳しい人 
が教えてくれるかも 
http://qiita.com/paming/items/682430866791dfba86e2 
50
ハマりポイント 
• 無料(starterライセンス)だとバイナリサイズに制限があ 
るが、チュートリアルのバイナリがでかくて動かない 
• チュートリアルのTシャツサンプルはアウト 
• Xamarinでの日本語入力があやしい時がある 
• 変換がうまく出来ない 
• 最新版では日本語入力できないかも? 
51
ハマりポイント 
• XamarinStudioそのものが固まる/メニューがグレー化 
• XamarinStudio再起動でOK、Xcodeもよく落ちる 
• iOSシミュレータもよく固まる 
• C#のイベント += と、iOSのDelegateを混ぜて使うとトラブルを起こ 
す事がある 
• Xamarinで遊ぶ(3) objcの「デリゲート」とC#の「イベント」が干 
渉する Xamarin.iOSでUITableViewの罠 / Xamarinの進化に望む事 
52
ハマりポイント 
• 同じ用語でも意味が違う 
• objcの「デリゲート」とC#の「デリゲート」は別物 
• 日本語の資料は古い事がある 
• 昔はXamarinでStoryboardを使えなかった→Xcode 
でデザインをやる、という記事が多いが、今は違う 
53
資料(1) 
• 配布サイト 
• http://xamarin.com/studio (本家) 
• http://www.xlsoft.com/jp/products/xamarin/studio.html (日本代理店?) 
• Build Inside 
• http://www.buildinsider.net/tagcloud?tag=Xamarin 
• CodeZine 
• http://codezine.jp/article/detail/7907 
• Qiita 
• Xamarin vs 他のクロスプラットフォーム開発ツール http://qiita.com/amay077/items/ 
01917ef1be3da9259348 等 
• 田村の記録 http://qiita.com/paming/items/1bb43f55033dc78eb0b9 
54
ご清聴ありがとうございました。 
55

More Related Content

XamarinStudio勉強会 2014/09/08