react nativeでtwitterクライアントを作ってみよう

38
React Native で Twitter ででででででで でででででで ででででででででで でで でで

Upload: dcubeio

Post on 07-Jan-2017

373 views

Category:

Software


0 download

TRANSCRIPT

Page 1: React NativeでTwitterクライアントを作ってみよう

React Native でTwitter クライアントを作ってみよう株式会社ビズリーチ増田 純也

Page 2: React NativeでTwitterクライアントを作ってみよう

自己紹介• 増田純也( 27♂ )• 株式会社ビズリーチ新規事業でエンジニア兼スクラムマスター• 最近は React Native + Firebase で遊んでます• ねこ

Page 3: React NativeでTwitterクライアントを作ってみよう

今日のゴール• React Native で Component が作れる• Twitter クライアントからつぶやけている

Page 4: React NativeでTwitterクライアントを作ってみよう

進め方• 準備• React Native?

• サンプルプロジェクトを動かしながら解説

Page 5: React NativeでTwitterクライアントを作ってみよう

準備 / Twitter API

Page 6: React NativeでTwitterクライアントを作ってみよう

Twitter API を叩く準備• Twitter App を作成しましょう

https://apps.twitter.com

• Callback URL は 「 https://example.com 」にしてください。サンプルプロジェクトが依存しているためです。それ以外の項目は任意の内容で OK

• 内容は登録後に編集できるので、あまり深く考えなくて OK です

Page 7: React NativeでTwitterクライアントを作ってみよう

Twitter API を叩く準備

この項目だけは必ずこの通りに入力(サンプルプロジェクトの仕様)

Page 8: React NativeでTwitterクライアントを作ってみよう

Twitter API を叩く準備• 登録後「 Keys and Access Token 」よりキーを入手(あとで使います)

• Consumer Key (API Key)

• Consumer Secret (API Secret)

Page 9: React NativeでTwitterクライアントを作ってみよう

準備 / React Native

Page 10: React NativeでTwitterクライアントを作ってみよう

サンプルプロジェクトを動かす• 任意のディレクトリで下記を実行

• ターミナルと iOS Simulator が起動すれば成功です

$ git clone https://github.com/mamamama-su-da/twitter-sample.git

$ cd twitter-sample

$ npm install

$ react-native run-iosma は 4 回

Page 11: React NativeでTwitterクライアントを作ってみよう

サンプルプロジェクトを動かす• src/config/config.json に先ほど作った Twitter App のキーを設定

• 下記のコマンドを実行し、ターミナルと iOS Simulator が起動すれば成功です

{ "twitterApp": { "consumerKey": "XXXXXXXXXXXXXXXXXXXX", "consumerSecret": "XXXXXXXXXXXXXXXXXXXX" }}

$ react-native run-ios

Page 12: React NativeでTwitterクライアントを作ってみよう

サンプルプロジェクトについて

Page 13: React NativeでTwitterクライアントを作ってみよう

サンプルプロジェクトの使い方• このサンプルでは、学習用に少しずつ要素を追加したサンプルのコンポーネントを用意しています。

React Native を iOS で動かす際のエントリポイントとなる index.ios.js の中で、 HelloWorld コンポーネントを読み込んであるので、順番に次のコンポーネントを読み込むように書き換えつつ、コードを読みながら動きを確認していくことで少しずつReact Native の特長をつかんでいきましょう

• React Native では Simulator 上で Cmd + R を押すことでリロードができます

Page 14: React NativeでTwitterクライアントを作ってみよう

index.ios.js で試してもらいたいコンポーネント• 学習用サンプル( src/samples )

HelloWorld.js : Style 、 View 、 TextTweet1.js : PropsTweet2.js : StateTweet3.js : ListViewTweet4.js : ScrollView

• 実践サンプル( src/containers )AppRoot.js : WebView 、 TextInput など      ログイン後、 Post を試してみてください

Page 15: React NativeでTwitterクライアントを作ってみよう

補足• 実践サンプルを動かす際、 Post するとエラーになってしまう場合があります。トークンの Access Level が Read only になってしまっている可能性があるので、そのような場合には

Twitter App の「 Keys and Access Token 」画面で「 Regenerate My Access Token and Token Secret 」してから再度アプリで認証し直すと直るかもです

Page 16: React NativeでTwitterクライアントを作ってみよう

React Native

Page 17: React NativeでTwitterクライアントを作ってみよう

React Native ?• JavaScript で iOS や Android 向けのネイティブアプリを開発するための Facebook 製フレームワーク• React.js / ES2015 を使って実装できる• 実際に Facebook や Instagram に使われている

Page 18: React NativeでTwitterクライアントを作ってみよう

良いところ• Swift や Objective-C 、 Java を知らなくても JS だけでネイティブアプリが作れる!• 画面のロジックを iOS と Android で使いまわせる。レイアウトも多少は使いまわせる!• 修正しても再ビルド不要なので開発効率が良い!

Cmd + R でリロード!

Page 19: React NativeでTwitterクライアントを作ってみよう

ツライところ• 詰まった時に情報が少ない(あるいは英語)• メジャーバージョンではないため、破壊的アップデートもまだ頻繁に起きる• JavaScript がシングルスレッドで動作するため、パフォーマンスを出しにくい時がある

Page 20: React NativeでTwitterクライアントを作ってみよう

Component の基本

Page 21: React NativeでTwitterクライアントを作ってみよう

Hello Worldimport React, {Component} from 'react';import { View, Text,} from 'react-native';

export default class extends Component { render() { return ( <View style={{ marginTop: 20 }}> <Text>Hello World!!</Text> </View> ); }}

Page 22: React NativeでTwitterクライアントを作ってみよう

Component :画面部品• extends Component した class を実装することで新たにコンポーネントを定義することができる• 画面の部品であるコンポーネントを組み合わせていくことでアプリケーションを作っていく• 描画される内容は render 関数に実装する

Page 23: React NativeでTwitterクライアントを作ってみよう

Style :表現• コンポーネントの表示の仕方を指定する、コンポーネントの基本的な属性。 style を指定したオブジェクトを渡す• html の style とほぼ同じ内容が書ける• Selector のようなものはないので、要素ごとに一つ一つ style を指定する必要がある

Page 24: React NativeでTwitterクライアントを作ってみよう

Props :属性• 親から子コンポーネントに渡される属性値をもつオブジェクト• 渡された値は this.props.xxxx の形式で取り出せる• static propTypes で渡されるべき値の型を定義できる• 値の管理は親コンポーネントが行うので、値を書き換えてはいけない

Page 25: React NativeでTwitterクライアントを作ってみよう

State :状態• コンポーネントの状態を管理するためのオブジェクト• constructor にて this.state = { xxx: yyy } で定義する

this.state.xxx で取り出すことができる• this.setSate({ xxx: zzz }) で更新する更新すると render 関数が再実行され、状態が表示に反映される

Page 26: React NativeでTwitterクライアントを作ってみよう

Component いろいろ

Page 27: React NativeでTwitterクライアントを作ってみよう

View• 最も基本的なコンポーネント• html でいう div のように、他のコンポーネントを入れ子にすることで、レイアウトを制御するために使う

Page 28: React NativeでTwitterクライアントを作ってみよう

Text• 文字列を表示するコンポーネント• 文字列をマークアップすると表示できる

Page 29: React NativeでTwitterクライアントを作ってみよう

ListView• リスト構造のデータを効率的にレンダリングするためのコンポーネント• DataSource でリストのデータを管理する• renderRow 関数で 1 行のコンポーネントを指定する

Page 30: React NativeでTwitterクライアントを作ってみよう

ScrollView• コンテンツをスクロールできるようにするためのコンポーネント• 下に引っ張ってリロードする機能も提供されている( refreshControl )

Page 31: React NativeでTwitterクライアントを作ってみよう

WebView• Web ブラウザ機能を提供するためのコンポーネント• 戻る / 進む のような遷移の指定はプログラムからできるが、 UI は自分で実装する必要がある

Page 32: React NativeでTwitterクライアントを作ってみよう

TextInput• テキストを入力するコンポーネント• 入力した値は onChangeText で state に同期して使う

Page 33: React NativeでTwitterクライアントを作ってみよう

ストレージ

Page 34: React NativeでTwitterクライアントを作ってみよう

AsyncStorage• アプリケーションを終了しても消えない保存領域アプリを削除すると消える• setItem / getItem で出し入れを行う• データの持ち方は key / value のシンプルな構造• パフォーマンスに難あり。アクセスに 1秒くらいかかる場合も

Page 35: React NativeでTwitterクライアントを作ってみよう

パフォーマンス

Page 36: React NativeでTwitterクライアントを作ってみよう

AsyncStorage 遅い問題• 1秒かかったり体感できるレベルで遅い• AsyncStorage は使わない、という選択

Realm 使うのも良いかもhttps://realm.io/docs/react-native/latest/

• Realm は高速かつ、 RDB のような柔軟性もある

Page 37: React NativeでTwitterクライアントを作ってみよう

ListView 遅い問題• 1 行ずつパラパラと描画される• 操作がブロックされてしまうため、レンダリングが終わるまで他のアクションが動作しない• プロパティ調整でかなり速くなる

initialListSize / pageSize

Page 38: React NativeでTwitterクライアントを作ってみよう

ありがとうございました!!