
ãããŠãfacebookã¯ReactJSãäœããŸããã èªåã§ãã£ãããä¿®æ£ããŸãã ãããŠããã¯èµ·ãã£ãã javascriptã®ããã¥ãŒããããã€ã³ã¿ãŒãã§ã€ã¹ãæ§ç¯ãããšããã¢ã€ãã¢ã¯éåžžã«åªããŠããããšãå€æãããããfacebookã¯ãã¬ãŒã ã¯ãŒã¯ãã¢ãã€ã«ãã©ãããã©ãŒã ã«ç§»æ€ããæåã«iOSçšã®React Nativeãäœæãã6ãæåŸã«AndroidãäœæããŸããã WebããçãŸãããã¯ãããžãŒã¯ãJavaã.NETãªã©ã®ã¢ã³ã¹ã¿ãŒã倱æããããšãå®è¡ã§ããŸããïŒ
倢ãå¶ãïŒäžåºŠæžããŠãã©ãã§ãèµ°ã

ãããŠãããã€ãã®ããšãèµ·ãããŸããã 圌ãã¯ã¢ãã€ã«ãã©ãããã©ãŒã ããæã¡ãããããŒã®äººæ°ãé«ãŸãããœãããŠã§ã¢ã®è³Œå ¥ãšã¬ã³ã¿ã«ãå€§å¹ ã«ç°¡çŽ åãããŸããã ããã°ã©ã ã¯ãã³ã³ãã¥ãŒã¿ãŒãšã³ãžãã¢ã ãã§ãªããå šå¡ã䜿çšããããã«ãªããŸããã ãããŠçªç¶ãé·å¹Žã®Javaã¹ããŒã¬ã³ãäžåºŠæžãã ãã§ã©ãã§ãå®è¡ããããéåžžã«éèŠã«ãªã£ãããšãå€æããŸããã éè¡ããã¹ã¿ãŒããã¯ãŸã§ãèšå€§ãªæ°ã®äŒæ¥ãã¢ããªã±ãŒã·ã§ã³ãå¿ èŠãšããŠããŸããã æãŸãã-ããã«ãã¹ãŠã®é¢é£ãã©ãããã©ãŒã ã«ã å®ããŠéåžžã«æãŸããã ãããŠãããä»ãªãã
èšèšã¬ã€ããšå®è¡é床ãããªãã®å€¢ã劚ããŸã
éçºè ã¯å®çžŸã®ããããŒã«ããã»ãããæãèœãšããŸãããããã¹ãŠãããã»ã©åçŽã§ã¯ãªãããšãå€æããŸããã ã¢ãã€ã«ãã©ãããã©ãŒã ã§å©çšå¯èœãªã¯ãã¹ãã©ãããã©ãŒã éçºæè¡ã®å€§éšåã¯ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹èªäœãæç»ããŸãã ãªããæåã«ã圌ã¯å€åœäººã«èŠããã®ã§ããããã ãããŠã第äºã«ãé床ãäœäžããŸãã ããã«ãæµãããããªæœè±¡åããè¿œå ããŠãã ãããé ããæ©ãããè€éãªã¢ããªã±ãŒã·ã§ã³ã¯ã¯ãã¹ãã©ãããã©ãŒã ãã¬ãŒã ã¯ãŒã¯ã®ãã¬ãŒã ã¯ãŒã¯ãè¶ ãããã®ããã€ãã£ããã³ãŒãã§æ¡åŒµããå¿ èŠããããæ¡åŒµæ©èœãšãã¬ãŒã ã¯ãŒã¯èªäœã®çžäºäœçšã®åé¡ã«ã€ãªããããšããããããŸãã
ãã®åé¡ã解決ããããã«èšèšããããã¬ãŒã ã¯ãŒã¯ãšã©ã€ãã©ãªã¯ããéã®éšã®åŸãããã³ã®ããã«å¢ãå§ããŸããïŒAppceleratorãPhonegapãXamarinãFireMonkeyãNativeScriptã ãããã誰ãç¹å¥ãªäººæ°ãç²åŸããããšã¯ãªããã€ã³ã¿ãŒãããäžã®èšäºã¯ã ãã¬ãŒã ã¯ãŒã¯ã®åã®ããšã«ã¯ã©ã€ã¢ã³ããã³ã¯ãäœãå§ãã1幎åŸã«ãããæšãŠãŠãã€ãã£ãã«åãæ¿ããŸããããªã©ã®ã€ã³ã¿ãŒãããäžã®èšäºãçŸãå§ããŸããã
Reactã¯ã¬ã¹ãã³ã·ããªWeb-to-Mobileãã¶ã€ã³ããããããŸã

æªéã¯çŽ°éšã«é ããŠããŸããã ããã¥ãŒããããã€ã³ã¿ãŒãã§ãŒã¹ã®ã¢ã»ã³ããªãšããŠã§ãããåçšãããé©å¿ãèšèšã¢ãããŒãã«ãããèå³æ·±ãããšãå¯èœã«ãªããŸããã Reactã䜿çšãããšãWebã®å Žåãšåæ§ã«ãã€ã³ã¿ãŒãã§ã€ã¹ãæå³çã«åŒ·å¶ãããŸãã iOSãŸãã¯Androidã®ã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ã§æäœãã代ããã«ããã¶ã€ããŒã¯è«çã³ã³ããŒãã³ãïŒãç»é¢ãããã¿ã€ãã«ããããªã¹ãããããã¿ã³ãïŒããã€ã³ã¿ãŒãã§ã€ã¹ãäœæããŸãã ãããŠããã§ã«ã³ã³ãã€ã«ãããã€ã³ã¿ãŒãã§ãŒã¹ã¯ãã¡ã€ã«ã§ç¹å®ã®ãã©ãããã©ãŒã ã«ããããããŸãïŒæ°è¡ã®ã³ãŒãã¯ãé²è¡ãã³ã³ããŒãã³ãããŠã§ãçšã®HTMLã¿ã°ã®ã»ãããAndroidçšã®ProgressBarAndroidããã³iosçšã®ProgressViewIOSã«å€æããŸãã
ãã®ã¢ãããŒãã¯éåžžã«äŸ¿å©ã§ããæåã¯ãã€ã³ã¿ãŒãã§ã€ã¹ã¯ããã«ãŠãããŒãµã«ãããã¯ã§æ§æããããã®åŸãå®éã«å¿ èŠãªå Žåã«ã®ã¿åãã©ãããã©ãŒã ã§ç¢ºå®ãããŸãã ããã¯ããŠãããŒãµã«ããŽã ãã€ã³ã¿ãŒãã§ãŒã¹ãæåã«èª²ããã次ã«@mediaã®å©ããåããŠãé»è©±ç»é¢ãã¿ãã¬ããç»é¢ãããã³å€§ç»é¢çšã«ç¢ºå®ãããã¢ãããã£ãã¬ã€ã¢ãŠããæãèµ·ããããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®ãããã¿ã€ãã¯æ°æ¥ã§å®æããŸã
äŸãšããŠãReact Native SDKã®ãã¹ãã¢ããªã±ãŒã·ã§ã³ãèŠãŠã¿ãŸãããã SDKã䜿çšãããšãç¡æã®ãã¢ããŒãã¢ãå«ãéåžžã®é話ãŸãã¯ãããªé話ãéåä¿¡ã§ããŸãã ãããŠãã¢ããªã±ãŒã·ã§ã³ã¯ããã䜿çšããæ¹æ³ã瀺ããŸãïŒãã°ã€ã³ãŠã£ã³ããŠãçªå·ãŸãã¯ååãå ¥åããããã®ãŠã£ã³ããŠããã³ãŒã«ãã¿ã€ãã®ãã¿ã³ã®æ£åšãããããªããªã³ã«ããããããã€ã¯ããªãã«ããããªã©ã ãœãŒã¹ãèŠããšãäž¡æ¹ã®ãã©ãããã©ãŒã ã§åäœãã1ã€ã®ã³ãŒãã衚瀺ãããŸãã ã³ãŒãã¯ãç§ãã¡ãæãã§ããå Žæã§ã®ã¿ç°ãªããŸãã ããšãã°ãã¹ã€ããã®ãã€ãã£ãããŒãžã§ã³ã䜿çšãããããããã®å®è£ ã¯ColorSwitch.ios.jsãšColorSwitch.android.jsã® 2ã€ã®ãã¡ã€ã«ã«åå²ãããŸãã
ãã¢ã¢ããªã±ãŒã·ã§ã³ã¯2æ¥ã§äœæãããŸããã iOSãšAndroidã®ããäžã ãŸããWebçšã®ããŒãžã§ã³ãäœæããå Žåã¯ãããã«1æ¥ããããŸãïŒã¯ããweb SDKããããã¯ããwebRTCã®éæ³ã®ãããã§ãã©ãŠã¶ãŒããåŒã³åºãããšãã§ããŸãïŒã ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ãdivã«çœ®ãæããWebããŒãžã§ã³ãšã¢ãã€ã«ããŒãžã§ã³ã§ç°ãªãSDKåŒã³åºããå€æŽããã ãã§ãã
<View style={styles.settings_table}> <View style={styles.settings_switch}> <Text style={styles.settings_label}>Peer-to-peer</Text> <ColorSwitch defaultValue={settings_p2p} valueUpdate={(value) => {settings_p2p = value}}/> </View> <View style={styles.settings_switch}> <Text style={styles.settings_label}>Video</Text> <ColorSwitch defaultValue={settings_video} valueUpdate={(e) => this.videoSwitch(e)}/> </View> </View>
ããããã³ãŒãã¹ãããã
å®éã«ã¯ãã¹ãŠããšãŠãã¹ã ãŒãºã§ããïŒ
æ¯æããŸããŸãå€ãã®äŒæ¥ãReactJSãšReact Nativeã䜿çšããŠããŸãã ãã ãããã®æè¡ã¯ãŸã éåžžã«æ°ããïŒAndroidããŒãžã§ã³ã¯æ°ãæåã®ãã®ã§ãïŒããã¹ãŠã®ãå°å çŸæ£ããå«ãŸããŠããŸãã
ãŸãã ãç®±ããåºããŠããã«ãå©çšã§ããå°æ°ã®ã€ã³ã¿ãŒãã§ãŒã¹èŠçŽ ã«æ³šç®ããããšæããŸã ã iosãšandroidã«ã¯ã1åããŒã¹ã®ãŠãããŒãµã«ãš10ã®ç¹å®ããããŸãã ãã€ãã£ãèŠçŽ ã¯ç°¡åã«ã©ããã§ããŸãããããã«ã¯javaãobjective-cããŸãã¯swiftã®ç¥èãå¿ èŠã§ãã å¥ã®æ¹æ³ã¯ãGitHubã§å©çšå¯èœãªäœçŸãã®æ奜家ãäœæããã¢ã€ãã ã®1ã€ã䜿çšããããšã§ãã ãããããªãŒãã³ãœãŒã¹ã¯ç¹å®ã®ãã®ã§ã-äžæ³šæã«æžãããèŠçŽ ã«ã¯ãèªåã§è¡ãå Žåãããå€ãã®åé¡ãããå ŽåããããŸãã
æè¡ã®è¥ããå©çšå¯èœãªã©ã€ãã©ãªãšãã€ã³ããŒã®éžæãå¶éããŸãã React Nativeã®çºè¡šã®æç¹ã§ãiosãšandroidã®ãã€ãã£ãSDKãé·ãéãããŸããã ããã䜿çšããŠãããã«ç§»æ€ãéå§ããwebRTCãReact Nativeã§åããŠããã¯ããŸããã ããããããã§ãããªãæéãããããŸãããããã¥ã¡ã³ããå匷ããŠããéãã³ãŒããæžããŠããéããã¹ãŠããã¹ãããŠããéãç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ãèšå®ããŠããé-æ·±å»ãªã©ã€ãã©ãªã®å Žåãããã¯1ãæ以äžã®è³ªåã«ãªããŸãã
ãŸãããã¬ãŒã ã¯ãŒã¯ã®éçºé床ãéçºè ã®æã«æž¡ããšã¯éããŸããã ææ°ããŒãžã§ã³ã«æŽæ°ãããšããã°ã®ãšã©ãŒã ãã§ãªããèŠåã衚瀺ãããã«ããããªã®åçãçªç¶åæ¢ããŸããã ã³ãŒããé·æéæãäžãããšãããäœè ãAndroidçšã®ReactPropããã¡ããã©ãå¥ã®å Žæã«ç§»åããããšãããããŸããã ãã¡ããããã®ãããªå€æŽã¯é »ç¹ã«çºçããããã§ã¯ãããŸããããç¹ã«AndroidããŒãžã§ã³ã§ã¯äŸç¶ãšããŠçºçããŸãã
import com.facebook.react.uimanager.*; import com.facebook.react.uimanager.annotations.ReactProp; public class VoxImplantViewManager extends SimpleViewManager<VoxImplantRendererView>
çµè«
ãã®æè¡ã¯éåžžã«ææã§ãããè¥ãã§ãã çŽæ¥ã®ç«¶åä»ç€Ÿã®äžã§ããã€ã¯ããœããã®ãwindows universal appsããšããååãä»ããããšãã§ããŸããã€ã³ã¿ãŒãã§ã€ã¹ã®ã»ãã³ãã£ãã¯ã¬ã€ã¢ãŠããšããæŠå¿µã¯ãæè¿é£ç¶æè¡ã«ãã£ãŠåŒ·åãããŸããã ãXamarin.Formsãã¯ãããŠãããŒãµã«ãããã³ããã©ãããã©ãŒã åºæã®ãã€ã³ã¿ãŒãã§ãŒã¹èŠçŽ ãåããåæ§ã®ãœãªã¥ãŒã·ã§ã³ãæäŸããŸãã ããããReactã«ã¯ããã€ãã®å©ç¹ããããŸãããã©ãããã©ãŒã ã®1ã€ãšããŠã®Webãéåžžã«äººæ°ã®ããJavaScriptãããã»ã©äººæ°ã®ãªãnode.jsããŒã«ãã§ãŒã³ãç¡æãFacebookã®ãµããŒããè¿œå èšå®ãªãã®ãããããªããŒããã§ãã
React Nativeã䜿çšããŠãWebã¢ããªã±ãŒã·ã§ã³ã®ã¢ãã€ã«ããŒãžã§ã³ããã°ãããããã¿ã€ãåã§ããããã«ãªã£ããšèšããŸãã ããã«ãWebã¢ããªã±ãŒã·ã§ã³ãæ¢ã«ReactJSã§èšè¿°ãããŠããå Žåã転éé床ã¯å€§å¹ ã«åäžããŸãã åºèã§ã®åºçã䌎ãè€éãªã¢ããªã±ãŒã·ã§ã³ã®äœæã¯ãã§ã«å¯èœã§ãããã®ã£ã©ãªãŒã§æ確ã«èŠãããšãã§ããŸã ã ããããæçµçãªãé ã«æµ®ãã¶ããåŒãããåºãããŠãjavaãšobjective-cã«ç»ãå¿ èŠããããšããäºå®ã«åããŠãã ããã
PSãããŠã圌ãã¯åœŒãèªèº«ã®ããã«ãã£ããã決ããŠä¿®çããŸããã§ããã ããããããã«ã¯ããã£ã³ããŒã³ããããŠå®éã«å ŽæãåªãããŠããŸãã