SlideShare une entreprise Scribd logo
1  sur  56
Copyright © 2018 TIS Inc. All rights reserved.
戦略技術センター
大島昇時
緩く触って覚える ゼロからしっかり覚える
Copyright © 2018 TIS Inc. All rights reserved.
自己紹介
名前 : 大島昇時
ハンドル : さんすうP @Sansuusetto
所属 : TIS株式会社 戦略技術センター
1
Copyright © 2018 TIS Inc. All rights reserved.
・三菱のグループ会社で、組み込み系エンジニア約4年
・映像系の中小で、マネージャ、映像制作、VRゲーム制作約3年
・TISに2018/02入社。xRの研究開発を行う
2
経歴
Copyright © 2018 TIS Inc. All rights reserved.
Agenda
導入編
・UniRxとは
・UniRxで出来ること
基本編
・Subject, OnNext, Subscribe
・Lesson_01
・ストリーム
・オペレータ
・Lesson_02
応用編
・Lesson_03
・Lesson_04
3
Copyright © 2018 TIS Inc. All rights reserved.
導入編
4
Copyright © 2018 TIS Inc. All rights reserved.
はじめに
UniRxは非常に便利なライブラリです。
ただし、銀の弾丸的な効果を期待しないでください。
突然設計がきれいになったり、生産性が上がったりは
しません。
UniRxを使いこなし、有効なパターンを学ぶことで、きれい
な設計で高い生産性を発揮することが出来るようになります。
とても便利なライブラリなので、まずはUniRxで出来ること
を知り、興味を持って触ってみましょう!
5
Copyright © 2018 TIS Inc. All rights reserved.
ハンズオン資料
イベントページ
https://techcircle.connpass.com/event/96518/
パワポ資料
HandsOnのProject
https://github.com/sansuu/UniRxHandsOnVol1
6
Copyright © 2018 TIS Inc. All rights reserved.
UniRxとは
neueccさんが作成された(現在もアップデート中)Unity向けの
ReactiveExtensions (*1) ライブラリ。
UnityAssetStoreにて、無料でダウンロード可能。
*1:Rx(ReactiveExtensions)
C#向けの非同期処理ライブラリ。
Rx ≒ event
機能的にはeventの上位互換。
7
Copyright © 2018 TIS Inc. All rights reserved.
UniRxで出来ること
下記は、UniRxでできることのほんの一部です。
・メソッドチェーンでイベントに対する処理を美しく書ける
・PureClass(*1)でUpdate処理を実行できる
・PureClassでCoroutineを実行できる
・Coroutine使わなくてもTimer処理ができる
・変数を触っている感覚でイベントの配信が実装できる
・uGUIのイベント処理が非常に簡潔に書ける
・イベントの購読側で、イベントに対するフィルタをかけるのが
得意(Where,Skip,Repeat,Select...)
・複数のイベントを合成したり、一つのイベントを
分岐させたりできる
*1:MonoBehaviourを継承していないClass
8
Copyright © 2018 TIS Inc. All rights reserved.
UniRxでコードが簡潔に書ける例
9
<お題>
アプリ立ち上げた5秒後以降、毎秒ログを出力する。
15秒経過後はログ出力を停止する。
Copyright © 2018 TIS Inc. All rights reserved.
UniRxを使わない記述例
10
Copyright © 2018 TIS Inc. All rights reserved.
UniRxでの記述例
11
Copyright © 2018 TIS Inc. All rights reserved. 12
どうでしょうか?
無駄なメソッドが減って、コードが簡潔になりましたね。
まずは、なんかUniRx便利そうだなーというのを
感じていただけると嬉しいです。
Copyright © 2018 TIS Inc. All rights reserved.
基本編 ― Subject, OnNext,
Subscribe ―
13
Copyright © 2018 TIS Inc. All rights reserved.
イベントの基本
UniRxはイベントの拡張です。
以下の図は基本的なイベントの概念なので覚えておきましょう
14
Subject
Subscribe
観察者A
(Observer)
観察者B
観察者C
Subject
Notify
観察者A
(Observer)
観察者B
観察者C
Copyright © 2018 TIS Inc. All rights reserved.
単語を覚えよう
15
単語 直訳
Subject 主題
Observable 観察可能
Observer 観察者
Subscribe 購読する
UniRxを覚える上で、避けては通れない頻出単語がありま
す。とりあえずこれだけは覚えておきましょう。
Copyright © 2018 TIS Inc. All rights reserved.
eventとUniRx
16
結果は同じ
基本的な書き方は、大きく変わらない
event UniRx
Copyright © 2018 TIS Inc. All rights reserved.
UniRxの基本構文(SubscribeとOnNext)
17
Subjectの定義
Subjectの購読+受信時の振る舞い定義
Observerにメッセージを流す
Copyright © 2018 TIS Inc. All rights reserved.
Subjectってなに?
18
IObserverとIObservableを実装したClass。
SubjectにOnNext等で値を渡すことで、
Subjectの購読者(Observer)にメッセージを通知する。
OnCompleted
OnError
OnNext
Subscribe
Subject
IObserver IObservable
図で表すとこう
Copyright © 2018 TIS Inc. All rights reserved.
Subjectってなに?
19
Subject
Subscribe
観察者A
(Observer)
観察者B
観察者C
Subject
OnNext
OnError
OnCompleted
観察者A
(Observer)
観察者B
観察者C
前述の図で表すと以下のようになる。
Copyright © 2018 TIS Inc. All rights reserved.
とりあえず自分で作ってみよう
20
SubjectがUniRxの基本と説明しましたが、深堀すると実は
結構難しい概念です。(Hot,Cold,スケジューラ等)
今回はその辺りすっ飛ばして、とりあえず触ってみましょう。
Copyright © 2018 TIS Inc. All rights reserved.
Lesson_01
21
以下をSubjectとObserverの2つのClassに分解する。
「Assets/UniRxHandsOn/Projects/02_Lesson/01_Lesson_01」
以下にScene及びClassが格納されているので、それを利用すること
Copyright © 2018 TIS Inc. All rights reserved.
Lesson_01― 解答例 ―
22
Copyright © 2018 TIS Inc. All rights reserved.
Lesson_01― 解説 ―
23
Subjectそのものを外部に公開した場合、
外部からSubjectそのものを触れてしまう
ので、ちゃんとカプセル化しましょう
Copyright © 2018 TIS Inc. All rights reserved.
Lesson_01― Betterな解答例 ―
24
Point
Subjectは外部に公開せず、
IObservableのInterfaceを公開する
Copyright © 2018 TIS Inc. All rights reserved.
OnCompletedとOnError
25
OnCompleted
OnError
OnNext
Subscribe
Subject
IObserver IObservable
IF 役割
OnCompleted ストリームの停止及び完了通知
OnError ストリームの停止及びエラー通知
OnNext メッセージの変化通知
Copyright © 2018 TIS Inc. All rights reserved.
OnCompletedの挙動
26
OnCompleted, OnErrorを通知した場合、
以降のOnNextは通知されない
Copyright © 2018 TIS Inc. All rights reserved.
OnCompleted, OnErrorの振る舞いを定義す
る
27
Copyright © 2018 TIS Inc. All rights reserved.
SubscribeIFの定義
28
Copyright © 2018 TIS Inc. All rights reserved.
基本編 ― ストリーム ―
29
Copyright © 2018 TIS Inc. All rights reserved.
ストリームって?
30
Rxで扱うメッセージの流れのこと。
メッセージは後述のオペレータによって加工され、
Subscribeした際に登録した処理を行う。
メッセージ Subject 加工 処理
上記メッセージの流れをストリームという
Copyright © 2018 TIS Inc. All rights reserved.
ストリームって?(コードで)
31
①メッセージをストリームに流す
②Subscribe時に登録した処理を行う
Copyright © 2018 TIS Inc. All rights reserved.
ストリームソース
32
メッセージを発行するソースとなる物をストリームソースと
呼ぶ。
Rxではストリームソースを用意しないと何も始まりません。
以下はUniRxにおけるストリームソースの一部です。
・Subject
・ReactiveProperty
・UniRx.Triggers~
Copyright © 2018 TIS Inc. All rights reserved.
ストリームソース ―ReactiveProperty―
33
変数にSubjectの機能を追加したもの。
値の変更を通知してくれる変数みたいなもの。
非常に使い勝手が良いので、覚えておきましょう。
Copyright © 2018 TIS Inc. All rights reserved.
ストリームソース ―ReactiveProperty―
34
ReactivePropertyのValueを変更した時点で
ストリームにメッセージが流れる
Subject→ReactiveProperty
IObservable→IReadOnlyReactiveProperty
に変更しただけ
購読側は基本的に変わらない
Copyright © 2018 TIS Inc. All rights reserved.
ストリームソース ―ReactiveProperty―
35
先ほどのコードを実行すると、実行結果は下記のようになり
ます。
ReactivePropertyは、Subscribe時に必ず値をPushする
設計となっているため注意が必要です。
これを無視したい場合、後述のオペレータが活躍します
Copyright © 2018 TIS Inc. All rights reserved.
基本編 ― オペレータ ―
36
Copyright © 2018 TIS Inc. All rights reserved.
オペレータって?
37
ストリームに流れるメッセージを加工するための機能。
UniRxにはオペレータが大量に用意されています。
以下はほんの一部。
オペレータ できること
Where 条件を満たすメッセージを通す
Select メッセージを変換する
Skip メッセージを指定数スキップする
Take ストリームを先頭から指定した件数までで切る
Copyright © 2018 TIS Inc. All rights reserved.
オペレータとメソッドチェーン
38
オペレータは下記の様にメソッドチェーンで繋ぐ事ができま
す。
それは、下記の様にすべてのオペレータが、IObservable
の拡張メソッドとして定義され、IObservableを返す設計
となっているからです。
上記の記法により、Where<T>が、
IObservableの拡張メソッドとして定義される
Copyright © 2018 TIS Inc. All rights reserved.
IObservableのIF
39
つまり、IObservableのIFはSubscribeだけでなく
実体としては大量のオペレータIFを定義しているということ
OnCompleted
OnError
OnNext
Subscribe
Where
Select
Skip
Take
・
・
・
Subject
IObserver IObservable
OnCompleted
OnError
OnNext
Subscribe
Subject
IObserver IObservable
Copyright © 2018 TIS Inc. All rights reserved.
Lesson_02
40
以下のストリームから、偶数(0を除く)の2乗をログ出力す
るObserverをオペレータを用いて作成する
「Assets/UniRxHandsOn/Projects/02_Lesson/02_Lesson_02」
以下にScene及びClassが格納されているので、それを利用すること
実行結果
(以降も続く)
Copyright © 2018 TIS Inc. All rights reserved.
Lesson_02― 解答例 ―
41
Copyright © 2018 TIS Inc. All rights reserved.
休憩
42
Copyright © 2018 TIS Inc. All rights reserved.
応用編
43
Copyright © 2018 TIS Inc. All rights reserved.
uGUIイベントをストリームに変換する
44
下記の様にして、uGUIイベントをストリームに変換するこ
とができる。
IObservable同様にUnityEventの拡張メソッドとして定義されている
onClick(UnityEvent)をストリームに変換
Copyright © 2018 TIS Inc. All rights reserved.
Lesson_03
45
uGUIイベントをストリームに変換し、下記の機能を作成す
る。
Sliderの値を表示する
DropDownListで選んだColorを
表示する
タイマーログ停止
タイマーログ開始
「Assets/UniRxHandsOn/Projects/02_Lesson/03_Lesson_03」
以下にScene及びClassが格納されているので、それを利用すること
Copyright © 2018 TIS Inc. All rights reserved.
Lesson_03 ― 解答例 ―
46
各UnityEventをストリームに変換
してuGUIに対する処理を行う
Copyright © 2018 TIS Inc. All rights reserved.
Lesson_03 ― 補足 ―
47
1秒ごとにストリームに
メッセージを流すストリームソース
Timer停止のため、
ストリームを解放する
Copyright © 2018 TIS Inc. All rights reserved.
Lesson_04
48
UniRxを利用して、プレイヤーのコントロール機能を作成す
る。
プレイヤーコントロールの仕様
・アローキーで前後左右移動する(走る)
・スペースキーでジャンプする
・「C」キーでしゃがむ(しゃがみ歩き可能)
・LeftShiftキーで歩く
「Assets/UniRxHandsOn/Projects/02_Lesson/04_Lesson_04」
以下にScene及びClassが格納されているので、それを利用すること
Copyright © 2018 TIS Inc. All rights reserved.
Lesson_04
49
参考動画
Copyright © 2018 TIS Inc. All rights reserved.
Lesson_04 ― 前提 ―
50
本演習では、StandardAssetsのClassをUniRx化したClass
にて、キャラクターの移動処理(Model)を行う。
移動量及び、状態を受け取
るIFとなっている
毎フレーム移動量及び、状態を投げる仕様のため、
Inputの状態を常に最新に更新する必要がある
Copyright © 2018 TIS Inc. All rights reserved.
Lesson_04 ― 解答例 ―
51
Copyright © 2018 TIS Inc. All rights reserved.
Lesson_04 ― 解説 ―
52
UpdateAsObservableは毎フレーム
ストリームにメッセージを流す
ストリームソース
Select内でInputを取得することで
true/false何れの場合でもストリー
ムにメッセージを流せる
Copyright © 2018 TIS Inc. All rights reserved.
まとめ
53
・ストリームに流れるメッセージの種類は下記の3種類
OnNext, OnError, OnCompleted
・ストリームにオペレータを挟むことで、メッセージを
加工できる
・IObservableはIFの拡張により、メソッドチェーンで
繋げることができる
・上記をうまく使うことで、どの様な条件で何をしたいか
明確なコードとなり、可読性が向上する
Copyright © 2018 TIS Inc. All rights reserved.
参考資料
54
敬称略
• neue cc blog(neue cc)
• UniRx入門シリーズ 目次(torisouP)
THANK YOU

Contenu connexe

Tendances

エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
型安全性入門
型安全性入門型安全性入門
型安全性入門Akinori Abe
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)mosa siru
 
インフラエンジニアってなんでしたっけ(仮)
インフラエンジニアってなんでしたっけ(仮)インフラエンジニアってなんでしたっけ(仮)
インフラエンジニアってなんでしたっけ(仮)Akihiro Kuwano
 
あなたのチームの「いい人」は機能していますか?
あなたのチームの「いい人」は機能していますか?あなたのチームの「いい人」は機能していますか?
あなたのチームの「いい人」は機能していますか?Minoru Yokomichi
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
 
ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発Takafumi ONAKA
 
アジャイル開発はWhyから始まる
アジャイル開発はWhyから始まるアジャイル開発はWhyから始まる
アジャイル開発はWhyから始まるtoshihiro ichitani
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけらAtsushi Nakamura
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについてkumake
 
多様な働き⽅のチームでどうやって アジャイルにやるの?(雁行陣開発)
多様な働き⽅のチームでどうやって アジャイルにやるの?(雁行陣開発)多様な働き⽅のチームでどうやって アジャイルにやるの?(雁行陣開発)
多様な働き⽅のチームでどうやって アジャイルにやるの?(雁行陣開発)toshihiro ichitani
 
マスターデータの キャッシュシステムの改善の話
マスターデータの キャッシュシステムの改善の話マスターデータの キャッシュシステムの改善の話
マスターデータの キャッシュシステムの改善の話natsumi_ishizaka
 
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Yoshifumi Kawai
 
アニメーションとスキニングをBurstで独自実装する.pdf
アニメーションとスキニングをBurstで独自実装する.pdfアニメーションとスキニングをBurstで独自実装する.pdf
アニメーションとスキニングをBurstで独自実装する.pdfinfinite_loop
 
アプリケーションコードにおける技術的負債について考える
アプリケーションコードにおける技術的負債について考えるアプリケーションコードにおける技術的負債について考える
アプリケーションコードにおける技術的負債について考えるpospome
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
[VP of Engineering Meetup] エンジニアのパフォーマンスを最大化させる組織活性化施策とは
[VP of Engineering Meetup] エンジニアのパフォーマンスを最大化させる組織活性化施策とは[VP of Engineering Meetup] エンジニアのパフォーマンスを最大化させる組織活性化施策とは
[VP of Engineering Meetup] エンジニアのパフォーマンスを最大化させる組織活性化施策とはatsuki_ito
 
IT系エンジニアのためのプレゼンテーション入門
IT系エンジニアのためのプレゼンテーション入門IT系エンジニアのためのプレゼンテーション入門
IT系エンジニアのためのプレゼンテーション入門Masahito Zembutsu
 

Tendances (20)

エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
型安全性入門
型安全性入門型安全性入門
型安全性入門
 
越境アジャイル
越境アジャイル越境アジャイル
越境アジャイル
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
 
インフラエンジニアってなんでしたっけ(仮)
インフラエンジニアってなんでしたっけ(仮)インフラエンジニアってなんでしたっけ(仮)
インフラエンジニアってなんでしたっけ(仮)
 
あなたのチームの「いい人」は機能していますか?
あなたのチームの「いい人」は機能していますか?あなたのチームの「いい人」は機能していますか?
あなたのチームの「いい人」は機能していますか?
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発
 
アジャイル開発はWhyから始まる
アジャイル開発はWhyから始まるアジャイル開発はWhyから始まる
アジャイル開発はWhyから始まる
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについて
 
多様な働き⽅のチームでどうやって アジャイルにやるの?(雁行陣開発)
多様な働き⽅のチームでどうやって アジャイルにやるの?(雁行陣開発)多様な働き⽅のチームでどうやって アジャイルにやるの?(雁行陣開発)
多様な働き⽅のチームでどうやって アジャイルにやるの?(雁行陣開発)
 
マスターデータの キャッシュシステムの改善の話
マスターデータの キャッシュシステムの改善の話マスターデータの キャッシュシステムの改善の話
マスターデータの キャッシュシステムの改善の話
 
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
 
アニメーションとスキニングをBurstで独自実装する.pdf
アニメーションとスキニングをBurstで独自実装する.pdfアニメーションとスキニングをBurstで独自実装する.pdf
アニメーションとスキニングをBurstで独自実装する.pdf
 
アプリケーションコードにおける技術的負債について考える
アプリケーションコードにおける技術的負債について考えるアプリケーションコードにおける技術的負債について考える
アプリケーションコードにおける技術的負債について考える
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
[VP of Engineering Meetup] エンジニアのパフォーマンスを最大化させる組織活性化施策とは
[VP of Engineering Meetup] エンジニアのパフォーマンスを最大化させる組織活性化施策とは[VP of Engineering Meetup] エンジニアのパフォーマンスを最大化させる組織活性化施策とは
[VP of Engineering Meetup] エンジニアのパフォーマンスを最大化させる組織活性化施策とは
 
IT系エンジニアのためのプレゼンテーション入門
IT系エンジニアのためのプレゼンテーション入門IT系エンジニアのためのプレゼンテーション入門
IT系エンジニアのためのプレゼンテーション入門
 

Similaire à UniRxHandsOnVol1

HoloLens参考書読書会 vol9
HoloLens参考書読書会 vol9HoloLens参考書読書会 vol9
HoloLens参考書読書会 vol9Shoji Oshima
 
RT ミドルウェアの IoT プラットフォームへの適用
RT ミドルウェアの IoT プラットフォームへの適用RT ミドルウェアの IoT プラットフォームへの適用
RT ミドルウェアの IoT プラットフォームへの適用Device WebAPI Consortium
 
IoT共創ラボ発表資料_TIS_20180327
IoT共創ラボ発表資料_TIS_20180327IoT共創ラボ発表資料_TIS_20180327
IoT共創ラボ発表資料_TIS_20180327Shingo Mori
 
ソフトウェアジャパン2018 ITフォーラムセッション(3)
ソフトウェアジャパン2018 ITフォーラムセッション(3)ソフトウェアジャパン2018 ITフォーラムセッション(3)
ソフトウェアジャパン2018 ITフォーラムセッション(3)aitc_jp
 
xRLT02_Holoで大量にモデルを出してみる
xRLT02_Holoで大量にモデルを出してみるxRLT02_Holoで大量にモデルを出してみる
xRLT02_Holoで大量にモデルを出してみるShoji Oshima
 
「未知の脅威」を検出するために -Securitydays2015 imatrixセミナー@KITTE-
「未知の脅威」を検出するために -Securitydays2015 imatrixセミナー@KITTE-「未知の脅威」を検出するために -Securitydays2015 imatrixセミナー@KITTE-
「未知の脅威」を検出するために -Securitydays2015 imatrixセミナー@KITTE-imatrix_share
 
Amazon SageMakerを使った機械学習モデル管理運用システム構築事例
Amazon SageMakerを使った機械学習モデル管理運用システム構築事例Amazon SageMakerを使った機械学習モデル管理運用システム構築事例
Amazon SageMakerを使った機械学習モデル管理運用システム構築事例Seongduk Cheon
 
2018年12月15日 AITC女子会 会話の記録と分析
2018年12月15日 AITC女子会 会話の記録と分析2018年12月15日 AITC女子会 会話の記録と分析
2018年12月15日 AITC女子会 会話の記録と分析aitc_jp
 
AI for Media 2018 Update セミナー: 株式会社ユニゾンシステム: スピーチ AI を活用した文字起こしプラットホームの活用
AI for Media 2018 Update セミナー: 株式会社ユニゾンシステム: スピーチ AI を活用した文字起こしプラットホームの活用AI for Media 2018 Update セミナー: 株式会社ユニゾンシステム: スピーチ AI を活用した文字起こしプラットホームの活用
AI for Media 2018 Update セミナー: 株式会社ユニゾンシステム: スピーチ AI を活用した文字起こしプラットホームの活用Daiyu Hatakeyama
 
国内外AIコンペティションからみるAI技術者のキャリアパスの潮流およびAIコンペサイトSIGNATEにおけるAWS活用事例
国内外AIコンペティションからみるAI技術者のキャリアパスの潮流およびAIコンペサイトSIGNATEにおけるAWS活用事例国内外AIコンペティションからみるAI技術者のキャリアパスの潮流およびAIコンペサイトSIGNATEにおけるAWS活用事例
国内外AIコンペティションからみるAI技術者のキャリアパスの潮流およびAIコンペサイトSIGNATEにおけるAWS活用事例秀 齊藤
 
Jazug-8th: Azure AKS & FIWARE & Robot
Jazug-8th: Azure AKS & FIWARE & RobotJazug-8th: Azure AKS & FIWARE & Robot
Jazug-8th: Azure AKS & FIWARE & RobotNobuyuki Matsui
 
JTF2018 FIWARE x robot x IoT
JTF2018 FIWARE x robot x IoTJTF2018 FIWARE x robot x IoT
JTF2018 FIWARE x robot x IoTNobuyuki Matsui
 
ソフトウェアベンチャーのサポートエンジニア
ソフトウェアベンチャーのサポートエンジニアソフトウェアベンチャーのサポートエンジニア
ソフトウェアベンチャーのサポートエンジニアHideto Masuoka
 
Enterprise hacknight 1-igarashi
Enterprise hacknight 1-igarashiEnterprise hacknight 1-igarashi
Enterprise hacknight 1-igarashiTomohiro Igarashi
 
20190313_SDGsや社会課題にxRはどう活かせるか
20190313_SDGsや社会課題にxRはどう活かせるか20190313_SDGsや社会課題にxRはどう活かせるか
20190313_SDGsや社会課題にxRはどう活かせるかShingo Mori
 
20180130 設計イベント
20180130 設計イベント20180130 設計イベント
20180130 設計イベントAtsushi Takayasu
 
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション①
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション①Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション①
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション①Yahoo!デベロッパーネットワーク
 
Netadashi Meetup #6 20170629
Netadashi Meetup #6 20170629Netadashi Meetup #6 20170629
Netadashi Meetup #6 20170629Shigeki Morizane
 

Similaire à UniRxHandsOnVol1 (20)

Extreme Management Center を活用したネットワークの見える化
Extreme Management Center を活用したネットワークの見える化Extreme Management Center を活用したネットワークの見える化
Extreme Management Center を活用したネットワークの見える化
 
HoloLens参考書読書会 vol9
HoloLens参考書読書会 vol9HoloLens参考書読書会 vol9
HoloLens参考書読書会 vol9
 
RT ミドルウェアの IoT プラットフォームへの適用
RT ミドルウェアの IoT プラットフォームへの適用RT ミドルウェアの IoT プラットフォームへの適用
RT ミドルウェアの IoT プラットフォームへの適用
 
IoT共創ラボ発表資料_TIS_20180327
IoT共創ラボ発表資料_TIS_20180327IoT共創ラボ発表資料_TIS_20180327
IoT共創ラボ発表資料_TIS_20180327
 
ソフトウェアジャパン2018 ITフォーラムセッション(3)
ソフトウェアジャパン2018 ITフォーラムセッション(3)ソフトウェアジャパン2018 ITフォーラムセッション(3)
ソフトウェアジャパン2018 ITフォーラムセッション(3)
 
xRLT02_Holoで大量にモデルを出してみる
xRLT02_Holoで大量にモデルを出してみるxRLT02_Holoで大量にモデルを出してみる
xRLT02_Holoで大量にモデルを出してみる
 
「未知の脅威」を検出するために -Securitydays2015 imatrixセミナー@KITTE-
「未知の脅威」を検出するために -Securitydays2015 imatrixセミナー@KITTE-「未知の脅威」を検出するために -Securitydays2015 imatrixセミナー@KITTE-
「未知の脅威」を検出するために -Securitydays2015 imatrixセミナー@KITTE-
 
Amazon SageMakerを使った機械学習モデル管理運用システム構築事例
Amazon SageMakerを使った機械学習モデル管理運用システム構築事例Amazon SageMakerを使った機械学習モデル管理運用システム構築事例
Amazon SageMakerを使った機械学習モデル管理運用システム構築事例
 
2018年12月15日 AITC女子会 会話の記録と分析
2018年12月15日 AITC女子会 会話の記録と分析2018年12月15日 AITC女子会 会話の記録と分析
2018年12月15日 AITC女子会 会話の記録と分析
 
AI for Media 2018 Update セミナー: 株式会社ユニゾンシステム: スピーチ AI を活用した文字起こしプラットホームの活用
AI for Media 2018 Update セミナー: 株式会社ユニゾンシステム: スピーチ AI を活用した文字起こしプラットホームの活用AI for Media 2018 Update セミナー: 株式会社ユニゾンシステム: スピーチ AI を活用した文字起こしプラットホームの活用
AI for Media 2018 Update セミナー: 株式会社ユニゾンシステム: スピーチ AI を活用した文字起こしプラットホームの活用
 
国内外AIコンペティションからみるAI技術者のキャリアパスの潮流およびAIコンペサイトSIGNATEにおけるAWS活用事例
国内外AIコンペティションからみるAI技術者のキャリアパスの潮流およびAIコンペサイトSIGNATEにおけるAWS活用事例国内外AIコンペティションからみるAI技術者のキャリアパスの潮流およびAIコンペサイトSIGNATEにおけるAWS活用事例
国内外AIコンペティションからみるAI技術者のキャリアパスの潮流およびAIコンペサイトSIGNATEにおけるAWS活用事例
 
Jazug-8th: Azure AKS & FIWARE & Robot
Jazug-8th: Azure AKS & FIWARE & RobotJazug-8th: Azure AKS & FIWARE & Robot
Jazug-8th: Azure AKS & FIWARE & Robot
 
JTF2018 FIWARE x robot x IoT
JTF2018 FIWARE x robot x IoTJTF2018 FIWARE x robot x IoT
JTF2018 FIWARE x robot x IoT
 
ソフトウェアベンチャーのサポートエンジニア
ソフトウェアベンチャーのサポートエンジニアソフトウェアベンチャーのサポートエンジニア
ソフトウェアベンチャーのサポートエンジニア
 
Enterprise hacknight 1-igarashi
Enterprise hacknight 1-igarashiEnterprise hacknight 1-igarashi
Enterprise hacknight 1-igarashi
 
20190313_SDGsや社会課題にxRはどう活かせるか
20190313_SDGsや社会課題にxRはどう活かせるか20190313_SDGsや社会課題にxRはどう活かせるか
20190313_SDGsや社会課題にxRはどう活かせるか
 
20180130 設計イベント
20180130 設計イベント20180130 設計イベント
20180130 設計イベント
 
リースまるみえくん
リースまるみえくんリースまるみえくん
リースまるみえくん
 
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション①
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション①Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション①
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション①
 
Netadashi Meetup #6 20170629
Netadashi Meetup #6 20170629Netadashi Meetup #6 20170629
Netadashi Meetup #6 20170629
 

UniRxHandsOnVol1

  • 1. Copyright © 2018 TIS Inc. All rights reserved. 戦略技術センター 大島昇時 緩く触って覚える ゼロからしっかり覚える
  • 2. Copyright © 2018 TIS Inc. All rights reserved. 自己紹介 名前 : 大島昇時 ハンドル : さんすうP @Sansuusetto 所属 : TIS株式会社 戦略技術センター 1
  • 3. Copyright © 2018 TIS Inc. All rights reserved. ・三菱のグループ会社で、組み込み系エンジニア約4年 ・映像系の中小で、マネージャ、映像制作、VRゲーム制作約3年 ・TISに2018/02入社。xRの研究開発を行う 2 経歴
  • 4. Copyright © 2018 TIS Inc. All rights reserved. Agenda 導入編 ・UniRxとは ・UniRxで出来ること 基本編 ・Subject, OnNext, Subscribe ・Lesson_01 ・ストリーム ・オペレータ ・Lesson_02 応用編 ・Lesson_03 ・Lesson_04 3
  • 5. Copyright © 2018 TIS Inc. All rights reserved. 導入編 4
  • 6. Copyright © 2018 TIS Inc. All rights reserved. はじめに UniRxは非常に便利なライブラリです。 ただし、銀の弾丸的な効果を期待しないでください。 突然設計がきれいになったり、生産性が上がったりは しません。 UniRxを使いこなし、有効なパターンを学ぶことで、きれい な設計で高い生産性を発揮することが出来るようになります。 とても便利なライブラリなので、まずはUniRxで出来ること を知り、興味を持って触ってみましょう! 5
  • 7. Copyright © 2018 TIS Inc. All rights reserved. ハンズオン資料 イベントページ https://techcircle.connpass.com/event/96518/ パワポ資料 HandsOnのProject https://github.com/sansuu/UniRxHandsOnVol1 6
  • 8. Copyright © 2018 TIS Inc. All rights reserved. UniRxとは neueccさんが作成された(現在もアップデート中)Unity向けの ReactiveExtensions (*1) ライブラリ。 UnityAssetStoreにて、無料でダウンロード可能。 *1:Rx(ReactiveExtensions) C#向けの非同期処理ライブラリ。 Rx ≒ event 機能的にはeventの上位互換。 7
  • 9. Copyright © 2018 TIS Inc. All rights reserved. UniRxで出来ること 下記は、UniRxでできることのほんの一部です。 ・メソッドチェーンでイベントに対する処理を美しく書ける ・PureClass(*1)でUpdate処理を実行できる ・PureClassでCoroutineを実行できる ・Coroutine使わなくてもTimer処理ができる ・変数を触っている感覚でイベントの配信が実装できる ・uGUIのイベント処理が非常に簡潔に書ける ・イベントの購読側で、イベントに対するフィルタをかけるのが 得意(Where,Skip,Repeat,Select...) ・複数のイベントを合成したり、一つのイベントを 分岐させたりできる *1:MonoBehaviourを継承していないClass 8
  • 10. Copyright © 2018 TIS Inc. All rights reserved. UniRxでコードが簡潔に書ける例 9 <お題> アプリ立ち上げた5秒後以降、毎秒ログを出力する。 15秒経過後はログ出力を停止する。
  • 11. Copyright © 2018 TIS Inc. All rights reserved. UniRxを使わない記述例 10
  • 12. Copyright © 2018 TIS Inc. All rights reserved. UniRxでの記述例 11
  • 13. Copyright © 2018 TIS Inc. All rights reserved. 12 どうでしょうか? 無駄なメソッドが減って、コードが簡潔になりましたね。 まずは、なんかUniRx便利そうだなーというのを 感じていただけると嬉しいです。
  • 14. Copyright © 2018 TIS Inc. All rights reserved. 基本編 ― Subject, OnNext, Subscribe ― 13
  • 15. Copyright © 2018 TIS Inc. All rights reserved. イベントの基本 UniRxはイベントの拡張です。 以下の図は基本的なイベントの概念なので覚えておきましょう 14 Subject Subscribe 観察者A (Observer) 観察者B 観察者C Subject Notify 観察者A (Observer) 観察者B 観察者C
  • 16. Copyright © 2018 TIS Inc. All rights reserved. 単語を覚えよう 15 単語 直訳 Subject 主題 Observable 観察可能 Observer 観察者 Subscribe 購読する UniRxを覚える上で、避けては通れない頻出単語がありま す。とりあえずこれだけは覚えておきましょう。
  • 17. Copyright © 2018 TIS Inc. All rights reserved. eventとUniRx 16 結果は同じ 基本的な書き方は、大きく変わらない event UniRx
  • 18. Copyright © 2018 TIS Inc. All rights reserved. UniRxの基本構文(SubscribeとOnNext) 17 Subjectの定義 Subjectの購読+受信時の振る舞い定義 Observerにメッセージを流す
  • 19. Copyright © 2018 TIS Inc. All rights reserved. Subjectってなに? 18 IObserverとIObservableを実装したClass。 SubjectにOnNext等で値を渡すことで、 Subjectの購読者(Observer)にメッセージを通知する。 OnCompleted OnError OnNext Subscribe Subject IObserver IObservable 図で表すとこう
  • 20. Copyright © 2018 TIS Inc. All rights reserved. Subjectってなに? 19 Subject Subscribe 観察者A (Observer) 観察者B 観察者C Subject OnNext OnError OnCompleted 観察者A (Observer) 観察者B 観察者C 前述の図で表すと以下のようになる。
  • 21. Copyright © 2018 TIS Inc. All rights reserved. とりあえず自分で作ってみよう 20 SubjectがUniRxの基本と説明しましたが、深堀すると実は 結構難しい概念です。(Hot,Cold,スケジューラ等) 今回はその辺りすっ飛ばして、とりあえず触ってみましょう。
  • 22. Copyright © 2018 TIS Inc. All rights reserved. Lesson_01 21 以下をSubjectとObserverの2つのClassに分解する。 「Assets/UniRxHandsOn/Projects/02_Lesson/01_Lesson_01」 以下にScene及びClassが格納されているので、それを利用すること
  • 23. Copyright © 2018 TIS Inc. All rights reserved. Lesson_01― 解答例 ― 22
  • 24. Copyright © 2018 TIS Inc. All rights reserved. Lesson_01― 解説 ― 23 Subjectそのものを外部に公開した場合、 外部からSubjectそのものを触れてしまう ので、ちゃんとカプセル化しましょう
  • 25. Copyright © 2018 TIS Inc. All rights reserved. Lesson_01― Betterな解答例 ― 24 Point Subjectは外部に公開せず、 IObservableのInterfaceを公開する
  • 26. Copyright © 2018 TIS Inc. All rights reserved. OnCompletedとOnError 25 OnCompleted OnError OnNext Subscribe Subject IObserver IObservable IF 役割 OnCompleted ストリームの停止及び完了通知 OnError ストリームの停止及びエラー通知 OnNext メッセージの変化通知
  • 27. Copyright © 2018 TIS Inc. All rights reserved. OnCompletedの挙動 26 OnCompleted, OnErrorを通知した場合、 以降のOnNextは通知されない
  • 28. Copyright © 2018 TIS Inc. All rights reserved. OnCompleted, OnErrorの振る舞いを定義す る 27
  • 29. Copyright © 2018 TIS Inc. All rights reserved. SubscribeIFの定義 28
  • 30. Copyright © 2018 TIS Inc. All rights reserved. 基本編 ― ストリーム ― 29
  • 31. Copyright © 2018 TIS Inc. All rights reserved. ストリームって? 30 Rxで扱うメッセージの流れのこと。 メッセージは後述のオペレータによって加工され、 Subscribeした際に登録した処理を行う。 メッセージ Subject 加工 処理 上記メッセージの流れをストリームという
  • 32. Copyright © 2018 TIS Inc. All rights reserved. ストリームって?(コードで) 31 ①メッセージをストリームに流す ②Subscribe時に登録した処理を行う
  • 33. Copyright © 2018 TIS Inc. All rights reserved. ストリームソース 32 メッセージを発行するソースとなる物をストリームソースと 呼ぶ。 Rxではストリームソースを用意しないと何も始まりません。 以下はUniRxにおけるストリームソースの一部です。 ・Subject ・ReactiveProperty ・UniRx.Triggers~
  • 34. Copyright © 2018 TIS Inc. All rights reserved. ストリームソース ―ReactiveProperty― 33 変数にSubjectの機能を追加したもの。 値の変更を通知してくれる変数みたいなもの。 非常に使い勝手が良いので、覚えておきましょう。
  • 35. Copyright © 2018 TIS Inc. All rights reserved. ストリームソース ―ReactiveProperty― 34 ReactivePropertyのValueを変更した時点で ストリームにメッセージが流れる Subject→ReactiveProperty IObservable→IReadOnlyReactiveProperty に変更しただけ 購読側は基本的に変わらない
  • 36. Copyright © 2018 TIS Inc. All rights reserved. ストリームソース ―ReactiveProperty― 35 先ほどのコードを実行すると、実行結果は下記のようになり ます。 ReactivePropertyは、Subscribe時に必ず値をPushする 設計となっているため注意が必要です。 これを無視したい場合、後述のオペレータが活躍します
  • 37. Copyright © 2018 TIS Inc. All rights reserved. 基本編 ― オペレータ ― 36
  • 38. Copyright © 2018 TIS Inc. All rights reserved. オペレータって? 37 ストリームに流れるメッセージを加工するための機能。 UniRxにはオペレータが大量に用意されています。 以下はほんの一部。 オペレータ できること Where 条件を満たすメッセージを通す Select メッセージを変換する Skip メッセージを指定数スキップする Take ストリームを先頭から指定した件数までで切る
  • 39. Copyright © 2018 TIS Inc. All rights reserved. オペレータとメソッドチェーン 38 オペレータは下記の様にメソッドチェーンで繋ぐ事ができま す。 それは、下記の様にすべてのオペレータが、IObservable の拡張メソッドとして定義され、IObservableを返す設計 となっているからです。 上記の記法により、Where<T>が、 IObservableの拡張メソッドとして定義される
  • 40. Copyright © 2018 TIS Inc. All rights reserved. IObservableのIF 39 つまり、IObservableのIFはSubscribeだけでなく 実体としては大量のオペレータIFを定義しているということ OnCompleted OnError OnNext Subscribe Where Select Skip Take ・ ・ ・ Subject IObserver IObservable OnCompleted OnError OnNext Subscribe Subject IObserver IObservable
  • 41. Copyright © 2018 TIS Inc. All rights reserved. Lesson_02 40 以下のストリームから、偶数(0を除く)の2乗をログ出力す るObserverをオペレータを用いて作成する 「Assets/UniRxHandsOn/Projects/02_Lesson/02_Lesson_02」 以下にScene及びClassが格納されているので、それを利用すること 実行結果 (以降も続く)
  • 42. Copyright © 2018 TIS Inc. All rights reserved. Lesson_02― 解答例 ― 41
  • 43. Copyright © 2018 TIS Inc. All rights reserved. 休憩 42
  • 44. Copyright © 2018 TIS Inc. All rights reserved. 応用編 43
  • 45. Copyright © 2018 TIS Inc. All rights reserved. uGUIイベントをストリームに変換する 44 下記の様にして、uGUIイベントをストリームに変換するこ とができる。 IObservable同様にUnityEventの拡張メソッドとして定義されている onClick(UnityEvent)をストリームに変換
  • 46. Copyright © 2018 TIS Inc. All rights reserved. Lesson_03 45 uGUIイベントをストリームに変換し、下記の機能を作成す る。 Sliderの値を表示する DropDownListで選んだColorを 表示する タイマーログ停止 タイマーログ開始 「Assets/UniRxHandsOn/Projects/02_Lesson/03_Lesson_03」 以下にScene及びClassが格納されているので、それを利用すること
  • 47. Copyright © 2018 TIS Inc. All rights reserved. Lesson_03 ― 解答例 ― 46 各UnityEventをストリームに変換 してuGUIに対する処理を行う
  • 48. Copyright © 2018 TIS Inc. All rights reserved. Lesson_03 ― 補足 ― 47 1秒ごとにストリームに メッセージを流すストリームソース Timer停止のため、 ストリームを解放する
  • 49. Copyright © 2018 TIS Inc. All rights reserved. Lesson_04 48 UniRxを利用して、プレイヤーのコントロール機能を作成す る。 プレイヤーコントロールの仕様 ・アローキーで前後左右移動する(走る) ・スペースキーでジャンプする ・「C」キーでしゃがむ(しゃがみ歩き可能) ・LeftShiftキーで歩く 「Assets/UniRxHandsOn/Projects/02_Lesson/04_Lesson_04」 以下にScene及びClassが格納されているので、それを利用すること
  • 50. Copyright © 2018 TIS Inc. All rights reserved. Lesson_04 49 参考動画
  • 51. Copyright © 2018 TIS Inc. All rights reserved. Lesson_04 ― 前提 ― 50 本演習では、StandardAssetsのClassをUniRx化したClass にて、キャラクターの移動処理(Model)を行う。 移動量及び、状態を受け取 るIFとなっている 毎フレーム移動量及び、状態を投げる仕様のため、 Inputの状態を常に最新に更新する必要がある
  • 52. Copyright © 2018 TIS Inc. All rights reserved. Lesson_04 ― 解答例 ― 51
  • 53. Copyright © 2018 TIS Inc. All rights reserved. Lesson_04 ― 解説 ― 52 UpdateAsObservableは毎フレーム ストリームにメッセージを流す ストリームソース Select内でInputを取得することで true/false何れの場合でもストリー ムにメッセージを流せる
  • 54. Copyright © 2018 TIS Inc. All rights reserved. まとめ 53 ・ストリームに流れるメッセージの種類は下記の3種類 OnNext, OnError, OnCompleted ・ストリームにオペレータを挟むことで、メッセージを 加工できる ・IObservableはIFの拡張により、メソッドチェーンで 繋げることができる ・上記をうまく使うことで、どの様な条件で何をしたいか 明確なコードとなり、可読性が向上する
  • 55. Copyright © 2018 TIS Inc. All rights reserved. 参考資料 54 敬称略 • neue cc blog(neue cc) • UniRx入門シリーズ 目次(torisouP)