SlideShare una empresa de Scribd logo
1 de 20
NativeModuleの実装や
ライブラリ導入をした話
【シューマイ】Tech Lead Engineerから最新技術を学べ!ReactNative編 2019/02/27
自己紹介
 大津 穂高
 OPEN8 Inc.
@14__oz
プロダクト
https://video-b.com
https://letronc-m.com https://lxtrip.com
https://open8.com/business/video-tap
概要
 サードパーティ利用の話
 NativeModules作成の話
 CustomView作成の話
メリット・デメリット
 メリット
 自分で用意する手間が省ける
 公式でサポートされていないものが利用できる
 かっこいいものがある
 デメリット
 バグを含んでいる可能性がある
 更新がされない可能性がある
サードパーティ利用の話
 サードパーティ利用の話
 NativeModules作成の話
 CustomView作成の話
react-native-image-picker
 https://github.com/react-community/react-native-image-picker
 test_image_react_native.png (空白あり)
 data:image/pngが取得できる
 test_image react_native.png (空白なし)
 nullとなる
react-native-image-picker
 事前に空白をなくすようにした
 https://developer.android.com/reference/android/webkit/MimeTypeMap
NativeModules作成の話
 サードパーティ利用の話
 NativeModules作成の話
 iOS: https://facebook.github.io/react-native/docs/native-modules-ios
 Android: https://facebook.github.io/react-native/docs/native-modules-android
 CustomView作成の話
Repro
JavaJavaScript トラッキング名
ReproModuleComponent
@ReactMethod
private void customTrack(final String trackEvent) {
UiThreadUtil.runOnUiThread(new Runnable() {
@Override
public void run() {
Repro.track(trackEvent);
}
});
}
import { NativeModules } from 'react-native';
NativeModules.ReproAndroid.customTrack(
'CustomTrackName’
);
ReproのReactNative対応
動画の復号
JavaJavaScript
暗号化されたファイルのパス(配列)
復号したファイルのパス
CipherModuleVideoComponent
@ReactMethod
private void getDecryptVideoPaths(
String key, String iv, ReadableArray videoPaths, Callback callback
) {
try {
//復号処理...
callback.invoke(videoPath);
} catch (Exception e) {
Bugsnag.notify(e);
}
}
コールバックで値を返却した理由
The return type of bridge methods is always void. React Native bridge is
asynchronous, so the only way to pass a result to JavaScript is by using callbacks or
emitting events (see below).
 自作したNativeModuleから値を返却するには、
コールバックかイベント発行となる(iOS/Android)
 イベントの発行について
 https://facebook.github.io/react-native/docs/native-modules-
android#sending-events-to-javascript
CustomView作成の話
 サードパーティ利用の話
 NativeModules作成の話
 CustomView作成の話
 iOS: https://facebook.github.io/react-native/docs/native-components-ios
 Android: https://facebook.github.io/react-native/docs/native-components-android
CustomView
CustomViewのサイズを可変できない
 Android側のrequestLayoutを呼び出してもサイズが変更されない
 描画の領域はCustomViewを呼び出す前に決まっているらしい
 描画にはLayoutShadowNodeが使われている
参考:https://nicholasmarais1158.github.io/2017/07/React-Native-Custom-Measuring
ReactTextShadowNode ReactTextInputShadowNode
LayoutShadowNode
ReactBaseTextShadowNode
・・・・・・
ReactShadowNodeImpl
Yoga
LayoutShadowNode
ReactSliderShadowNode ・・・・・・
Yoga
 Facebookが公開しているクロスプラットフォームのレイアウトエンジン
 github: https://github.com/facebook/yoga
 document: https://yogalayout.com/docs
 ReactNativeのレイアウトエンジンYogaの仕組み
 前編: https://blog.engineer.adways.net/entry/2018/08/24/202254
 後編: https://blog.engineer.adways.net/entry/2018/08/31/180000
 続編: https://blog.engineer.adways.net/entry/2018/09/07/193000
LayoutShadowNodeの拡張
public class ShadowNode extends LayoutShadowNode implements YogaMeasureFunction {
public Integer viewTagToShadowNode = 0;
public ShadowNode() {
this.setMeasureFunction(this);
}
@Override
public long measure(
YogaNode node,
float width, YogaMeasureMode widthMode,
float height, YogaMeasureMode heightMode) {
int yogaWidth = 1080;
int yogaHeight = 607;
Integer viewWidth = viewToWidth.get(this.viewTagToShadowNode);
Integer viewHeight = viewToHeight.get(this.viewTagToShadowNode);
if (viewWidth != null && viewHeight != null) {
yogaWidth = viewWidth;
yogaHeight = viewHeight;
}
return YogaMeasureOutput.make(yogaWidth, yogaHeight);
}
}
まとめ
 サードーパーティは便利だけど選定は気をつける
 Yoga、LayoutShadowNodeを用いてサイズを変更している

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

食べログのフロントエンドエンジニアってめっちゃ大変やねん・・・
食べログのフロントエンドエンジニアってめっちゃ大変やねん・・・食べログのフロントエンドエンジニアってめっちゃ大変やねん・・・
食べログのフロントエンドエンジニアってめっちゃ大変やねん・・・
 
脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに
 
Dockerで楽しむ自宅サーバ
Dockerで楽しむ自宅サーバDockerで楽しむ自宅サーバ
Dockerで楽しむ自宅サーバ
 
Infragistics Web Day 2017 - 継続的な開発を支える テスト自動化技術
Infragistics Web Day 2017 - 継続的な開発を支える テスト自動化技術Infragistics Web Day 2017 - 継続的な開発を支える テスト自動化技術
Infragistics Web Day 2017 - 継続的な開発を支える テスト自動化技術
 
20161218 selenium study4
20161218 selenium study420161218 selenium study4
20161218 selenium study4
 
去年のデブサミの「日本Seleniumユーザーコミュニティ」のLTが真面目すぎてイマイチだったので、今年は何とかしようと色々がんばった結果ww
去年のデブサミの「日本Seleniumユーザーコミュニティ」のLTが真面目すぎてイマイチだったので、今年は何とかしようと色々がんばった結果ww去年のデブサミの「日本Seleniumユーザーコミュニティ」のLTが真面目すぎてイマイチだったので、今年は何とかしようと色々がんばった結果ww
去年のデブサミの「日本Seleniumユーザーコミュニティ」のLTが真面目すぎてイマイチだったので、今年は何とかしようと色々がんばった結果ww
 
Androidアプリ開発のテスト環境
Androidアプリ開発のテスト環境Androidアプリ開発のテスト環境
Androidアプリ開発のテスト環境
 
Unity(再)入門
Unity(再)入門Unity(再)入門
Unity(再)入門
 
Jenkins Bootcamp Premiumのご紹介 in デブサミ2016冬
Jenkins Bootcamp Premiumのご紹介 in デブサミ2016冬Jenkins Bootcamp Premiumのご紹介 in デブサミ2016冬
Jenkins Bootcamp Premiumのご紹介 in デブサミ2016冬
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略
 
SI-Toolkitでテスト自動化を実現する現場で遭遇したこと
SI-Toolkitでテスト自動化を実現する現場で遭遇したことSI-Toolkitでテスト自動化を実現する現場で遭遇したこと
SI-Toolkitでテスト自動化を実現する現場で遭遇したこと
 
Cordovaコトハジメ( Html5fun×senchUG )
Cordovaコトハジメ( Html5fun×senchUG )Cordovaコトハジメ( Html5fun×senchUG )
Cordovaコトハジメ( Html5fun×senchUG )
 
プログラムで映像をつくるとは?? ~超入門編~
プログラムで映像をつくるとは?? ~超入門編~プログラムで映像をつくるとは?? ~超入門編~
プログラムで映像をつくるとは?? ~超入門編~
 
JSオジサン openframeworks emscripten
JSオジサン openframeworks emscriptenJSオジサン openframeworks emscripten
JSオジサン openframeworks emscripten
 
サイドプロジェクトで使う Azure DevOps
サイドプロジェクトで使う Azure DevOpsサイドプロジェクトで使う Azure DevOps
サイドプロジェクトで使う Azure DevOps
 
Selenium boot campの紹介
Selenium boot campの紹介Selenium boot campの紹介
Selenium boot campの紹介
 
快適なVRコンテンツ制作に必要な情報源のまとめ
快適なVRコンテンツ制作に必要な情報源のまとめ快適なVRコンテンツ制作に必要な情報源のまとめ
快適なVRコンテンツ制作に必要な情報源のまとめ
 
スマホアプリディレクターが考えていること
スマホアプリディレクターが考えていることスマホアプリディレクターが考えていること
スマホアプリディレクターが考えていること
 
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
 
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
 

Similar a Native modules and ui components

第8回 福岡西区勉強会
第8回 福岡西区勉強会第8回 福岡西区勉強会
第8回 福岡西区勉強会
Shinya Kinoshita
 
ABC2012Spring 20120324
ABC2012Spring 20120324ABC2012Spring 20120324
ABC2012Spring 20120324
Tak Inamori
 
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
Yuki Ando
 

Similar a Native modules and ui components (20)

Unityゲームにオンラインランキングとゴースト機能を追加しよう!
Unityゲームにオンラインランキングとゴースト機能を追加しよう!Unityゲームにオンラインランキングとゴースト機能を追加しよう!
Unityゲームにオンラインランキングとゴースト機能を追加しよう!
 
ToolChainを使った次世代DevOps環境の作り方
ToolChainを使った次世代DevOps環境の作り方ToolChainを使った次世代DevOps環境の作り方
ToolChainを使った次世代DevOps環境の作り方
 
Embedded Webで加速するWeb of Things
Embedded Webで加速するWeb of ThingsEmbedded Webで加速するWeb of Things
Embedded Webで加速するWeb of Things
 
NET MAUI for .NET 7 for iOS, Android app development
 NET MAUI for .NET 7 for iOS, Android app development  NET MAUI for .NET 7 for iOS, Android app development
NET MAUI for .NET 7 for iOS, Android app development
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0
 
MuleアプリケーションのCI/CD
MuleアプリケーションのCI/CDMuleアプリケーションのCI/CD
MuleアプリケーションのCI/CD
 
第8回 福岡西区勉強会
第8回 福岡西区勉強会第8回 福岡西区勉強会
第8回 福岡西区勉強会
 
ネイティブアプリ開発を加速する、モダンバックエンドとのタイアップ手法
ネイティブアプリ開発を加速する、モダンバックエンドとのタイアップ手法ネイティブアプリ開発を加速する、モダンバックエンドとのタイアップ手法
ネイティブアプリ開発を加速する、モダンバックエンドとのタイアップ手法
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
 
GAIS 「生成AI人材育成・教育WGについて」
GAIS 「生成AI人材育成・教育WGについて」GAIS 「生成AI人材育成・教育WGについて」
GAIS 「生成AI人材育成・教育WGについて」
 
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
 
Visual Studio を使わず .NET する
Visual Studio を使わず .NET するVisual Studio を使わず .NET する
Visual Studio を使わず .NET する
 
ABC2012Spring 20120324
ABC2012Spring 20120324ABC2012Spring 20120324
ABC2012Spring 20120324
 
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
 
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
 
スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向
 
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
 
20140523 jQuery基礎 (HTML5ビギナーズ)
20140523 jQuery基礎 (HTML5ビギナーズ)20140523 jQuery基礎 (HTML5ビギナーズ)
20140523 jQuery基礎 (HTML5ビギナーズ)
 
HTML5が創り出す新たな世界
HTML5が創り出す新たな世界HTML5が創り出す新たな世界
HTML5が創り出す新たな世界
 

Último

Último (11)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 

Native modules and ui components