ライブエクスペリエンス事業部 エンジニアの高松(@shimpeiws)です。 2017/3/13 ~ 14の期間で開催中のReact Conf 2017に参加するためにサンノゼに来ています。
つい数時間前に終わったばかりの1日目のレポートを現地からお送りします!
- 会場の様子
- 1日目の感想
- Keynote (Tom Occhino, Jing Chen, Sebastian Markbage)
- A Cartoon Intro to Fiber (Lin Clark)
- Next.js: Universal React Made Easy and Simple (Guillermo Rauch)
- React + ES.next = ♥ (Ben Ilegbodu)
- MobX vs Redux: Comparing the Opposing Paradigms (Preethi Kasireddy)
- Type Systems Will Make You a Better JavaScript Developer (Jared Forsyth)
- React Native in the “Brown Field” (Leland Richardson)
- Moving Beyond Animations to User Interactions at 60 FPS in React Native (Tal Kol)
会場の様子
サンノゼ空港近くのSanta Clara Marriottというホテルでの開催です。
インテル博物館がほど近くにあり、IT系企業が多くある地域のようです。
1日目の感想
実際に運用してえられた知見に基づいた実践的な内容が多い一日でした。
全体を通してパフォーマンスの話題が多かったことが印象に残りました。
React Nativeもあり、アニメーションや高度なインタラクションの実現がReactに求められていることが背景にありそうです。
Sebastian Markbageさんのキーノートが特に象徴的でしたが、
SPAの構築でもinitial viewを意識したchunk化やキャッシュの利用などといった、
きめ細やかな設計・実装をすることによってUXのレベルを上げようとする流れを感じました。
実装は、大変になりますね…
個人的には“Next.js: Universal React Made Easy and Simple"の発表が興味深かったです。
Next.jsは"SSRできる環境を簡単に用意できるもの"程度の理解でしたが、
prefetchやオフラインcacheの機構などもあるようで、
これからのWebの要素がちりばめた非常に挑戦的なライブラリだと感じました。
ここからは各セッションの概要とメモです。
セッションは全てストリーミングされ、録画もされているそうなので、録画が後日公開されると思います。
気になるセッションがあれば、後日録画でチェックしてください!!!
Can't wait...all sessions will be streamed and recorded if you're not onsite #reactjs #reactconf #reactnative https://t.co/ro1iakMZtF pic.twitter.com/SSU74eGVA8
— Manny Henri (@mannyhenri) 2017年3月13日
Keynote (Tom Occhino, Jing Chen, Sebastian Markbage)
概要
- FacebookのReactに関わる3人のスピーカーからのキーノート
Tom Occhino
- 3度目のReact Conf
- ReactやReact Native、それを支えるコミュニティも非常に大きくなってきた
- これからもReactを進化させ、革新させていく
Jing Chen
- Facebookでは多くのアプリでReact Nativeを使っている
- Facebook Ads ManagerなどでReact Nativeを使ってきたが、Facebook本体のアプリでも部分的にReact Nativeに移行している
- React Nativeは最初はWeb Viewのリプレイス、次に更新頻度が多いView、View全体へと適用してきた
- Cross Platform、 Cross Appでも使えると思っている
- Cross Appとはコンポーネントをアプリ間で共通化することを指していた
- React Nativeを使って、フィードバックしてほしい。コミュニティを育てていきたい
Sebastian Markbage
- “React Performance End-to-End” というタイトル
- Reactでの実装は実際に描画されるまでのステップが多く、ボトルネックを生みやすい (Network -> Parse -> Compile -> Heap Init -> Render)
- それぞれのステップで最適化させていこう
- NetworkはIO、それ以降はCPUボトルネックになる。断片化(Chunk)を軸に最適化していくことができる
A Cartoon Intro to Fiber (Lin Clark)
概要
- Code CartoonsのLin Clarkさんの発表
- Reactのアルゴリズムの再実装であるFiberの仕組みをイラストで説明する内容
- わかりやすい、はずだが、自分のFiberや既存のReactのアルゴリズムの知識がたりないため、あまり理解できず…
Wanna see a cartoon intro to Fiber?
— Code Cartoons (@codecartoons) 2017年3月13日
🗓 today at 11:30 PDT#ReactConf livestream: https://t.co/U5BPbS4DSu pic.twitter.com/aaNALgvBal
メモ
- 二段階のPhaseがある
- Phase1 (render / reconciliation)、中断可能
- Phase2 (commit)、中断不可能
- priorityがあり、各priority毎にRenderが繰り返される
Next.js: Universal React Made Easy and Simple (Guillermo Rauch)
概要
- ZeitのGuillermo RauchさんからNext.jsのイントロダクションと特徴について
- スライド: https://deck.now.sh/
- 東京Node学園祭2016でもZeitのメンバーのNaoyuki Kanezawaさんから発表がありましたね (Introduce Now and Next.js(YouTube))
- 多くのサンプルはGitHubリポジトリのexampleを参照すれば良さそう (https://github.com/zeit/next.js/tree/master/examples)
メモ
- シンプルかつ、パワフルで動的なリアルタイムアプリケーションを作りたい
- Universalなプログラミングモデル(React)と言語(JS)を使って実現したい
- Next.jsのサンプルとしてHacker Newsを真似たHacker Nextを作った
- zeit.coは1年間 Next.jsで運用されている
- Next.jsの原理やパターン、将来的な方向性を示す
React + ES.next = ♥ (Ben Ilegbodu)
概要
- ES2015やES.nextのフィーチャーを有効活用し、Reactのコードをもっと上手く書こうというTips集的な内容
- ES5に慣れた人には良い資料になりそう
- 発表の冒頭で全員立ち上がってスクワットタイムがあったり、GIFアニメーションを多用したスライドがオーディエンスをつかんでいた
Slides for my React + https://t.co/XzKo2nc03R = ♥ talk at #reactconf just for you!https://t.co/hgmKiiSb0O pic.twitter.com/LADUu0FeFw
— Ben Ilegbodu 🏀 (@benmvp) 2017年3月13日
メモ
Desctucturing(分割代入)
let {comments} = this.state
みたいに書ける- 名前付き引数に使える
function MyComponent({children, style}) { return ( <div style={style}>{children}</div> ) }
Spread Operator
ArrayやObjectを...foo
で展開できる
let {comments} = this.state let newComment = {...comment, id: 123} let newComments = [...comments, newCOmments]
applyがいらなくなる
Math.max(...arrayOfValues) // ES2015 Math.max.apply(null, [1,2,3]) //ES5
objectに関して、_.assign
もいらなくなる
Arrow Functions
.bind(this)
が省ける
Promises
Fetch APIとPromiseのコード例 メソッドチェーンしやすくて良い
Async Functions
async/awaitキーワード
MobX vs Redux: Comparing the Opposing Paradigms (Preethi Kasireddy)
概要
- MobxとReduxを比較しながら、それぞれの使い所を解説する内容
- Mobxに関してかなり弱気な雰囲気だった
メモ
- ReduxもMobxもstate managementのライブラリ
- ReduxはFluxアーキテクチャの実装、storeはピュアなJS Objectで、Reduerで分割する
- MobxはStoreがRxで、Viewの該当要素をobserveしている
- 学習コストの低さ、凝縮性(ドメインクラスが作れるから)はMobxの方が優れている
- スケーラビリティと保守性の良さ、テスタビリティなどはReduxの方が優れている
- シンプルなもの、スモールチームでの開発、プロトタイプにはMobxがオススメ
- 複雑なものにはReduxが良い
Type Systems Will Make You a Better JavaScript Developer (Jared Forsyth)
概要
- Khan Academyのエンジニアによる、“Flowはいいぞ"という話
- ReactのProptypesをランタイムの型定義として捉えているのが新しい視点で新鮮だった
Here are the slides for my #reactconf talk! "Type Systems will make you a better JavaScript programmer"
— Jared Forsyth (@jaredforsyth) 2017年3月13日
https://t.co/KHmOauTNAE pic.twitter.com/jeY6vp3CdI
メモ
- JSでデバッグしていて、何でエラーになってるのかわからない時や、逆に何で動いているのかが分からないときがままある
- もっと型エラーが出て欲しい
- ツールとしては以下のような分類だが、Static type checkingがオススメ
- linters
- チェックツールを作る
- 実行時の型チェック(ReactのProptypesもこれに含む)
- Static type checking (Flow)
- 特にstateに型を書くと不正な状態を防げるので、stateは型を先に書くのがオススメ
React Native in the “Brown Field” (Leland Richardson)
概要
- Airbnbでは2015年からReact Nativeを試して、2016年からProductionでも利用を開始した
- Airbnbで開発し、OSS化したnative-navigationを使ったコード例を示しながら、クロスプラットフォームのアプリケーションの実装例を解説していた
- タイトルのBrown FieldはGreen Fieldの対義として使っているようで、既存のネイティブアプリケーションとReact Nativeを同居させるイメージだと思われる
We just open sourced our React Native navigation library, which implements navigation natively. #ReactConf https://t.co/sM1PcFavXu
— spike.js #ReactConf (@spikebrehm) 2017年3月14日
メモ
- 2015年の発表後、すぐにReact Nativeを個人的に使い始めた
- 2016年にはAirbnbとしてもReact Natibeに取り組み始めて、Productionにもリリースした
- アプリ内ではSwift / Javaのネイティブアプリケーション用のコードと共存しているが、まだJSの割合は少ない
- ナビゲーションバーやタブ、トランジションなどはプラットフォーム固有の部分が多く共通化するのが難しい
- 既存のライブラリもたくさんあるが、自社で独自に開発してOSS化した
Moving Beyond Animations to User Interactions at 60 FPS in React Native (Tal Kol)
概要
- React Nativeはラスト1マイルをこえられるのか?が大きなテーマだ
- React Nativeにとってのラスト1マイル = 60FPSを常に出せるなめらかなアニメーションの実現で、ネイティブらしいmimic realityを演出するのに必須な要素である
- react-native-interactable にサンプルがある
メモ
- React Nativeはラスト1マイルをこえられるのか?
- 手軽に素早く作れるのは分かるが、ネイティブを本当に置き換えられるのか?
- そのためには以下2点が必須
- 60FPSでぬるぬる動くアニメーション
- mimic realityを与える、ダイナミックなインタラクション
- inboxの行スライドや、Tinderライクなswipeなどを例にだしていた
- これらをJSでつくれるのか?
- 実際的には多少のNativeのスキルセットも必要になる
- Declarative API(宣言的なAPI)がラスト1マイルを渡りきる鍵になる
- Enrich API
- 豊かな動きを演出する重力や磁石などの効果のAPI設計について解説
ライブエクスペリエンス事業部では一緒にReactで開発してくれる仲間を募集しています!!!