SlideShare a Scribd company logo
JavaScript(AngularJS・React.js)
で作る
iOS・Androidアプリハンズオン
自己紹介
・吉本和弘
・株式会社ビズリーチ所属
・サーバーサイドエンジニア
・仕事で使っている技術
Java、JavaScript(jQuery)、HTML、CSS
MySQL、AWS、Linux
iOSアプリ(Objective-C,Swift)、Androidアプリ(Java)
zuknow – 友達とクイズで競える学習アプリ
https://www.zuknow.net/
キャリアトレック–レコメンド型転職サイト
https://www.careertrek.com/
今回取り扱う内容
Angularアプリ(Monaca)
・ハイブリッドアプリ
・AngularJS 1系で開発
Reactアプリ(Meteor)
・Webアプリ
・React.js、ES6で開発
・Meteorでハイブリッドアプリ化も可能
→サンプルの説明、簡易版を作成
→簡易版サンプルの説明
Angularアプリ(Monaca)のサンプル
・サンプルプロジェクトをインポート
・ ぐるなびAPIのkeyIDを設定(index.html)
var keyid = ‘***';
Monacaとは
・クラウドベースの開発プラットフォーム
→環境構築不要、IDEの機能も充実
・HTML5とJavaScriptを用いることで、
iOSとAndroidの両OSに対応した
クロスプラットフォームなアプリ開発を実現
→WEB開発のスキルでアプリ開発ができる
・React.js、AngularJS2系、ES6(Babel)で開発する
場合は、LocalKit(有料版、ローカルの開発環境)が必
要
サンプルアプリの仕様
・現在地周辺の飲食店の一覧を表示
・一覧に表示された飲食店を
お気に入りに追加できる
・お気に入り一覧を表示
・お気に入りをクリアできる
Onsen UIとAngularJS1系
[Onsen UI]
・AngularJSをベースにモバイルアプリ作成に
必要なUIを提供
・多彩なUIコンポーネント
・HTMLを拡張し、タグ形式で提供
[Angular JS]
・Googleによって開発されたJavaScriptの
MVCフレームワーク
・複雑化するWebアプリのフロント部分を効率的に
する機能が充実
Onsen UIの構成
<ons-page ng-controller="AppController as app">
<ons-tabbar>
<ons-tab page=“search.html"></ons-tab>
<ons-tab page=“like.html”></ons-tab>
</ons-tabbar>
</ons-page>
<ons-template id=“search.html">
・・・
</ons-template>
<ons-template id=“like.html”>
・・・
</ons-template>
<ons-template id=“result.html”>
・・・
</ons-template>
JSで切り替え
Onsen UI(1)
・ons-template
htmlのテンプレートを定義する
呼び出すときに、テンプレートのIDを指定
<ons-template id="foobar.html">
...
</ons-template>
・ons-tabbar
子要素ons-tabのpage属性に
タブで表示するページを指定する
<ons-tabbar>
<ons-tab page=”tab1.html" active="true”></ons-tab>
<ons-tab page=”tab2.html" active="true”></ons-tab>
</ons-tab>
Onsen UI(2)
・ons-list、ons-list-item
リストを表現するためのコンポーネント
<ons-list>
<ons-list-header>Header Text</ons-list-header>
<ons-list-item>Item1</ons-list-item>
<ons-list-item>Item2</ons-list-item>
</ons-list>
詳しくは、
・「Onsen UI 1.xガイド」(日本語) (https://ja.onsen.io/v1/guide.html)
・「Onsen UI 2 Docs」(英語) (https://onsen.io/v2/docs/js.html)
AngularJSの構成
ons.bootstrap().controller('AppController', function($scope, $http)
{
・・・
}
AppControllerを定義する
index.html
$scope.searchShops
=[shop1, shop2, ・・・];
$scope.likeShops
=[shop1, shop2, ・・・];
Shop{
name,image_url,isLiked
}
オブジェクトの構成
AngularJSのサービス
無名関数の引数に指定した変数名を元に、
必要なサービスを変数に渡す。
上記の場合は、$scopeサービスと$httpサービス。
module.controller('AppController', function($scope, $http) {
$scope.search = function() {
・・・
};
};
サービスとは
・Webアプリケーション共通の特定のタスクを実行する関数群
・シングルトンオブジェクト
・組み込みサービスは「$」から始まる
・独自のカスタムサービスを作ることもできる
$scopeサービスと$httpサービス
$scopeサービス
・アプリケーションのモデルを
参照するオブジェクト
・データバインディングの肝となる
→詳しくは、次のスライドで
$httpサービス
・XMLHttpRequestオブジェクト、JSONP
を通じて、http通信をする
データ(js)
データバインディング(1)(AngularJS)
画面(html)
{{ data }}
データを変更 表示が変更される
$scope.data
データ(js)
データバインディング(2)(AngularJS)
画面(html)
<ons-list-item
ng-repeat="shop in searchShops”>
{{ shop.name }}
{{ shop.address }}
</ons-list-item>
<ons-list-item
ng-repeat="shop in likeShops”>
{{ shop.name }}
{{ shop.address }}
</ons-list-item>
$scopeのデータを変更すると、
表示が変更される
$scope. searchShops
$scope. likeShops
ディレクティブ(1)
・ng-repeat
配列に繰り返し処理を実施し、
展開したデータを表示する
<ons-list>
<ons-list-item ng-repeat=“data in dataList”>
{{ data }}
</ons-list-item>
</ons-list>
・ng-show
条件がtrueの場合に表示する
<ons-list>
<ons-list-item ng-repeat=“data in dataList”>
<span ng-show=“dataList.length > 0”>{{ data}} </span>
</ons-list-item>
</ons-list>
ディレクティブ(2)
・ng-click
クリック時に指定したスコープに
定義された関数を呼び出す
<ons-button ng-click="search()">
検索する
</ons-button>
$scope.search = function() {
・・・
};
詳しくは、
js STUDIO(http://js.studio-kingdom.com/angularjs)
ローカルストレージ(HTML5)
・値を保存する
window.localStrage.setItem([キー名],[値])
・値を取得する
window.localStrage.getItem([キー名])
・保存するデータをキーバリューで管理
・すべてのiOSとAndroidで利用できる
[利用例]
Cordova(1)
HTMLレイヤー
(JavaScript)
・Monacaで開発した搭載されるフレームワーク
・デバイス機能にアクセスするための
仕組みを提供
ネイティブレイヤー
(Objective-C、Swift、Java)
呼び出し
Cordova(2)
・InAppBrowser
アプリ内でブラウザを開く
・Geolocation
位置情報の取得
・Device
加速度センサーへのアクセス
・Media
オーディオファイルの再生、録音
ぐるなびAPI
[リクエストパラメタ]
・keyid: アクセスキー
・format: 「json」(リクエストのデータ形式)
・latitude: 現在地の緯度
・longitude: 現在地の経度
・range: 「1」(検索範囲を番号で指定。「1」は、300m)
・検索結果を表示
・お気に入り一覧を表示
[リクエストパラメタ]
・keyid: アクセスキー
・format: 「json」(リクエストのデータ形式)
・id: 表示する店舗ID(形式は、「1,2,3」)
プロジェクトの作成
・テンプレート
「Onsen UI V2 Angular1 Tabbar」
・Cordovaプラグインの管理
下記の設定を有効にする
「Geolocation」
「InAppBrowser」
Reactアプリ(Meteor)のサンプル
・Meteorをインストール
curl https://install.meteor.com/ | sh
・githubからクローン
git clone https://github.com/KazuhiroYoshimoto/react-sample
・Node.jsのreact,react-domモジュールをインストール
meteor npm install --save react react-dom
・Meteorを起動
meteor
Meteorとは
・node.jsをベースとした
フルスタックフレームワーク
・Webアプリケーション開発を素早く
低コストで行える
・iOSアプリやAndroidアプリに
することもできる
・Facebookが作ったViewのライブラリ
・フレームワークでなく、UIライブラリ
・Virtual DOM
DOMの状態をデータとして持ち、
状態が変化したらDOMを再生成する
(差分を作成)
React.js
・コンポーネントベース
・データバイディング(props)
・状態管理(state)
React.jsでVirtual DOMを定義する
コンポーネントベース
- App.jsx
-Shop.jsx
export default class Shop extends Component {
render() {
return (
・・・
);
}
});
コンポーネントに
DOMを定義し、コン
ポーネントを組み合わ
せる。
コンポーネントの定義
に従い、DOMが生成
される。
export default class App extends Component {
render() {
return (
<div className="commentBox">
・・・
<Shop />
</div>
);
}
});
props
export default class App extends
Component {
return (
<div className=”contaner">
<h1>Comments</h1>
<Shop shop={this.data} />
</div>
);
}
});
export default class Shop extends
Component {
return (
<div className=“Comment">
{this.props.shop}
</div>
);
}
});
App.jsx Shop.jsx
・dataの値を受け渡す
・Appでdataを更新したら、
自動的にdataの値を受け渡す
state
export default class App extends Component
{
constructor(props) {
super(props);
this.state = {
isResult: false,
shops : Array()
};
}
render:() {
return (
・・・
);
}
});
・コンポーネントの状態をもつ、ミュータブル(不変)な値
・コンポーネント自身の状態をもつ
{
shops =[data1, data2]
}
stateに対して、
・props はイミュータブル(可変)な値
・propsは親の状態をもつ
propsとstate
export default class App extends
Component {
render () {
return (
<div className=”container">
<Shop shop={this.state.data} />
</div>
);
}
});
{data: “お店1”}
this.setState({data: “お店2”});
export default class Shop extends
Component {
render() {
return (
<li>
<p> {this.props.shop} </p>
</li>
);
}
}
{data: “お店2”}
<div>お店1</div> <div>お店2</div>
state
DOM
・Meteorをインストール
curl https://install.meteor.com/ | sh
・Node.jsのreact,react-domモジュールをインストール
meteor npm install --save react react-dom
・meteorを起動
meteor
プロジェクトの作成

More Related Content

What's hot (20)

PPTX
簡単AngularJS(関西AngularJS勉強会)
Takahiro Maki
 
PPTX
AngularJSを浅めに紹介します
nkazuki
 
PDF
3分でわかるangular js
Shin Adachi
 
PDF
Flux react現状確認会
VOYAGE GROUP
 
PPTX
React.js + Reduxで作るSPA
Shohei Saeki
 
PDF
angular X designer - デザイナからみたAngularJS #ten1club
silvers ofsilvers
 
PDF
Vue.js 2.0 で自社プロダクトを SPA + SSR 化した話
Yutaro Miyazaki
 
PPTX
Reactつかってみた
Minori Tokuda
 
PPTX
ライオンでも分かるVuejs
lion-man
 
PPTX
React を導入した フロントエンド開発
daisuke-a-matsui
 
PPTX
Angular js はまりどころ
Ayumi Goto
 
PDF
ReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれから
Yusuke Murata
 
PDF
そろそろ押さえておきたい AngularJSのセキュリティ
Muneaki Nishimura
 
PDF
SIROK技術勉強会 #1 「Reactってなんだ?」
Naoyuki Kataoka
 
PPTX
今からでも遅くない! React事始め
ynaruta
 
PPTX
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
慎一 古賀
 
PDF
はじめてのVue.js
kamiyam .
 
PDF
AngularJSの高速化
Kon Yuichi
 
PDF
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
Kohei Asai
 
PDF
One Time Binding & Digest Loop
Kon Yuichi
 
簡単AngularJS(関西AngularJS勉強会)
Takahiro Maki
 
AngularJSを浅めに紹介します
nkazuki
 
3分でわかるangular js
Shin Adachi
 
Flux react現状確認会
VOYAGE GROUP
 
React.js + Reduxで作るSPA
Shohei Saeki
 
angular X designer - デザイナからみたAngularJS #ten1club
silvers ofsilvers
 
Vue.js 2.0 で自社プロダクトを SPA + SSR 化した話
Yutaro Miyazaki
 
Reactつかってみた
Minori Tokuda
 
ライオンでも分かるVuejs
lion-man
 
React を導入した フロントエンド開発
daisuke-a-matsui
 
Angular js はまりどころ
Ayumi Goto
 
ReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれから
Yusuke Murata
 
そろそろ押さえておきたい AngularJSのセキュリティ
Muneaki Nishimura
 
SIROK技術勉強会 #1 「Reactってなんだ?」
Naoyuki Kataoka
 
今からでも遅くない! React事始め
ynaruta
 
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
慎一 古賀
 
はじめてのVue.js
kamiyam .
 
AngularJSの高速化
Kon Yuichi
 
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
Kohei Asai
 
One Time Binding & Digest Loop
Kon Yuichi
 

Viewers also liked (20)

PDF
Directiveで実現できたこと
Kon Yuichi
 
KEY
Composer による依存管理 と Packagist によるライブラリの公開
Shogo Kawahara
 
PPTX
ES6 - JavaCro 2016
Nenad Pecanac
 
PDF
jQuery勉強会#4
Ryo Maruyama
 
PDF
kontainer-js
Kuu Miyazaki
 
PPTX
Getting started with ES6 : Future of javascript
Mohd Saeed
 
PDF
JavaScript.Next Returns
dynamis
 
PDF
ES6 はじめました
Net Kanayan
 
PDF
150421 es6とかな話
kotaro_hirayama
 
PDF
Prototypeベース in JavaScript
Ryo Maruyama
 
PPTX
JavaScript : What is it really? AND Some new features in ES6
Aayush Shrestha
 
PDF
JavaScript 実践講座 Framework, Tool, Performance
クラスメソッド株式会社
 
PDF
FileReader and canvas and server silde
Net Kanayan
 
PPT
Google App EngineでTwitterアプリを作ろう
kenji4569
 
PDF
はじめてのWallaby.js
Shunta Saito
 
PPTX
Startup JavaScript
Akinari Tsugo
 
PDF
ECMAScript 6 Features(PDF 版)
taskie
 
PDF
Hello npm
Muyuu Fujita
 
PPTX
Nds meetup8 lt
ushiboy
 
PDF
断言して間違えると信頼度が低下するというベイズの話
Junya Hayashi
 
Directiveで実現できたこと
Kon Yuichi
 
Composer による依存管理 と Packagist によるライブラリの公開
Shogo Kawahara
 
ES6 - JavaCro 2016
Nenad Pecanac
 
jQuery勉強会#4
Ryo Maruyama
 
kontainer-js
Kuu Miyazaki
 
Getting started with ES6 : Future of javascript
Mohd Saeed
 
JavaScript.Next Returns
dynamis
 
ES6 はじめました
Net Kanayan
 
150421 es6とかな話
kotaro_hirayama
 
Prototypeベース in JavaScript
Ryo Maruyama
 
JavaScript : What is it really? AND Some new features in ES6
Aayush Shrestha
 
JavaScript 実践講座 Framework, Tool, Performance
クラスメソッド株式会社
 
FileReader and canvas and server silde
Net Kanayan
 
Google App EngineでTwitterアプリを作ろう
kenji4569
 
はじめてのWallaby.js
Shunta Saito
 
Startup JavaScript
Akinari Tsugo
 
ECMAScript 6 Features(PDF 版)
taskie
 
Hello npm
Muyuu Fujita
 
Nds meetup8 lt
ushiboy
 
断言して間違えると信頼度が低下するというベイズの話
Junya Hayashi
 
Ad

Similar to JavaScript(AngularJS・React.js)で作る iOS・Androidアプリハンズオン (20)

PDF
Alt01-LT
Yuta Hiroto
 
PDF
簡単モバイルアプリ開発 クラウドベース開発環境Monacaを使う
Hiroki OKAZAKI
 
PPTX
ionic - cross platform mobile app 開発
Seunghun Lee
 
PDF
PhoneGapでWebアプリをスマホアプリ化
Takashi Okamoto
 
PDF
アプリ開発も出来るイマドキのWeb技術入門(エンジニア適職フェアWeb技術入門セミナー)
友太 渡辺
 
PPTX
CordovaでAngularJSアプリ開発
アシアル株式会社
 
PPTX
React Nativeで始めるアプリ開発
Ryosuke Hara
 
PDF
俺とAngular JS 2
Masayuki KaToH
 
PDF
Onsen UI 2.0とUIライブラリの未来
アシアル株式会社
 
PDF
Html5/JSモバイルアプリ最前線
アシアル株式会社
 
PDF
2016/05/01 Visual Studio with Cordova
miso- soup3
 
PDF
React Native 入門
Seiichi Okumiya
 
ZIP
LT発表資料
murajun1978
 
PPTX
HTML5 クロスプラットフォームアプリ開発の現実解
Monaca
 
PDF
Visual Studio 2015 を使用した Cordova アプリの開発
Osamu Monoe
 
PDF
javascript を Xcode でテスト
Yoichiro Sakurai
 
PDF
Going Serverless, Building Applications with No Servers
Keisuke Nishitani
 
PDF
多分モダンなWebアプリ開発
tak-nakamura
 
PDF
Ionicでハイブリッドアプリ入門①
Tomokatsu Iguchi
 
PPTX
Meteor intro-2015-rev1- 日本語バージョン
Katsumi Honda
 
Alt01-LT
Yuta Hiroto
 
簡単モバイルアプリ開発 クラウドベース開発環境Monacaを使う
Hiroki OKAZAKI
 
ionic - cross platform mobile app 開発
Seunghun Lee
 
PhoneGapでWebアプリをスマホアプリ化
Takashi Okamoto
 
アプリ開発も出来るイマドキのWeb技術入門(エンジニア適職フェアWeb技術入門セミナー)
友太 渡辺
 
CordovaでAngularJSアプリ開発
アシアル株式会社
 
React Nativeで始めるアプリ開発
Ryosuke Hara
 
俺とAngular JS 2
Masayuki KaToH
 
Onsen UI 2.0とUIライブラリの未来
アシアル株式会社
 
Html5/JSモバイルアプリ最前線
アシアル株式会社
 
2016/05/01 Visual Studio with Cordova
miso- soup3
 
React Native 入門
Seiichi Okumiya
 
LT発表資料
murajun1978
 
HTML5 クロスプラットフォームアプリ開発の現実解
Monaca
 
Visual Studio 2015 を使用した Cordova アプリの開発
Osamu Monoe
 
javascript を Xcode でテスト
Yoichiro Sakurai
 
Going Serverless, Building Applications with No Servers
Keisuke Nishitani
 
多分モダンなWebアプリ開発
tak-nakamura
 
Ionicでハイブリッドアプリ入門①
Tomokatsu Iguchi
 
Meteor intro-2015-rev1- 日本語バージョン
Katsumi Honda
 
Ad

Recently uploaded (9)

PDF
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
 
PDF
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
 
PPTX
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
iPride Co., Ltd.
 
PPTX
色について.pptx .
iPride Co., Ltd.
 
PDF
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
 
PDF
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
フォーガンシー
 
PDF
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
 
PDF
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
 
PPTX
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
iPride Co., Ltd.
 
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
 
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
 
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
iPride Co., Ltd.
 
色について.pptx .
iPride Co., Ltd.
 
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
 
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
フォーガンシー
 
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
 
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
 
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
iPride Co., Ltd.
 

JavaScript(AngularJS・React.js)で作る iOS・Androidアプリハンズオン