Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JavaScript(AngularJS・React.js)で作る iOS・Androidアプ...
Search
kazu
July 23, 2016
Technology
0
160
JavaScript(AngularJS・React.js)で作る iOS・Androidアプリハンズオン
2016/7/22の勉強会資料
kazu
July 23, 2016
Tweet
Share
More Decks by kazu
See All by kazu
保険SaaSのORM導入について(2022/6/17、Server-Side Kotlin Meetup vol.3)
kazuhiroyoshimoto
0
3k
Other Decks in Technology
See All in Technology
事業部のプロジェクト進行と開発チームの改善の “時間軸" のすり合わせ
konifar
9
3.1k
法人支出管理領域におけるソフトウェアアーキテクチャに基づいたテスト戦略の実践
ogugu9
1
140
Uncertainty in the LLM era - Science, more than scale
gaelvaroquaux
0
560
GitLab Duo Agent Platformで実現する“AI駆動・継続的サービス開発”と最新情報のアップデート
jeffi7
0
160
セキュリティAIエージェントの現在と未来 / PSS #2 Takumi Session
flatt_security
3
1.4k
知っていると得する!Movable Type 9 の新機能を徹底解説
masakah
0
210
.NET 10 のパフォーマンス改善
nenonaninu
2
4.8k
32のキーワードで学ぶ はじめての耐量子暗号(PQC) / Getting Started with Post-Quantum Cryptography in 32 keywords
quiver
0
210
Master Dataグループ紹介資料
sansan33
PRO
1
4k
Multimodal AI Driving Solutions to Societal Challenges
keio_smilab
PRO
1
120
Ryzen NPUにおけるAI Engineプログラミング
anjn
0
220
私も懇親会は苦手でした ~苦手だからこそ懇親会を楽しむ方法~ / 20251127 Masaki Okuda
shift_evolve
PRO
4
560
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
527
40k
What's in a price? How to price your products and services
michaelherold
246
12k
A Tale of Four Properties
chriscoyier
162
23k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Into the Great Unknown - MozCon
thekraken
40
2.2k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
The Pragmatic Product Professional
lauravandoore
37
7.1k
A designer walks into a library…
pauljervisheath
210
24k
Leading Effective Engineering Teams in the AI Era
addyosmani
8
1.3k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.2k
Building Adaptive Systems
keathley
44
2.9k
Writing Fast Ruby
sferik
630
62k
Transcript
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ʢ̍ʣ ɾ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ʢ̎ʣ ɾ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) σʔλόΠϯσΟϯάʢ̍ʣʢAngularJSʣ ը໘(html) {{ data }} σʔλΛมߋ ද͕ࣔมߋ͞ΕΔ $scope.data
σʔλ(js) σʔλόΠϯσΟϯάʢ̎ʣʢ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
σΟϨΫςΟϒʢ̍ʣ ɾ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>
σΟϨΫςΟϒʢ̎ʣ ɾ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ʢ̍ʣ HTMLϨΠϠʔ (JavaScript) ɾMonacaͰ։ൃͨ͠ࡌ͞ΕΔϑϨʔϜϫʔΫ ɾσόΠεػೳʹΞΫηε͢ΔͨΊͷ ɹΈΛఏڙ ωΠςΟϒϨΠϠʔ (Objective-CɺSwiftɺJava) ݺͼग़͠
Cordovaʢ̎ʣ ɾInAppBrowser ɹɹΞϓϦͰϒϥβΛ։͘ ɾGeolocation ɹɹҐஔใͷऔಘ navigator.geolocation.getCurrentPosition (geolocationSuccess, [geolocationError],[geolocationOptions]); window.open(url, '_blank',
'location=no'); ɾ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ΞϓϦʹ ɹ͢Δ͜ͱͰ͖Δ
React.js ɾFacebook͕࡞ͬͨViewͷϥΠϒϥϦ ɾϑϨʔϜϫʔΫͰͳ͘ɺUIϥΠϒϥϦ ɾVirtual DOM ɹɹDOMͷঢ়ଶΛσʔλͱͯ࣋ͪ͠ɺ ɹɹঢ়ଶ͕มԽͨ͠ΒDOMΛ࠶ੜ͢Δ ɹɹʢࠩΛ࡞ʣ ɾίϯϙʔωϯτϕʔε ɾσʔλόΠσΟϯάʢ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: “͓ళ̍”} 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 ϓϩδΣΫτͷ࡞