SlideShare una empresa de Scribd logo
1 de 38
React Nativeで
Twitterクライアントを
作ってみよう
株式会社ビズリーチ
増田 純也
自己紹介
• 増田純也(27♂)
• 株式会社ビズリーチ
新規事業でエンジニア兼スクラムマスター
• 最近は React Native + Firebase で遊んでます
• ねこ
今日のゴール
• React Native で Component が作れる
• Twitterクライアントからつぶやけている
進め方
• 準備
• React Native?
• サンプルプロジェクトを動かしながら解説
準備 / Twitter API
Twitter APIを叩く準備
• Twitter Appを作成しましょう
https://apps.twitter.com
• Callback URLは 「https://example.com」にしてくださ
い。サンプルプロジェクトが依存しているためです。
それ以外の項目は任意の内容でOK
• 内容は登録後に編集できるので、あまり深く考えなく
てOKです
Twitter APIを叩く準備
この項目だけは必ずこの通りに入力
(サンプルプロジェクトの仕様)
Twitter APIを叩く準備
• 登録後「Keys and Access Token」よりキーを入手(あ
とで使います)
• Consumer Key (API Key)
• Consumer Secret (API Secret)
準備 / React Native
サンプルプロジェクトを動かす
• 任意のディレクトリで下記を実行
• ターミナルとiOS Simulator が起動すれば成功です
$ git clone https://github.com/mamamama-su-da/twitter-sample.git
$ cd twitter-sample
$ npm install
$ react-native run-ios
ma は 4回
サンプルプロジェクトを動かす
• src/config/config.json に先ほど作った Twitter App のキ
ーを設定
• 下記のコマンドを実行し、
ターミナルとiOS Simulator が起動すれば成功です
{
"twitterApp": {
"consumerKey": "XXXXXXXXXXXXXXXXXXXX",
"consumerSecret": "XXXXXXXXXXXXXXXXXXXX"
}
}
$ react-native run-ios
サンプルプロジェクトについて
サンプルプロジェクトの使い方
• このサンプルでは、学習用に少しずつ要素を追加したサンプ
ルのコンポーネントを用意しています。
React Native を iOS で動かす際のエントリポイントとなる
index.ios.js の中で、HelloWorld コンポーネントを読み込んで
あるので、順番に次のコンポーネントを読み込むように書き
換えつつ、コードを読みながら動きを確認していくことで少
しずつ
React Native の特長をつかんでいきましょう
• React Native では Simulator 上で Cmd + R を押すことでリロ
ードができます
index.ios.js で試してもらいたいコンポーネント
• 学習用サンプル(src/samples)
HelloWorld.js: Style、View、Text
Tweet1.js: Props
Tweet2.js: State
Tweet3.js: ListView
Tweet4.js: ScrollView
• 実践サンプル(src/containers)
AppRoot.js: WebView、TextInputなど
ログイン後、Post を試してみてください
補足
• 実践サンプルを動かす際、Post するとエラーになって
しまう場合があります。
トークンの Access Level が Read only になってしまっ
ている可能性があるので、そのような場合には
Twitter App の「Keys and Access Token」画面で
「Regenerate My Access Token and Token Secret」
してから再度アプリで認証し直すと直るかもです
React Native
React Native?
• JavaScript で iOS や Android 向けのネイティブアプリ
を開発するためのFacebook製フレームワーク
• React.js / ES2015 を使って実装できる
• 実際に Facebook や Instagram に使われている
良いところ
• Swift や Objective-C、Java を知らなくても JS だけで
ネイティブアプリが作れる!
• 画面のロジックを iOS と Android で使いまわせる。レ
イアウトも多少は使いまわせる!
• 修正しても再ビルド不要なので開発効率が良い!
Cmd + R でリロード!
ツライところ
• 詰まった時に情報が少ない(あるいは英語)
• メジャーバージョンではないため、破壊的アップデー
トもまだ頻繁に起きる
• JavaScript がシングルスレッドで動作するため、パフ
ォーマンスを出しにくい時がある
Component の基本
Hello World
import 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>
);
}
}
Component:画面部品
• extends Component した class を実装することで新た
にコンポーネントを定義することができる
• 画面の部品であるコンポーネントを組み合わせていく
ことでアプリケーションを作っていく
• 描画される内容は render 関数に実装する
Style:表現
• コンポーネントの表示の仕方を指定する、コンポーネ
ントの基本的な属性。style を指定したオブジェクトを
渡す
• html の style とほぼ同じ内容が書ける
• Selector のようなものはないので、要素ごとに一つ一
つ style を指定する必要がある
Props:属性
• 親から子コンポーネントに渡される属性値をもつオブ
ジェクト
• 渡された値は this.props.xxxx の形式で取り出せる
• static propTypes で渡されるべき値の型を定義できる
• 値の管理は親コンポーネントが行うので、値を書き換
えてはいけない
State:状態
• コンポーネントの状態を管理するためのオブジェクト
• constructor にて this.state = { xxx: yyy } で定義する
this.state.xxx で取り出すことができる
• this.setSate({ xxx: zzz }) で更新する
更新すると render 関数が再実行され、状態が表示に反
映される
Component いろいろ
View
• 最も基本的なコンポーネント
• html でいう div のように、他のコンポーネントを入れ
子にすることで、レイアウトを制御するために使う
Text
• 文字列を表示するコンポーネント
• 文字列をマークアップすると表示できる
ListView
• リスト構造のデータを効率的にレンダリングするため
のコンポーネント
• DataSource でリストのデータを管理する
• renderRow 関数で1行のコンポーネントを指定する
ScrollView
• コンテンツをスクロールできるようにするためのコン
ポーネント
• 下に引っ張ってリロードする機能も提供されている
( refreshControl )
WebView
• Webブラウザ機能を提供するためのコンポーネント
• 戻る / 進む のような遷移の指定はプログラムからでき
るが、UI は自分で実装する必要がある
TextInput
• テキストを入力するコンポーネント
• 入力した値は onChangeText で state に同期して使う
ストレージ
AsyncStorage
• アプリケーションを終了しても消えない保存領域
アプリを削除すると消える
• setItem / getItem で出し入れを行う
• データの持ち方は key / value のシンプルな構造
• パフォーマンスに難あり。アクセスに1秒くらいかかる
場合も
パフォーマンス
AsyncStorage 遅い問題
• 1秒かかったり体感できるレベルで遅い
• AsyncStorageは使わない、という選択
Realm 使うのも良いかも
https://realm.io/docs/react-native/latest/
• Realm は高速かつ、RDBのような柔軟性もある
ListView 遅い問題
• 1行ずつパラパラと描画される
• 操作がブロックされてしまうため、レンダリングが終
わるまで他のアクションが動作しない
• プロパティ調整でかなり速くなる
initialListSize / pageSize
ありがとうございました!!

Más contenido relacionado

La actualidad más candente

Unify Stream and Batch Processing using Dataflow, a Portable Programmable Mod...
Unify Stream and Batch Processing using Dataflow, a Portable Programmable Mod...Unify Stream and Batch Processing using Dataflow, a Portable Programmable Mod...
Unify Stream and Batch Processing using Dataflow, a Portable Programmable Mod...
DataWorks Summit
 
Kyoto Tycoon Guide in Japanese
Kyoto Tycoon Guide in JapaneseKyoto Tycoon Guide in Japanese
Kyoto Tycoon Guide in Japanese
Mikio Hirabayashi
 

La actualidad más candente (20)

Google Cloud Composer
Google Cloud ComposerGoogle Cloud Composer
Google Cloud Composer
 
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
 
Keeping a Secret with HashiCorp Vault
Keeping a Secret with HashiCorp VaultKeeping a Secret with HashiCorp Vault
Keeping a Secret with HashiCorp Vault
 
Unify Stream and Batch Processing using Dataflow, a Portable Programmable Mod...
Unify Stream and Batch Processing using Dataflow, a Portable Programmable Mod...Unify Stream and Batch Processing using Dataflow, a Portable Programmable Mod...
Unify Stream and Batch Processing using Dataflow, a Portable Programmable Mod...
 
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンFluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターン
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
 
Kyoto Tycoon Guide in Japanese
Kyoto Tycoon Guide in JapaneseKyoto Tycoon Guide in Japanese
Kyoto Tycoon Guide in Japanese
 
Optimizing Kubernetes Resource Requests/Limits for Cost-Efficiency and Latenc...
Optimizing Kubernetes Resource Requests/Limits for Cost-Efficiency and Latenc...Optimizing Kubernetes Resource Requests/Limits for Cost-Efficiency and Latenc...
Optimizing Kubernetes Resource Requests/Limits for Cost-Efficiency and Latenc...
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
 
Real World Event Sourcing and CQRS
Real World Event Sourcing and CQRSReal World Event Sourcing and CQRS
Real World Event Sourcing and CQRS
 
Apache Iceberg - A Table Format for Hige Analytic Datasets
Apache Iceberg - A Table Format for Hige Analytic DatasetsApache Iceberg - A Table Format for Hige Analytic Datasets
Apache Iceberg - A Table Format for Hige Analytic Datasets
 
Data Streaming with Apache Kafka & MongoDB
Data Streaming with Apache Kafka & MongoDBData Streaming with Apache Kafka & MongoDB
Data Streaming with Apache Kafka & MongoDB
 
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
 
MongoDB Fundamentals
MongoDB FundamentalsMongoDB Fundamentals
MongoDB Fundamentals
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
 
Don’t Forget About Your Past—Optimizing Apache Druid Performance With Neil Bu...
Don’t Forget About Your Past—Optimizing Apache Druid Performance With Neil Bu...Don’t Forget About Your Past—Optimizing Apache Druid Performance With Neil Bu...
Don’t Forget About Your Past—Optimizing Apache Druid Performance With Neil Bu...
 
Care and Feeding of Catalyst Optimizer
Care and Feeding of Catalyst OptimizerCare and Feeding of Catalyst Optimizer
Care and Feeding of Catalyst Optimizer
 
Learn O11y from Grafana ecosystem.
Learn O11y from Grafana ecosystem.Learn O11y from Grafana ecosystem.
Learn O11y from Grafana ecosystem.
 
Katib
KatibKatib
Katib
 
Git Flowを運用するために
Git Flowを運用するためにGit Flowを運用するために
Git Flowを運用するために
 

Similar a React NativeでTwitterクライアントを作ってみよう

devsami kansai 2012 #c2
devsami kansai 2012 #c2devsami kansai 2012 #c2
devsami kansai 2012 #c2
Yushi_Takagi
 
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
CData Software Japan
 

Similar a React NativeでTwitterクライアントを作ってみよう (20)

React Nativeで始めるアプリ開発
React Nativeで始めるアプリ開発React Nativeで始めるアプリ開発
React Nativeで始めるアプリ開発
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
 
Salesforce Lightning をやってみてあれこれ
Salesforce Lightning をやってみてあれこれSalesforce Lightning をやってみてあれこれ
Salesforce Lightning をやってみてあれこれ
 
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
 
誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
 
React Nativeで考えるクロスプラットフォーム開発
React Nativeで考えるクロスプラットフォーム開発React Nativeで考えるクロスプラットフォーム開発
React Nativeで考えるクロスプラットフォーム開発
 
UnicastWS vol.2
UnicastWS vol.2UnicastWS vol.2
UnicastWS vol.2
 
React Nativeってどうなの?
React Nativeってどうなの?React Nativeってどうなの?
React Nativeってどうなの?
 
C#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのかC#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのか
 
Xamarin 概要 2014年08月版
Xamarin 概要 2014年08月版Xamarin 概要 2014年08月版
Xamarin 概要 2014年08月版
 
SYSTEMI勉強会まとめ資料(日記アプリ作成)
SYSTEMI勉強会まとめ資料(日記アプリ作成)SYSTEMI勉強会まとめ資料(日記アプリ作成)
SYSTEMI勉強会まとめ資料(日記アプリ作成)
 
devsami kansai 2012 #c2
devsami kansai 2012 #c2devsami kansai 2012 #c2
devsami kansai 2012 #c2
 
DevLOVE iPhoneアプリ勉強会
DevLOVE iPhoneアプリ勉強会DevLOVE iPhoneアプリ勉強会
DevLOVE iPhoneアプリ勉強会
 
iOSアプリ開発のCI環境 - Jenkins編 -
iOSアプリ開発のCI環境 - Jenkins編 -iOSアプリ開発のCI環境 - Jenkins編 -
iOSアプリ開発のCI環境 - Jenkins編 -
 
PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化
 
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
 
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
 
スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向
 
Microsoft DevOps Hackathon (Sep 2015) Team 4 Presentation
Microsoft DevOps Hackathon (Sep 2015) Team 4 PresentationMicrosoft DevOps Hackathon (Sep 2015) Team 4 Presentation
Microsoft DevOps Hackathon (Sep 2015) Team 4 Presentation
 

Más de dcubeio

Más de dcubeio (20)

AWS Summit Tokyo 2019登壇資料「DevOpsの劇的改善!古いアーキテクチャから王道のマネージドサービスを活用しフルリプレイス! 」
AWS Summit Tokyo 2019登壇資料「DevOpsの劇的改善!古いアーキテクチャから王道のマネージドサービスを活用しフルリプレイス! 」AWS Summit Tokyo 2019登壇資料「DevOpsの劇的改善!古いアーキテクチャから王道のマネージドサービスを活用しフルリプレイス! 」
AWS Summit Tokyo 2019登壇資料「DevOpsの劇的改善!古いアーキテクチャから王道のマネージドサービスを活用しフルリプレイス! 」
 
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
 
ビットコインとブロックチェーンを初めからていねいに(超基礎編)
ビットコインとブロックチェーンを初めからていねいに(超基礎編)ビットコインとブロックチェーンを初めからていねいに(超基礎編)
ビットコインとブロックチェーンを初めからていねいに(超基礎編)
 
20171206 d3 health_tech発表資料
20171206 d3 health_tech発表資料20171206 d3 health_tech発表資料
20171206 d3 health_tech発表資料
 
Go初心者がGoでコマンドラインツールの作成に挑戦した話
Go初心者がGoでコマンドラインツールの作成に挑戦した話Go初心者がGoでコマンドラインツールの作成に挑戦した話
Go初心者がGoでコマンドラインツールの作成に挑戦した話
 
初めての Raspberry pi 〜プラレールをunityの世界の中で走らせよう〜 (1)
初めての Raspberry pi 〜プラレールをunityの世界の中で走らせよう〜 (1)初めての Raspberry pi 〜プラレールをunityの世界の中で走らせよう〜 (1)
初めての Raspberry pi 〜プラレールをunityの世界の中で走らせよう〜 (1)
 
BizReach x Marketo連携
BizReach x Marketo連携BizReach x Marketo連携
BizReach x Marketo連携
 
Kinesis Firehoseを使ってみた
Kinesis Firehoseを使ってみたKinesis Firehoseを使ってみた
Kinesis Firehoseを使ってみた
 
Apiドキュメンテーションツールを使いこなす【api blueprint編】
Apiドキュメンテーションツールを使いこなす【api blueprint編】Apiドキュメンテーションツールを使いこなす【api blueprint編】
Apiドキュメンテーションツールを使いこなす【api blueprint編】
 
春の脆弱性祭り 2017/06/13
春の脆弱性祭り 2017/06/13春の脆弱性祭り 2017/06/13
春の脆弱性祭り 2017/06/13
 
DynamoDBを導入した話
DynamoDBを導入した話DynamoDBを導入した話
DynamoDBを導入した話
 
Play2 scalaを2年やって学んだこと
Play2 scalaを2年やって学んだことPlay2 scalaを2年やって学んだこと
Play2 scalaを2年やって学んだこと
 
すごーい!APIドキュメントを更新するだけでAPIが自動テストできちゃう!たのしー!
すごーい!APIドキュメントを更新するだけでAPIが自動テストできちゃう!たのしー! すごーい!APIドキュメントを更新するだけでAPIが自動テストできちゃう!たのしー!
すごーい!APIドキュメントを更新するだけでAPIが自動テストできちゃう!たのしー!
 
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
 
Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜
Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜
Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜
 
【freee】プロダクトマネージャーの仕事と魅力
【freee】プロダクトマネージャーの仕事と魅力【freee】プロダクトマネージャーの仕事と魅力
【freee】プロダクトマネージャーの仕事と魅力
 
【ビズリーチ】プロダクトマネージャーの仕事と魅力
【ビズリーチ】プロダクトマネージャーの仕事と魅力【ビズリーチ】プロダクトマネージャーの仕事と魅力
【ビズリーチ】プロダクトマネージャーの仕事と魅力
 
Python × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack botPython × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack bot
 
HR Tech x 機械学習 導入事例紹介
HR Tech x 機械学習 導入事例紹介HR Tech x 機械学習 導入事例紹介
HR Tech x 機械学習 導入事例紹介
 
Scalaマクロ入門 bizr20170217
Scalaマクロ入門 bizr20170217 Scalaマクロ入門 bizr20170217
Scalaマクロ入門 bizr20170217
 

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