SlideShare a Scribd company logo
1 of 19
勉強会まとめ資料
株式会社システムアイ
日記アプリの作成
前書き
【概要】
このスライドでは、ReactNativeの独学で勉強して結果を整理し、簡単な日記アプリを作成していきます。
ReactNativeはReactベースでスマホアプリを作成可能なフレームワークです。
JavaScriptとReactの知識があれば作成可能なため、Reactの知識があれば学習コストが少なくてすみます。
【対象者】
このスライドはプログラミングの経験はあるが、ReactNativeの経験がない人が対象者になります。
【サンプルソース】
サンプルソースはGitHubに公開しています。
https://github.com/2018SYSTEMI34/sample_source/tree/master/react-native/sample-
app/dairy
目次
1. 日記アプリ概要
2. プロジェクト作成
3. 日記アプリ実装
4. まとめ
1-1.日記アプリ概要
【日記アプリの画面構成】
ホーム 登録
【ホーム画面】
日記
日記
日記
【更新画面】
【登録画面】
ホーム 登録
【ホーム画面】
日記を一覧表示する画面です。
【更新画面】
日記の内容を更新する画面です。
【登録画面】
日記の内容を新規登録する画面です。
以上、3つの画面を作成していきます。
1-2.日記アプリ概要
【日記アプリのデータベース】
このアプリではSQLliteというアプリに組み込むRDBを使用して、データを保存していきます。
【テーブル構成】
物理名 概要
id primary key
date 日記の記入日
titile 日記のタイトル
body 日記の内容
2-1.プロジェクト作成
npm install –g expo-cli
yarn add –global expo-cli
【前提事項】
Node.jsがインストールされ、npmまたはyarnのパッケージマネージャがある前提です。
このサンプルアプリでは、Expoと言われる開発/build環境を導入して、
ReactNativeのスマホアプリを開発していきます。
【Expo導入コマンド】
npmまたはyarnコマンドからexpoを導入してください。
2-2.プロジェクト作成
expo init dairy
tabs // tabsを選択してください
cd dairy
【Expoコマンドでプロジェクト作成】
以下のコマンドでプロジェクトを作成してください。
プロジェクトの作成するときにtabsとblankを選択可能です。
今回はtabsを選択して、Navigationのサンプルソースを改修しながらアプリを作成してきます。
2-3.プロジェクト作成
expo start
【プロジェクト起動&初期画面の表示】
以下のコマンドでプロジェクトを起動して、QRコードが表示されれば成功です。
【スマートフォンでアプリ起動】
Expoの機能を利用する場合、expoの会員登録とスマートフォンののアプリインストールが必要です。
以下のURLにアクセスして、expoの会員登録をお願いいたします。
https://expo.io/login
2-4.プロジェクト作成
【Expoの利点】
ReactNativeのアプリは、Expoを利用する以外にも方法がありますが、Expoを使用するメリットは以下になります。
・実機でのテストがQRを読み込むことですぐにできる。
・SQLLiteなど様々なモジュールが最初からインストールされているため、手間が少ない。
日記アプリのような簡単なアプリは最小の労力で作成可能なため、
特殊な要件がなければExpoで機能を十分に表現できます。
3-1.日記アプリ実装
【日記アプリのプログラム一覧】
この日記アプリで修正もしくは新規で作成するプログラムファイルを一覧化します。
dairy/
┝navigation/
┝ MainTabNavigator.js
┝ screens/
┝ HomeScreen.js
┝ RegistrationScreen.js
┝ UpdateScreen.js
修正
新規作成
新規作成
新規作成
3-2.日記アプリ実装
【 MainTabNavigator.js 】
このプログラムはアプリ下部に表示されるツールバーを作成しています。
import { createStackNavigator, createBottomTabNavigator } from 'react-navigation’;
import HomeScreen from '../screens/HomeScreen’;
import RegistrationScreen from '../screens/RegistrationScreen’;
import UpdateScreen from '../screens/UpdateScreen’;
/** * ホーム画面の読み込み */
const HomeStack = createStackNavigator({ Update: UpdateScreen, Home: HomeScreen },{ initialRouteName: 'Home',
mode:'card' });
HomeStack.navigationOptions = { tabBarLabel: 'ホーム', };
/** * 登録画面の読み込み */
const RegisrationStack = createStackNavigator({ Settings: RegistrationScreen, });
RegisrationStack.navigationOptions = { tabBarLabel: '登録', };
/** * Tab Navigation 管理部品 */
export default createBottomTabNavigator(
{ HomeStack, RegisrationStack, },
{ initialRouteName: 'HomeStack’ }
);
このアプリではreact-navigationを使用して、画面遷移を実現しています。
ポイント
ポイント
3-3.日記アプリ実装
【 MainTabNavigator.js のポイント】
const HomeStack = createStackNavigator({ Update: UpdateScreen, Home: HomeScreen },{ initialRouteName: 'Home', mode:'card' });
React-navigationでは、stackを作成することで、react-navigation上で画面遷移をさせることが
可能になります。
i** * Tab Navigation 管理部品 */
export default createBottomTabNavigator(
{ HomeStack, RegisrationStack, },
{ initialRouteName: 'HomeStack’ }
);
React-navigationでは、作成したstackを用いてツールバーを作成していきます。
Stackを指定した数だけメニューができていきます。
このような形で表示されます。
3-4.日記アプリ実装
【 HomeScreen.js 】
このプログラムは日記を一覧化して表示します。
ソースコードが長いため、GitHubを参照してください。
https://github.com/2018SYSTEMI34/sample_source/blob/master/react-native/sample-
app/dairy/screens/HomeScreen.js
3-5.日記アプリ実装
【HomeScreen.jsのポイント 】
SQLliteのデータベースを定義しています。
画面表示するときに日記のレコードをすべて取得します。
const db = SQLite.openDatabase('dairy.db');
componentDidMount = () => {
// タブ押下ごとにイベント発生させる
this.props.navigation.addListener('didFocus', () => this._didFocus());
}
/** * タブ押下時のイベント定義 */
_didFocus = () => { this.selectAllDaireies() }
// 日記の件数を全件取得
selectAllDaireies = () => {
db.transaction(
tx => {
tx.executeSql('select * from dairies order by date desc;', [],
(_, { rows }) => { this.setState({list:rows._array}) });
}
)
}
3-6.日記アプリ実装
【HomeScreen.js のポイント】
React native の標準機能Flatlistを用いて、日記を一覧化しています。
render() {
return(
<View style = {style.container}>
<FlatList data={this.state.list}
style={style.flatList}
keyExtractor={(item,index) => (item.id)}
renderItem={({item}) => this.flatListRenderItem(item)}/>
</View>
)
}
<TouchableOpacity onPress={() => this.props.navigation.navigate('Update',{item})}>
<View style={style.line}>
<View style={style.date}>
<Text style={style.text}>{date.getFullYear()}</Text>
<Text style={style.text}>{date.getMonth()+1}/{date.getDate()}</Text>
</View>
<View style={style.title}>
<Text style={style.titileText}>{item.title}</Text>
</View>
</View>
</TouchableOpacity>
TouchableOpacity は画面タッチ時に何らかのアクションをさせるコンポーネントです。
この場合、タッチ時にnavigateの関数を使用して画面を遷移させています。
FlatList
TouchableOpacity
3-7.日記アプリ実装
【 RegistrationScreen.js 】
このプログラムは日記をデータベースに登録します。
ソースコードが長いため、GitHubを参照してください。
https://github.com/2018SYSTEMI34/sample_source/blob/master/react-native/sample-
app/dairy/screens/RegistrationScreen.js
3-8.日記アプリ実装
【 RegistrationScreen.jsのポイント 】
画面表示時に日記のテーブルを作成しています。
// テーブルの作成
componentDidMount() {
db.transaction(
tx => {
tx.executeSql( 'create table if not exists dairies (id integer primary key autoincrement not null, date numeric, title text, body text);’ );
}
);
}
<DateTimePicker isVisible={this.state.isDateTimePickerVisible} onConfirm={this.handleDatePicked} onCancel={this.hideDateTimePicker} />
DatePickerの部品はReact標準のものは使いにくいため、外部のモジュールをインストールして使用しています。
react-native-modal-datetime-pickerをnpmまたはyarnでインストールしてくだい。
3-9.日記アプリ実装
【 UpdateScreen.js 】
このプログラムは日記を更新します。
ソースコードが長いため、GitHubを参照してください。
https://github.com/2018SYSTEMI34/sample_source/blob/master/react-native/sample-
app/dairy/screens/UpdateScreen.js
このソースコードはほぼRegistraionScreen.jsと同じため説明は省略します。
まとめ
【まとめ】
ReactNativeでのアプリ作成の強みはiosとandroidの両方で動くことが強みとされています。
しかし、ReactNativeの標準コンポーネントはandroidでしか動作しない部品などが存在しています。
今回の日記アプリなど簡単なものならよいのですが、複雑なものになるとかゆいところに手が届かない状態です。
また、ReactNativeでは個人が作ったようなコンポーネントが多数を占めていて、開発の効率化させる場合、
このような部品をいれなければならないケースが存在します。
そういった意味でも、業務で使用する場合はReactNativeを使用する難しさは感じました

More Related Content

Similar to SYSTEMI勉強会まとめ資料(日記アプリ作成)

react-native.pdf
react-native.pdfreact-native.pdf
react-native.pdfDaikiSato10
 
React を導入した フロントエンド開発
React を導入したフロントエンド開発React を導入したフロントエンド開発
React を導入した フロントエンド開発 daisuke-a-matsui
 
React Nativeで考えるクロスプラットフォーム開発
React Nativeで考えるクロスプラットフォーム開発React Nativeで考えるクロスプラットフォーム開発
React Nativeで考えるクロスプラットフォーム開発yuichi kubota
 
スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向Tsutomu Ogasawara
 
Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Yasushi Ishikawa
 
Rails composerでrails newを楽にしよう
Rails composerでrails newを楽にしようRails composerでrails newを楽にしよう
Rails composerでrails newを楽にしよう健太 田上
 
PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化Takashi Okamoto
 
swiftビギナーズ倶楽部:タブバーから学ぶ 「App delegate」と「as演算子」
swiftビギナーズ倶楽部:タブバーから学ぶ 「App delegate」と「as演算子」swiftビギナーズ倶楽部:タブバーから学ぶ 「App delegate」と「as演算子」
swiftビギナーズ倶楽部:タブバーから学ぶ 「App delegate」と「as演算子」Kanako Kobayashi
 
デブサミ 2013 日本App Inventorユーザー会
デブサミ 2013 日本App Inventorユーザー会デブサミ 2013 日本App Inventorユーザー会
デブサミ 2013 日本App Inventorユーザー会Takeaki Tada
 
2018年度新入社員研修実績紹介
2018年度新入社員研修実績紹介2018年度新入社員研修実績紹介
2018年度新入社員研修実績紹介CASAREAL, Inc.
 
20220303_SAP AppGyverとSAP CAPで簡単なアプリを作ってみた~市民開発者とプロ開発者で作業を分担してみた~
20220303_SAP AppGyverとSAP CAPで簡単なアプリを作ってみた~市民開発者とプロ開発者で作業を分担してみた~20220303_SAP AppGyverとSAP CAPで簡単なアプリを作ってみた~市民開発者とプロ開発者で作業を分担してみた~
20220303_SAP AppGyverとSAP CAPで簡単なアプリを作ってみた~市民開発者とプロ開発者で作業を分担してみた~MasashiOtsuka1
 
Testing react-native with storybook on web
Testing react-native with storybook on webTesting react-native with storybook on web
Testing react-native with storybook on webJesse Katsumata
 
SYSTEMI勉強会まとめ資料(React基礎まとめ)
SYSTEMI勉強会まとめ資料(React基礎まとめ)SYSTEMI勉強会まとめ資料(React基礎まとめ)
SYSTEMI勉強会まとめ資料(React基礎まとめ)YoshikiWatanabe1
 
Androidプログラミング入門
Androidプログラミング入門Androidプログラミング入門
Androidプログラミング入門OESF Education
 
Webエンジニアによるスマートフォンアプリ開発
Webエンジニアによるスマートフォンアプリ開発Webエンジニアによるスマートフォンアプリ開発
Webエンジニアによるスマートフォンアプリ開発takeuchi-tk
 
iOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips までiOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips までYuki Tanabe
 
[Cloud OnAir] アプリケーションにフォーカス!ビジネスに直結する開発の極意をご紹介します。(e-Learning) 2018年3月15日 放送
[Cloud OnAir] アプリケーションにフォーカス!ビジネスに直結する開発の極意をご紹介します。(e-Learning) 2018年3月15日 放送[Cloud OnAir] アプリケーションにフォーカス!ビジネスに直結する開発の極意をご紹介します。(e-Learning) 2018年3月15日 放送
[Cloud OnAir] アプリケーションにフォーカス!ビジネスに直結する開発の極意をご紹介します。(e-Learning) 2018年3月15日 放送Google Cloud Platform - Japan
 

Similar to SYSTEMI勉強会まとめ資料(日記アプリ作成) (20)

react-native.pdf
react-native.pdfreact-native.pdf
react-native.pdf
 
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
 
UnicastWS vol.2
UnicastWS vol.2UnicastWS vol.2
UnicastWS vol.2
 
React を導入した フロントエンド開発
React を導入したフロントエンド開発React を導入したフロントエンド開発
React を導入した フロントエンド開発
 
React Nativeで考えるクロスプラットフォーム開発
React Nativeで考えるクロスプラットフォーム開発React Nativeで考えるクロスプラットフォーム開発
React Nativeで考えるクロスプラットフォーム開発
 
スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向
 
Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介
 
Rails composerでrails newを楽にしよう
Rails composerでrails newを楽にしようRails composerでrails newを楽にしよう
Rails composerでrails newを楽にしよう
 
GraphQL with React
GraphQL with ReactGraphQL with React
GraphQL with React
 
PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化
 
swiftビギナーズ倶楽部:タブバーから学ぶ 「App delegate」と「as演算子」
swiftビギナーズ倶楽部:タブバーから学ぶ 「App delegate」と「as演算子」swiftビギナーズ倶楽部:タブバーから学ぶ 「App delegate」と「as演算子」
swiftビギナーズ倶楽部:タブバーから学ぶ 「App delegate」と「as演算子」
 
デブサミ 2013 日本App Inventorユーザー会
デブサミ 2013 日本App Inventorユーザー会デブサミ 2013 日本App Inventorユーザー会
デブサミ 2013 日本App Inventorユーザー会
 
2018年度新入社員研修実績紹介
2018年度新入社員研修実績紹介2018年度新入社員研修実績紹介
2018年度新入社員研修実績紹介
 
20220303_SAP AppGyverとSAP CAPで簡単なアプリを作ってみた~市民開発者とプロ開発者で作業を分担してみた~
20220303_SAP AppGyverとSAP CAPで簡単なアプリを作ってみた~市民開発者とプロ開発者で作業を分担してみた~20220303_SAP AppGyverとSAP CAPで簡単なアプリを作ってみた~市民開発者とプロ開発者で作業を分担してみた~
20220303_SAP AppGyverとSAP CAPで簡単なアプリを作ってみた~市民開発者とプロ開発者で作業を分担してみた~
 
Testing react-native with storybook on web
Testing react-native with storybook on webTesting react-native with storybook on web
Testing react-native with storybook on web
 
SYSTEMI勉強会まとめ資料(React基礎まとめ)
SYSTEMI勉強会まとめ資料(React基礎まとめ)SYSTEMI勉強会まとめ資料(React基礎まとめ)
SYSTEMI勉強会まとめ資料(React基礎まとめ)
 
Androidプログラミング入門
Androidプログラミング入門Androidプログラミング入門
Androidプログラミング入門
 
Webエンジニアによるスマートフォンアプリ開発
Webエンジニアによるスマートフォンアプリ開発Webエンジニアによるスマートフォンアプリ開発
Webエンジニアによるスマートフォンアプリ開発
 
iOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips までiOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips まで
 
[Cloud OnAir] アプリケーションにフォーカス!ビジネスに直結する開発の極意をご紹介します。(e-Learning) 2018年3月15日 放送
[Cloud OnAir] アプリケーションにフォーカス!ビジネスに直結する開発の極意をご紹介します。(e-Learning) 2018年3月15日 放送[Cloud OnAir] アプリケーションにフォーカス!ビジネスに直結する開発の極意をご紹介します。(e-Learning) 2018年3月15日 放送
[Cloud OnAir] アプリケーションにフォーカス!ビジネスに直結する開発の極意をご紹介します。(e-Learning) 2018年3月15日 放送
 

SYSTEMI勉強会まとめ資料(日記アプリ作成)