SlideShare a Scribd company logo
Xamarin の救世主 Unity!
2014/12/06(土) わんくま勉強会 東京 #93
@matatabi-ux
クロスプラットフォーム開発 × DI コンテナのすすめ
ゲーム開発ツール
じゃない方
お や く そ く
掲載内容は個人の私見であり、
所属組織の見解ではありません
自己紹介: 黒柳 達士(@matatabi-ux)
• お仕事
⁃ 某第二工場で Windows ストアアプリ大量生産中
⁃ 拝承系 SIer → 安心簡単快適デザイン会社 → 現職
• 個人活動
⁃ Blog: 「しっぽを追いかけて」 http://matatabi-ux.hateblo.jp
⁃ facebook: https://www.facebook.com/tatsuj.kuroyanagi
⁃ 日本人間工学会 認定人間工学専門家 UX 語れます
⁃ 飼い猫写真も垂れ流し中
twitter: https://twitter.com/burst_cafemocha
facebook: https://www.facebook.com/burst.cafemocha
しっぽもふもふの自宅警備ネコ 「モカ」
今回の目標とおことわり
• 目標
⁃ Xamarin でも使える強力な DI コンテナ Unity のご紹介
⁃ Xamarin のクロスプラットフォーム開発で DI コンテナの活用方法を提案
• 注意事項
⁃ ゲーム開発ツールの Unity じゃありません!一緒にしないで!
⁃ Xamarin は現在進行形で進化中なので仕様が大きく変わるかも
⁃ XAML をある程度知っている C# エンジニア視点でまとめました
⁃ Xamarin で使える Unity はプレリリース版
おしながき
• DI コンテナ Unity の概要
• Xamarin プロジェクトへの Unity 導入
• Xamarin × インスタンスの解決
• Xamarin × 依存関係の注入
• まとめ
※ この発表資料は SlideShare で公開します
http://www.slideshare.net/tatsujkuroyanagi/xamarin-unity
Unity DI コンテナ Unity の概要
DI コンテナ Unity の概要
ビジネスアプリ開発用 「依存関係注入」 コンテナライブラリ
⁃ Microsoft patterns & practices チームが進めているプロジェクト成果物のひとつ
⁃ 軽量で柔軟性の高い DI コンテナとその実践パターンを提供
⁃ Dependency Injection:依存関係注入とは実行時に外部からオブジェクトの振る舞いを決定する機能
Inversion of Control:制御の反転を
実現する有力な設計パターンのひとつ
Instance
Resolution
Life Time
Controll
Constructor
Injection
Property
Injection
Method
Injection
Service B
DI コンテナ Unity の概要
Service A
Client
Service B
DI Container
Client
Service A Service
Interface
インスタンス生成サービス実装の解決
依存関係の注入
サービス利用
サービス利用
通常の設計(制御側がサービス実装に依存する) 依存関係注入の設計(サービス実装が制御側により決定される)
Inversion of Control:制御の反転を実現する 「依存関係の注入」
⁃ クライアントクラスからサービスクラスを利用する場合、クライアント側がサービス側の変更に影響を受けてしまう
⁃ サービスクラスは共通インタフェースを実装して内部実装を隠ぺいする
⁃ DI コンテナがクライアントインスタンスを生成しサービスクラスを渡すことで制御を反転させる
DI コンテナ Unity の概要
DI コンテナ「Unity」が Xamarin の救世主となるワケ
⁃ C# の Xamarin 対応 PCL として提供されている DI コンテナ
⁃ もちろんライセンス形態は iOS、Android に利用できる Apache 2.0 ライセンス
⁃ Xamarin では各プラットフォームごとの処理記述が冗長になりやすい
⁃ Xamarin では共通コードに各プラットフォームごとの分岐処理が入り込みやすい
Instance
Resolution
Life Time
Controll
Constructor
Injection
Property
Injection
Method
Injection
DI コンテナ Unity の概要
DI コンテナ「Unity」が Xamarin の救世主となるワケ
⁃ 冗長な処理記述 → 抽出したインタフェース実装で共通機能に集約される
⁃ 共通コードに分岐処理が入り込む → 分岐処理は DI コンテナが肩代わり
⁃ 共通処理と固有処理が整理され、クラス間の依存性が下がる
iOS
PCL / Shared
Windows
クラス間が密結合で、共通コードが各プラットフォームに依存 制御が反転し、共通コードがプラットフォーム依存から分離される
Android
iOS
PCL / Shared
Windows
Androidコード
保守性
テスト
容易性
開発
生産性
コード
保守性
テスト
容易性
開発
生産性
Xamarin
×
Unity
Xamarin プロジェクトへの
Unity 導入
Xamarin プロジェクトへの Unity 導入
Shared プロジェクトの場合、共通
コードとプラットフォーム固有コードを
混在できるため
Xamarin プロジェクトの作成
⁃ Xamarin.Forms の PCL プロジェクトで作るのがおすすめ!
Xamarin プロジェクトへの Unity 導入
Unity パッケージのインストール
⁃ Visual Studio からソリューションを選び NuGet パッケージマネージャを開く
⁃ 検索対象を「リリース前のパッケージを含める」にする
⁃ 「Unity」 で検索して Unity 3.5.1405-prerelease 以降を選択してインストールする
忘れやすいので注意!
Visual Studio 2013 の場合 Visual Studio 2015 Preview の場合
DEMO
Xamarin プロジェクトへ
の Unity 導入
Xamarin
×
Resolver
Xamarin × インスタンスの
解決
var container = new UnityContainer();
container.RegisterType<ITextSpeechService, TextSpeechService>(
null, // 同一型で区別される登録名称(省略可能)
new ContainerControlledLifetimeManager(), // インスタンスの生存管理方法(省略可能)
new InjectionMember[], // 注入する依存関係設定(省略可能)
);
var service = container.ResolveType<ITextSpeechService>();
Xamarin × インスタンスの解決
インタフェースとインスタンスの
型を指定
Unity を利用したインスタンスの解決
⁃ 事前に RegisterType メソッドでクラスのインスタンス化時の振る舞いを登録
⁃ ResolveType メソッドで登録された内容に応じてインスタンスが取得できる
InjectionMember について
は後述
Xamarin × インスタンスの解決
指定できる LifetimeManager の種類
インスタンス共有範囲 インスタンスの生存期間
TransientLifetimeManager
※ 未指定時のデフォルト
共有なし(解決時に毎回生成) 生成後はコンテナには保持されない
PerThreadLifetimeManager スレッド内で共有 明示的に破棄するまで(強い参照)
ExternallyControlledLifetime
Manager
コンテナ内で共有
ガベージコレクションに回収されるまで
(弱い参照)
ContainerControlledLifetime
Manager
コンテナ内で共有 明示的に破棄するまで(強い参照)
DEMO
Xamarin × インスタンス
の解決
※このデモのソースコードは GitHub で公開中
https://github.com/matatabi-ux/XamarinUnityResolution
Xamarin
×
Injection
Xamarin × 依存関係の注入
Xamarin × 依存関係の注入
Unity で利用できる依存関係の注入機能(インスタンス生成時に注入)
⁃ コンストラクター注入 :Constructor Injection
利用するコンストラクタ、引数を変える ※ 引数に null は指定不可
既定で Unity で管理するクラスはインスタンス生成時にコンストラクター注入が自動で行われる
⁃ プロパティ注入 :Property Injection
生成されるインスタンスのプロパティ値を変える ※ 要 public Setter
⁃ メソッド呼び出し注入 :Method Call Injection
呼び出されるメソッド、引数を変える
コンストラクタ、プロパティで指定できない
private なメンバーの初期化には、メソッド
呼び出しの注入を利用するにゃ!
Xamarin × 依存関係の注入
Unity の依存関係の注入の構成手法
構成の方法 主な特徴
構成ファイル
※今回は詳しい説明割愛
app.config ファイルで依存関
係を指定
構成ごとの柔軟な設定が簡単
コードによって追えない
残念ながら Xamarin では利用不可
実行時に指定
初期化処理コードの中で、
コードにより指定
コードの初期化子で柔軟な指定が可能
インテリセンス、コードによる追跡ができる
属性付与による宣言
インスタンス化するサービス
クラスに属性を付与して宣言
静的な指定だがコード自動生成と相性がいい
インテリセンス、コードによる追跡ができる
サービスクラスを見ることで依存関係が見える
コンストラクター注入
⁃ 実行時の基本的な指定方法
⁃ 属性での宣言方法
new InjectionConstructor(typeof(ITextSpeechService), “Speech Message”)
Xamarin × 依存関係の注入
型か名称で、注入するパラメータ
のインスタンスを指定
[InjectionConstructor]
public PageViewModel(
ITextSpeechService textService,
[Dependency(“Speech Message”)] string message)
InjectionConstructor の属性が優先されて利用される
指定がなかった場合は一番パラメータ数が多いものが優先
属性を省略した場合は型での解決、
指定した場合は名称で解決されます
プロパティ注入
⁃ 実行時の基本的な指定方法
⁃ 属性での宣言方法
new InjectionProperty(“Text Service”), new InjectionProperty(“Message”, “Speech Message”),
new InjectionProperty(“Logger”, new ResolvedParameter(typeof(ILogger), “FileLogger"))
Xamarin × 依存関係の注入
[Dependency]
public ITextSpeechService TextService { get; set; }
[Dependency(“Speech Message”)]
public string Message { get; set; }
引数を省略した場合は型での解決、指定
した場合は型&名称で解決される
引数を省略した場合は型での解決、指定
した場合は名称で解決される
ResolvedParameter を指定することで型と
名称の組み合わせで解決することも
メソッド呼び出し注入
⁃ 実行時の基本的な指定方法
⁃ 属性での宣言方法
new InjectionMethod(“Initialize”, typeof(ITextSpeechService), “Speech Message”,
new ResolvedParameter(typeof(ILogger), “FileLogger"))
Xamarin × 依存関係の注入
型か名称で、注入するパラメータ
のインスタンスを指定
[InjectionMethod]
public void Initialize(
ITextSpeechService textService,
[Dependency(“Speech Message”)] string message)
InjectionMethod の属性が優先されて利用される
属性を省略した場合は型での解決、
指定した場合は名称で解決されます
ResolvedParameter を指定することで型と
名称の組み合わせで解決することも
DEMO Xamarin × 依存関係の注入
※このデモのソースコードは GitHub で公開中
https://github.com/matatabi-ux/XamarinUnityInjection
まとめ
• Xamarin でこそ Unity を使うべき!
⁃ クロスプラットフォーム開発はプラットフォーム固有処理が冗長でクラス間が密結合になりがち
⁃ DI コンテナを利用することで、影響範囲を狭めた改修とテストしやすい実装ができる
⁃ Xamarin で利用する DI コンテナは Unity がおすすめ!
• インスタンスの解決と依存関係の注入を使いこなそう
⁃ インスタンス解決と共有範囲と生存期間を設定できる
⁃ 利用できる注入の種類は、コンストラクタ、プロパティ、呼び出しメソッドの 3 種類
⁃ 注入構成の方法は、構成ファイル、実行時の指定、属性による宣言の 3 種類
iOS
PCL / Shared
Windows
Android
参考情報
• Microsoft patterns & practices - Unity プロジェクトページ
https://unity.codeplex.com/
• Unity 3 MSDN(英語)
http://msdn.microsoft.com/ja-jp/library/dn170416.aspx
• @IT – 新しいオブジェクト生成機構で EntLib はこう変わる!
http://www.atmarkit.co.jp/fdotnet/entlib/entlibv4/entlibv4_02.html
Instance
Resolution
Life Time
Controll
Constructor
Injection
Property
Injection
Method
Injection

More Related Content

What's hot

Xamarin 基礎講座
Xamarin 基礎講座Xamarin 基礎講座
Xamarin 基礎講座
Yoshito Tabuchi
 
Realm Mobile Platform 概要
Realm Mobile Platform 概要Realm Mobile Platform 概要
Realm Mobile Platform 概要
Yoshito Tabuchi
 
BlueMonkeyプロジェクトのご紹介
BlueMonkeyプロジェクトのご紹介BlueMonkeyプロジェクトのご紹介
BlueMonkeyプロジェクトのご紹介
Yoshito Tabuchi
 
Xamarinの歩き方
Xamarinの歩き方Xamarinの歩き方
Xamarinの歩き方
Yoshito Tabuchi
 
10分でわかる無料になったXamarin
10分でわかる無料になったXamarin10分でわかる無料になったXamarin
10分でわかる無料になったXamarin
Yoshito Tabuchi
 
Visual Studio + xamarin で始めるモバイル アプリ開発
Visual Studio + xamarin で始めるモバイル アプリ開発Visual Studio + xamarin で始めるモバイル アプリ開発
Visual Studio + xamarin で始めるモバイル アプリ開発
インフラジスティックス・ジャパン株式会社
 
ゆるふわ Xamarin Tips
ゆるふわ Xamarin Tipsゆるふわ Xamarin Tips
ゆるふわ Xamarin Tips
Daiki Kawanuma
 
Xamarin から使う Azure
Xamarin から使う AzureXamarin から使う Azure
Xamarin から使う Azure
Yoshito Tabuchi
 
Xamarin概要と活用方法
Xamarin概要と活用方法Xamarin概要と活用方法
Xamarin概要と活用方法
Yoshito Tabuchi
 
Xamarin概要
Xamarin概要Xamarin概要
Xamarin概要
Yoshito Tabuchi
 
[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~
[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~
[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~
de:code 2017
 
20171202 Xamarinの歩き方
20171202 Xamarinの歩き方20171202 Xamarinの歩き方
20171202 Xamarinの歩き方
Yoshito Tabuchi
 
NET Standard と Xamarin
NET Standard と XamarinNET Standard と Xamarin
NET Standard と Xamarin
Yoshito Tabuchi
 
Xamarin開発環境の選択
Xamarin開発環境の選択Xamarin開発環境の選択
Xamarin開発環境の選択
Miho Kurosawa
 
JXUGC 13 東京 はじめに
JXUGC 13 東京 はじめにJXUGC 13 東京 はじめに
JXUGC 13 東京 はじめに
Yoshito Tabuchi
 
#VSUG LT #JXUG の紹介
#VSUG LT #JXUG の紹介#VSUG LT #JXUG の紹介
#VSUG LT #JXUG の紹介
Yoshito Tabuchi
 
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
Yoshito Tabuchi
 
Win/Mac/Android/iOS向け クロスプラットフォーム開発にXamarinが うまくハマりそうだった話
Win/Mac/Android/iOS向けクロスプラットフォーム開発にXamarinがうまくハマりそうだった話Win/Mac/Android/iOS向けクロスプラットフォーム開発にXamarinがうまくハマりそうだった話
Win/Mac/Android/iOS向け クロスプラットフォーム開発にXamarinが うまくハマりそうだった話
Takuya Kikuchi
 
第1回 Japan Xamarin User Group Conference - Xamarin 概要
第1回 Japan Xamarin User Group Conference - Xamarin 概要第1回 Japan Xamarin User Group Conference - Xamarin 概要
第1回 Japan Xamarin User Group Conference - Xamarin 概要
Yoshito Tabuchi
 
わんくま名古屋 #38 (20160521) Xamarin入門
わんくま名古屋 #38 (20160521) Xamarin入門わんくま名古屋 #38 (20160521) Xamarin入門
わんくま名古屋 #38 (20160521) Xamarin入門
Yasuhiko Yamamoto
 

What's hot (20)

Xamarin 基礎講座
Xamarin 基礎講座Xamarin 基礎講座
Xamarin 基礎講座
 
Realm Mobile Platform 概要
Realm Mobile Platform 概要Realm Mobile Platform 概要
Realm Mobile Platform 概要
 
BlueMonkeyプロジェクトのご紹介
BlueMonkeyプロジェクトのご紹介BlueMonkeyプロジェクトのご紹介
BlueMonkeyプロジェクトのご紹介
 
Xamarinの歩き方
Xamarinの歩き方Xamarinの歩き方
Xamarinの歩き方
 
10分でわかる無料になったXamarin
10分でわかる無料になったXamarin10分でわかる無料になったXamarin
10分でわかる無料になったXamarin
 
Visual Studio + xamarin で始めるモバイル アプリ開発
Visual Studio + xamarin で始めるモバイル アプリ開発Visual Studio + xamarin で始めるモバイル アプリ開発
Visual Studio + xamarin で始めるモバイル アプリ開発
 
ゆるふわ Xamarin Tips
ゆるふわ Xamarin Tipsゆるふわ Xamarin Tips
ゆるふわ Xamarin Tips
 
Xamarin から使う Azure
Xamarin から使う AzureXamarin から使う Azure
Xamarin から使う Azure
 
Xamarin概要と活用方法
Xamarin概要と活用方法Xamarin概要と活用方法
Xamarin概要と活用方法
 
Xamarin概要
Xamarin概要Xamarin概要
Xamarin概要
 
[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~
[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~
[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~
 
20171202 Xamarinの歩き方
20171202 Xamarinの歩き方20171202 Xamarinの歩き方
20171202 Xamarinの歩き方
 
NET Standard と Xamarin
NET Standard と XamarinNET Standard と Xamarin
NET Standard と Xamarin
 
Xamarin開発環境の選択
Xamarin開発環境の選択Xamarin開発環境の選択
Xamarin開発環境の選択
 
JXUGC 13 東京 はじめに
JXUGC 13 東京 はじめにJXUGC 13 東京 はじめに
JXUGC 13 東京 はじめに
 
#VSUG LT #JXUG の紹介
#VSUG LT #JXUG の紹介#VSUG LT #JXUG の紹介
#VSUG LT #JXUG の紹介
 
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
 
Win/Mac/Android/iOS向け クロスプラットフォーム開発にXamarinが うまくハマりそうだった話
Win/Mac/Android/iOS向けクロスプラットフォーム開発にXamarinがうまくハマりそうだった話Win/Mac/Android/iOS向けクロスプラットフォーム開発にXamarinがうまくハマりそうだった話
Win/Mac/Android/iOS向け クロスプラットフォーム開発にXamarinが うまくハマりそうだった話
 
第1回 Japan Xamarin User Group Conference - Xamarin 概要
第1回 Japan Xamarin User Group Conference - Xamarin 概要第1回 Japan Xamarin User Group Conference - Xamarin 概要
第1回 Japan Xamarin User Group Conference - Xamarin 概要
 
わんくま名古屋 #38 (20160521) Xamarin入門
わんくま名古屋 #38 (20160521) Xamarin入門わんくま名古屋 #38 (20160521) Xamarin入門
わんくま名古屋 #38 (20160521) Xamarin入門
 

Viewers also liked

Diってなんだ
DiってなんだDiってなんだ
Diってなんだ
Fits696
 
XamarinStudio勉強会 2014/09/08
XamarinStudio勉強会 2014/09/08XamarinStudio勉強会 2014/09/08
XamarinStudio勉強会 2014/09/08
孝文 田村
 
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソースEnpel
 
Black jumbodogの新機能(webapi)~自動テストにおけるsmtpモックとして
Black jumbodogの新機能(webapi)~自動テストにおけるsmtpモックとしてBlack jumbodogの新機能(webapi)~自動テストにおけるsmtpモックとして
Black jumbodogの新機能(webapi)~自動テストにおけるsmtpモックとしてShinichi Hirauchi
 
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
ShinichiAoyagi
 
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッションEnpel
 
Visual Studio Tools for Unity
Visual Studio Tools for UnityVisual Studio Tools for Unity
Visual Studio Tools for Unity
友太 渡辺
 
2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定
2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定
2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定Enpel
 
シルバーウィークにfacebookアプリを作成した
シルバーウィークにfacebookアプリを作成したシルバーウィークにfacebookアプリを作成した
シルバーウィークにfacebookアプリを作成した
Shinichi Hirauchi
 
Unity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてUnity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてTatsuhiko Yamamura
 
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
Yoshito Tabuchi
 
DI(依存性注入)について
DI(依存性注入)についてDI(依存性注入)について
DI(依存性注入)について
Yui Ito
 
Xamarin.forms実践投入してみて
Xamarin.forms実践投入してみてXamarin.forms実践投入してみて
Xamarin.forms実践投入してみて
Masahiko Miyasaka
 
Xamarin ~ iOS/Android/Windows アプリを C# で作ろう~
Xamarin ~ iOS/Android/Windows アプリをC# で作ろう~Xamarin ~ iOS/Android/Windows アプリをC# で作ろう~
Xamarin ~ iOS/Android/Windows アプリを C# で作ろう~
Fujio Kojima
 
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaTomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Norito Agetsuma
 
Xamarin によるクロスプラットフォームモバイルアプリ開発
Xamarin によるクロスプラットフォームモバイルアプリ開発Xamarin によるクロスプラットフォームモバイルアプリ開発
Xamarin によるクロスプラットフォームモバイルアプリ開発
Hironov OKUYAMA
 
Xamarin 実戦投入時に気をつけたいことあれこれ
Xamarin 実戦投入時に気をつけたいことあれこれXamarin 実戦投入時に気をつけたいことあれこれ
Xamarin 実戦投入時に気をつけたいことあれこれ
Tomohiro Suzuki
 
がんばれガンプ ソルバルウを倒せ
がんばれガンプ ソルバルウを倒せがんばれガンプ ソルバルウを倒せ
がんばれガンプ ソルバルウを倒せ
Tomohiro Suzuki
 

Viewers also liked (20)

Diってなんだ
DiってなんだDiってなんだ
Diってなんだ
 
Di入門
Di入門Di入門
Di入門
 
XamarinStudio勉強会 2014/09/08
XamarinStudio勉強会 2014/09/08XamarinStudio勉強会 2014/09/08
XamarinStudio勉強会 2014/09/08
 
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース
 
Black jumbodogの新機能(webapi)~自動テストにおけるsmtpモックとして
Black jumbodogの新機能(webapi)~自動テストにおけるsmtpモックとしてBlack jumbodogの新機能(webapi)~自動テストにおけるsmtpモックとして
Black jumbodogの新機能(webapi)~自動テストにおけるsmtpモックとして
 
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
 
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション
 
Visual Studio Tools for Unity
Visual Studio Tools for UnityVisual Studio Tools for Unity
Visual Studio Tools for Unity
 
2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定
2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定
2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定
 
シルバーウィークにfacebookアプリを作成した
シルバーウィークにfacebookアプリを作成したシルバーウィークにfacebookアプリを作成した
シルバーウィークにfacebookアプリを作成した
 
Unity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてUnity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成について
 
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
 
DI(依存性注入)について
DI(依存性注入)についてDI(依存性注入)について
DI(依存性注入)について
 
Xamarin.forms実践投入してみて
Xamarin.forms実践投入してみてXamarin.forms実践投入してみて
Xamarin.forms実践投入してみて
 
Xamarin ~ iOS/Android/Windows アプリを C# で作ろう~
Xamarin ~ iOS/Android/Windows アプリをC# で作ろう~Xamarin ~ iOS/Android/Windows アプリをC# で作ろう~
Xamarin ~ iOS/Android/Windows アプリを C# で作ろう~
 
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaTomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
 
Xamarin によるクロスプラットフォームモバイルアプリ開発
Xamarin によるクロスプラットフォームモバイルアプリ開発Xamarin によるクロスプラットフォームモバイルアプリ開発
Xamarin によるクロスプラットフォームモバイルアプリ開発
 
C#とaop
C#とaopC#とaop
C#とaop
 
Xamarin 実戦投入時に気をつけたいことあれこれ
Xamarin 実戦投入時に気をつけたいことあれこれXamarin 実戦投入時に気をつけたいことあれこれ
Xamarin 実戦投入時に気をつけたいことあれこれ
 
がんばれガンプ ソルバルウを倒せ
がんばれガンプ ソルバルウを倒せがんばれガンプ ソルバルウを倒せ
がんばれガンプ ソルバルウを倒せ
 

Similar to Xamarin の救世主 Unity !

モバイルアプリの状態遷移を攻略したい!
モバイルアプリの状態遷移を攻略したい!モバイルアプリの状態遷移を攻略したい!
モバイルアプリの状態遷移を攻略したい!
Tatsuji Kuroyanagi
 
.NET Standard で SQLServer と接続してみた
.NET Standard で SQLServer と接続してみた.NET Standard で SQLServer と接続してみた
.NET Standard で SQLServer と接続してみた
m ishizaki
 
わんくま名古屋 #40 (20161217) Xamarinで自動化テストしよう
わんくま名古屋 #40 (20161217) Xamarinで自動化テストしようわんくま名古屋 #40 (20161217) Xamarinで自動化テストしよう
わんくま名古屋 #40 (20161217) Xamarinで自動化テストしよう
Yasuhiko Yamamoto
 
名古屋SoftLayer x Bluemix Meetup
名古屋SoftLayer x Bluemix Meetup名古屋SoftLayer x Bluemix Meetup
名古屋SoftLayer x Bluemix Meetup
Kazumasa Sasazawa
 
【Unity道場スペシャル 2017京都】〜ブラウザアプリ・ネイティブアプリの複数プラットフォームのゲーム開発の現場〜
【Unity道場スペシャル 2017京都】〜ブラウザアプリ・ネイティブアプリの複数プラットフォームのゲーム開発の現場〜【Unity道場スペシャル 2017京都】〜ブラウザアプリ・ネイティブアプリの複数プラットフォームのゲーム開発の現場〜
【Unity道場スペシャル 2017京都】〜ブラウザアプリ・ネイティブアプリの複数プラットフォームのゲーム開発の現場〜
Unity Technologies Japan K.K.
 
レスポンシブ対応 をサポートするプラグイン
レスポンシブ対応 をサポートするプラグインレスポンシブ対応 をサポートするプラグイン
レスポンシブ対応 をサポートするプラグイン
Kawaji Masaki
 
Xamarin を使うとどんなことができるの?
Xamarin を使うとどんなことができるの?Xamarin を使うとどんなことができるの?
Xamarin を使うとどんなことができるの?
Yoshito Tabuchi
 
作られては消えていく泡のように儚いクラスタの運用話
作られては消えていく泡のように儚いクラスタの運用話作られては消えていく泡のように儚いクラスタの運用話
作られては消えていく泡のように儚いクラスタの運用話
Tsuyoshi Torii
 
xR Developerなら知っておきたいカメラの基礎知識
xR Developerなら知っておきたいカメラの基礎知識xR Developerなら知っておきたいカメラの基礎知識
xR Developerなら知っておきたいカメラの基礎知識
Satoshi Maemoto
 
Visual Studio App Centerの始め方
Visual Studio App Centerの始め方Visual Studio App Centerの始め方
Visual Studio App Centerの始め方
Shinya Nakajima
 
Xamarin 20141212 モバイルカフェスペシャル 「C#で作るiOS/Androidのクロスプラットフォームスマホアプリ開発」
Xamarin 20141212 モバイルカフェスペシャル 「C#で作るiOS/Androidのクロスプラットフォームスマホアプリ開発」Xamarin 20141212 モバイルカフェスペシャル 「C#で作るiOS/Androidのクロスプラットフォームスマホアプリ開発」
Xamarin 20141212 モバイルカフェスペシャル 「C#で作るiOS/Androidのクロスプラットフォームスマホアプリ開発」
Yoshito Tabuchi
 
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternApplication Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternAtsushi Kambara
 
AppCenter
AppCenterAppCenter
AppCenter
Satoru Fujimori
 
DataTable
DataTableDataTable
DataTable
m ishizaki
 
Visual Studio App Center Authの導入方法について
Visual Studio App CenterAuthの導入方法についてVisual Studio App CenterAuthの導入方法について
Visual Studio App Center Authの導入方法について
Shinya Nakajima
 
Comcamp 2016 Okayama VSTS
Comcamp 2016 Okayama VSTSComcamp 2016 Okayama VSTS
Comcamp 2016 Okayama VSTS
sady_nitro
 
Visual Studio App Centerで始めるCI/CD
Visual Studio App Centerで始めるCI/CDVisual Studio App Centerで始めるCI/CD
Visual Studio App Centerで始めるCI/CD
Shinya Nakajima
 
作るツールから支えるツールへ - Movable Typeと外部システムの連携事例 -
作るツールから支えるツールへ - Movable Typeと外部システムの連携事例 -作るツールから支えるツールへ - Movable Typeと外部システムの連携事例 -
作るツールから支えるツールへ - Movable Typeと外部システムの連携事例 -
Yasufumi Nishiyama
 
Computer Vision と Translator Text API 使ってみた
Computer Vision と Translator Text API 使ってみたComputer Vision と Translator Text API 使ってみた
Computer Vision と Translator Text API 使ってみた
Yoshito Tabuchi
 
【第1回EMS勉強会】Autopilot設計時のポイント
【第1回EMS勉強会】Autopilot設計時のポイント【第1回EMS勉強会】Autopilot設計時のポイント
【第1回EMS勉強会】Autopilot設計時のポイント
yokimura
 

Similar to Xamarin の救世主 Unity ! (20)

モバイルアプリの状態遷移を攻略したい!
モバイルアプリの状態遷移を攻略したい!モバイルアプリの状態遷移を攻略したい!
モバイルアプリの状態遷移を攻略したい!
 
.NET Standard で SQLServer と接続してみた
.NET Standard で SQLServer と接続してみた.NET Standard で SQLServer と接続してみた
.NET Standard で SQLServer と接続してみた
 
わんくま名古屋 #40 (20161217) Xamarinで自動化テストしよう
わんくま名古屋 #40 (20161217) Xamarinで自動化テストしようわんくま名古屋 #40 (20161217) Xamarinで自動化テストしよう
わんくま名古屋 #40 (20161217) Xamarinで自動化テストしよう
 
名古屋SoftLayer x Bluemix Meetup
名古屋SoftLayer x Bluemix Meetup名古屋SoftLayer x Bluemix Meetup
名古屋SoftLayer x Bluemix Meetup
 
【Unity道場スペシャル 2017京都】〜ブラウザアプリ・ネイティブアプリの複数プラットフォームのゲーム開発の現場〜
【Unity道場スペシャル 2017京都】〜ブラウザアプリ・ネイティブアプリの複数プラットフォームのゲーム開発の現場〜【Unity道場スペシャル 2017京都】〜ブラウザアプリ・ネイティブアプリの複数プラットフォームのゲーム開発の現場〜
【Unity道場スペシャル 2017京都】〜ブラウザアプリ・ネイティブアプリの複数プラットフォームのゲーム開発の現場〜
 
レスポンシブ対応 をサポートするプラグイン
レスポンシブ対応 をサポートするプラグインレスポンシブ対応 をサポートするプラグイン
レスポンシブ対応 をサポートするプラグイン
 
Xamarin を使うとどんなことができるの?
Xamarin を使うとどんなことができるの?Xamarin を使うとどんなことができるの?
Xamarin を使うとどんなことができるの?
 
作られては消えていく泡のように儚いクラスタの運用話
作られては消えていく泡のように儚いクラスタの運用話作られては消えていく泡のように儚いクラスタの運用話
作られては消えていく泡のように儚いクラスタの運用話
 
xR Developerなら知っておきたいカメラの基礎知識
xR Developerなら知っておきたいカメラの基礎知識xR Developerなら知っておきたいカメラの基礎知識
xR Developerなら知っておきたいカメラの基礎知識
 
Visual Studio App Centerの始め方
Visual Studio App Centerの始め方Visual Studio App Centerの始め方
Visual Studio App Centerの始め方
 
Xamarin 20141212 モバイルカフェスペシャル 「C#で作るiOS/Androidのクロスプラットフォームスマホアプリ開発」
Xamarin 20141212 モバイルカフェスペシャル 「C#で作るiOS/Androidのクロスプラットフォームスマホアプリ開発」Xamarin 20141212 モバイルカフェスペシャル 「C#で作るiOS/Androidのクロスプラットフォームスマホアプリ開発」
Xamarin 20141212 モバイルカフェスペシャル 「C#で作るiOS/Androidのクロスプラットフォームスマホアプリ開発」
 
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternApplication Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD Pattern
 
AppCenter
AppCenterAppCenter
AppCenter
 
DataTable
DataTableDataTable
DataTable
 
Visual Studio App Center Authの導入方法について
Visual Studio App CenterAuthの導入方法についてVisual Studio App CenterAuthの導入方法について
Visual Studio App Center Authの導入方法について
 
Comcamp 2016 Okayama VSTS
Comcamp 2016 Okayama VSTSComcamp 2016 Okayama VSTS
Comcamp 2016 Okayama VSTS
 
Visual Studio App Centerで始めるCI/CD
Visual Studio App Centerで始めるCI/CDVisual Studio App Centerで始めるCI/CD
Visual Studio App Centerで始めるCI/CD
 
作るツールから支えるツールへ - Movable Typeと外部システムの連携事例 -
作るツールから支えるツールへ - Movable Typeと外部システムの連携事例 -作るツールから支えるツールへ - Movable Typeと外部システムの連携事例 -
作るツールから支えるツールへ - Movable Typeと外部システムの連携事例 -
 
Computer Vision と Translator Text API 使ってみた
Computer Vision と Translator Text API 使ってみたComputer Vision と Translator Text API 使ってみた
Computer Vision と Translator Text API 使ってみた
 
【第1回EMS勉強会】Autopilot設計時のポイント
【第1回EMS勉強会】Autopilot設計時のポイント【第1回EMS勉強会】Autopilot設計時のポイント
【第1回EMS勉強会】Autopilot設計時のポイント
 

Recently uploaded

YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 

Recently uploaded (16)

YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 

Xamarin の救世主 Unity !

  • 1. Xamarin の救世主 Unity! 2014/12/06(土) わんくま勉強会 東京 #93 @matatabi-ux クロスプラットフォーム開発 × DI コンテナのすすめ ゲーム開発ツール じゃない方
  • 2. お や く そ く 掲載内容は個人の私見であり、 所属組織の見解ではありません
  • 3. 自己紹介: 黒柳 達士(@matatabi-ux) • お仕事 ⁃ 某第二工場で Windows ストアアプリ大量生産中 ⁃ 拝承系 SIer → 安心簡単快適デザイン会社 → 現職 • 個人活動 ⁃ Blog: 「しっぽを追いかけて」 http://matatabi-ux.hateblo.jp ⁃ facebook: https://www.facebook.com/tatsuj.kuroyanagi ⁃ 日本人間工学会 認定人間工学専門家 UX 語れます ⁃ 飼い猫写真も垂れ流し中 twitter: https://twitter.com/burst_cafemocha facebook: https://www.facebook.com/burst.cafemocha しっぽもふもふの自宅警備ネコ 「モカ」
  • 4. 今回の目標とおことわり • 目標 ⁃ Xamarin でも使える強力な DI コンテナ Unity のご紹介 ⁃ Xamarin のクロスプラットフォーム開発で DI コンテナの活用方法を提案 • 注意事項 ⁃ ゲーム開発ツールの Unity じゃありません!一緒にしないで! ⁃ Xamarin は現在進行形で進化中なので仕様が大きく変わるかも ⁃ XAML をある程度知っている C# エンジニア視点でまとめました ⁃ Xamarin で使える Unity はプレリリース版
  • 5. おしながき • DI コンテナ Unity の概要 • Xamarin プロジェクトへの Unity 導入 • Xamarin × インスタンスの解決 • Xamarin × 依存関係の注入 • まとめ ※ この発表資料は SlideShare で公開します http://www.slideshare.net/tatsujkuroyanagi/xamarin-unity
  • 6. Unity DI コンテナ Unity の概要
  • 7. DI コンテナ Unity の概要 ビジネスアプリ開発用 「依存関係注入」 コンテナライブラリ ⁃ Microsoft patterns & practices チームが進めているプロジェクト成果物のひとつ ⁃ 軽量で柔軟性の高い DI コンテナとその実践パターンを提供 ⁃ Dependency Injection:依存関係注入とは実行時に外部からオブジェクトの振る舞いを決定する機能 Inversion of Control:制御の反転を 実現する有力な設計パターンのひとつ Instance Resolution Life Time Controll Constructor Injection Property Injection Method Injection
  • 8. Service B DI コンテナ Unity の概要 Service A Client Service B DI Container Client Service A Service Interface インスタンス生成サービス実装の解決 依存関係の注入 サービス利用 サービス利用 通常の設計(制御側がサービス実装に依存する) 依存関係注入の設計(サービス実装が制御側により決定される) Inversion of Control:制御の反転を実現する 「依存関係の注入」 ⁃ クライアントクラスからサービスクラスを利用する場合、クライアント側がサービス側の変更に影響を受けてしまう ⁃ サービスクラスは共通インタフェースを実装して内部実装を隠ぺいする ⁃ DI コンテナがクライアントインスタンスを生成しサービスクラスを渡すことで制御を反転させる
  • 9. DI コンテナ Unity の概要 DI コンテナ「Unity」が Xamarin の救世主となるワケ ⁃ C# の Xamarin 対応 PCL として提供されている DI コンテナ ⁃ もちろんライセンス形態は iOS、Android に利用できる Apache 2.0 ライセンス ⁃ Xamarin では各プラットフォームごとの処理記述が冗長になりやすい ⁃ Xamarin では共通コードに各プラットフォームごとの分岐処理が入り込みやすい Instance Resolution Life Time Controll Constructor Injection Property Injection Method Injection
  • 10. DI コンテナ Unity の概要 DI コンテナ「Unity」が Xamarin の救世主となるワケ ⁃ 冗長な処理記述 → 抽出したインタフェース実装で共通機能に集約される ⁃ 共通コードに分岐処理が入り込む → 分岐処理は DI コンテナが肩代わり ⁃ 共通処理と固有処理が整理され、クラス間の依存性が下がる iOS PCL / Shared Windows クラス間が密結合で、共通コードが各プラットフォームに依存 制御が反転し、共通コードがプラットフォーム依存から分離される Android iOS PCL / Shared Windows Androidコード 保守性 テスト 容易性 開発 生産性 コード 保守性 テスト 容易性 開発 生産性
  • 12. Xamarin プロジェクトへの Unity 導入 Shared プロジェクトの場合、共通 コードとプラットフォーム固有コードを 混在できるため Xamarin プロジェクトの作成 ⁃ Xamarin.Forms の PCL プロジェクトで作るのがおすすめ!
  • 13. Xamarin プロジェクトへの Unity 導入 Unity パッケージのインストール ⁃ Visual Studio からソリューションを選び NuGet パッケージマネージャを開く ⁃ 検索対象を「リリース前のパッケージを含める」にする ⁃ 「Unity」 で検索して Unity 3.5.1405-prerelease 以降を選択してインストールする 忘れやすいので注意! Visual Studio 2013 の場合 Visual Studio 2015 Preview の場合
  • 16. var container = new UnityContainer(); container.RegisterType<ITextSpeechService, TextSpeechService>( null, // 同一型で区別される登録名称(省略可能) new ContainerControlledLifetimeManager(), // インスタンスの生存管理方法(省略可能) new InjectionMember[], // 注入する依存関係設定(省略可能) ); var service = container.ResolveType<ITextSpeechService>(); Xamarin × インスタンスの解決 インタフェースとインスタンスの 型を指定 Unity を利用したインスタンスの解決 ⁃ 事前に RegisterType メソッドでクラスのインスタンス化時の振る舞いを登録 ⁃ ResolveType メソッドで登録された内容に応じてインスタンスが取得できる InjectionMember について は後述
  • 17. Xamarin × インスタンスの解決 指定できる LifetimeManager の種類 インスタンス共有範囲 インスタンスの生存期間 TransientLifetimeManager ※ 未指定時のデフォルト 共有なし(解決時に毎回生成) 生成後はコンテナには保持されない PerThreadLifetimeManager スレッド内で共有 明示的に破棄するまで(強い参照) ExternallyControlledLifetime Manager コンテナ内で共有 ガベージコレクションに回収されるまで (弱い参照) ContainerControlledLifetime Manager コンテナ内で共有 明示的に破棄するまで(強い参照)
  • 18. DEMO Xamarin × インスタンス の解決 ※このデモのソースコードは GitHub で公開中 https://github.com/matatabi-ux/XamarinUnityResolution
  • 20. Xamarin × 依存関係の注入 Unity で利用できる依存関係の注入機能(インスタンス生成時に注入) ⁃ コンストラクター注入 :Constructor Injection 利用するコンストラクタ、引数を変える ※ 引数に null は指定不可 既定で Unity で管理するクラスはインスタンス生成時にコンストラクター注入が自動で行われる ⁃ プロパティ注入 :Property Injection 生成されるインスタンスのプロパティ値を変える ※ 要 public Setter ⁃ メソッド呼び出し注入 :Method Call Injection 呼び出されるメソッド、引数を変える コンストラクタ、プロパティで指定できない private なメンバーの初期化には、メソッド 呼び出しの注入を利用するにゃ!
  • 21. Xamarin × 依存関係の注入 Unity の依存関係の注入の構成手法 構成の方法 主な特徴 構成ファイル ※今回は詳しい説明割愛 app.config ファイルで依存関 係を指定 構成ごとの柔軟な設定が簡単 コードによって追えない 残念ながら Xamarin では利用不可 実行時に指定 初期化処理コードの中で、 コードにより指定 コードの初期化子で柔軟な指定が可能 インテリセンス、コードによる追跡ができる 属性付与による宣言 インスタンス化するサービス クラスに属性を付与して宣言 静的な指定だがコード自動生成と相性がいい インテリセンス、コードによる追跡ができる サービスクラスを見ることで依存関係が見える
  • 22. コンストラクター注入 ⁃ 実行時の基本的な指定方法 ⁃ 属性での宣言方法 new InjectionConstructor(typeof(ITextSpeechService), “Speech Message”) Xamarin × 依存関係の注入 型か名称で、注入するパラメータ のインスタンスを指定 [InjectionConstructor] public PageViewModel( ITextSpeechService textService, [Dependency(“Speech Message”)] string message) InjectionConstructor の属性が優先されて利用される 指定がなかった場合は一番パラメータ数が多いものが優先 属性を省略した場合は型での解決、 指定した場合は名称で解決されます
  • 23. プロパティ注入 ⁃ 実行時の基本的な指定方法 ⁃ 属性での宣言方法 new InjectionProperty(“Text Service”), new InjectionProperty(“Message”, “Speech Message”), new InjectionProperty(“Logger”, new ResolvedParameter(typeof(ILogger), “FileLogger")) Xamarin × 依存関係の注入 [Dependency] public ITextSpeechService TextService { get; set; } [Dependency(“Speech Message”)] public string Message { get; set; } 引数を省略した場合は型での解決、指定 した場合は型&名称で解決される 引数を省略した場合は型での解決、指定 した場合は名称で解決される ResolvedParameter を指定することで型と 名称の組み合わせで解決することも
  • 24. メソッド呼び出し注入 ⁃ 実行時の基本的な指定方法 ⁃ 属性での宣言方法 new InjectionMethod(“Initialize”, typeof(ITextSpeechService), “Speech Message”, new ResolvedParameter(typeof(ILogger), “FileLogger")) Xamarin × 依存関係の注入 型か名称で、注入するパラメータ のインスタンスを指定 [InjectionMethod] public void Initialize( ITextSpeechService textService, [Dependency(“Speech Message”)] string message) InjectionMethod の属性が優先されて利用される 属性を省略した場合は型での解決、 指定した場合は名称で解決されます ResolvedParameter を指定することで型と 名称の組み合わせで解決することも
  • 25. DEMO Xamarin × 依存関係の注入 ※このデモのソースコードは GitHub で公開中 https://github.com/matatabi-ux/XamarinUnityInjection
  • 26. まとめ • Xamarin でこそ Unity を使うべき! ⁃ クロスプラットフォーム開発はプラットフォーム固有処理が冗長でクラス間が密結合になりがち ⁃ DI コンテナを利用することで、影響範囲を狭めた改修とテストしやすい実装ができる ⁃ Xamarin で利用する DI コンテナは Unity がおすすめ! • インスタンスの解決と依存関係の注入を使いこなそう ⁃ インスタンス解決と共有範囲と生存期間を設定できる ⁃ 利用できる注入の種類は、コンストラクタ、プロパティ、呼び出しメソッドの 3 種類 ⁃ 注入構成の方法は、構成ファイル、実行時の指定、属性による宣言の 3 種類 iOS PCL / Shared Windows Android
  • 27. 参考情報 • Microsoft patterns & practices - Unity プロジェクトページ https://unity.codeplex.com/ • Unity 3 MSDN(英語) http://msdn.microsoft.com/ja-jp/library/dn170416.aspx • @IT – 新しいオブジェクト生成機構で EntLib はこう変わる! http://www.atmarkit.co.jp/fdotnet/entlib/entlibv4/entlibv4_02.html Instance Resolution Life Time Controll Constructor Injection Property Injection Method Injection