Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
未経験からの挑戦!超速ネイティブアプリ開発
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Skycat
June 16, 2018
Technology
1.7k
0
Share
未経験からの挑戦!超速ネイティブアプリ開発
PHPカンファレンス福岡2018のスポンサーセッションをさせていただいたときの資料です。
https://phpcon.fukuoka.jp/2018/
Skycat
June 16, 2018
More Decks by Skycat
See All by Skycat
秒速でFlutterプロジェクトのCI/CD環境を構築した話
skycat_me
2
4.5k
SVNとGitを同期した話~Subgit~
skycat_me
1
1.9k
Other Decks in Technology
See All in Technology
AI Engineering Summit Tokyo 2026 AIの前に、やることがある 〜医療データ企業の4フェーズ〜
dtaniwaki
0
1.7k
AI と創る新たな世界 / A New World Created with AI
ks91
PRO
0
110
新アーキテクチャ「TiDB X」解説とDedicated比較 TiDB Cloud Premiumのゲーム運用活用を検証
staffrecruiter
0
110
先取りMaven4 ~16年ぶりのメジャーアップデート、その進化とは?~
ogiwarat
0
140
製造業のクラウド活用最適解〜AI,DXを加速するデータ基盤の作り方〜
hamadakoji
0
340
Databricks における 生成AIガバナンスの実践
taka_aki
1
300
電子辞書Brainをネットに繋げてみた(自力編)
raspython3
0
430
ルールやカスタム機能、どう使う?理想の出力を引き出すために今知りたいIBM Bob 5つの機能
muehara
1
320
イベントストーミングとKiroの仕様駆動開発で実現する要件の認識合わせプロセス
syobochim
7
1.1k
プラットフォームエンジニア ワークショップ/ platform-workshop
databricksjapan
1
250
Gradle×GitHub_ActionsでCI時間を約50%短縮 ジョブ分割の設計と落とし穴 / Cutting CI Time by ~50% with Gradle and GitHub Actions: Job-Splitting Design and Pitfalls
takatty
0
620
PHP と TypeScript の型システム比較:AI 時代の「型」は誰のためにあるのか? #frontend_phpcon_do / frontend_phpcon_do_2026
shogogg
1
240
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
180
Mind Mapping
helmedeiros
PRO
1
230
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
230
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
260
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
200
The SEO identity crisis: Don't let AI make you average
varn
0
480
Documentation Writing (for coders)
carmenintech
77
5.4k
AI: The stuff that nobody shows you
jnunemaker
PRO
8
690
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Navigating Weather and Climate Data
rabernat
0
210
Transcript
גࣜձࣾϋγΰ দຊ !TLZDBU@NF ະܦݧ͔Βͷઓʂ ωΠςΟϒΞϓϦ։ൃ
ࣗݾհ wদຊʢʣ wαʔόʔαΠυدΓΤϯδχΞ w1ZUIPO %BSU 1)1 +BWB4DSJQU $ $
1FSM +BWB… wגࣜձࣾϋγΰ݄ೖࣾ !TLZDBU@NF
ࣗࣾհ αΠόʔΤʔδΣϯτάϧʔϓͱͯ͠ ԬΛڌʹήʔϜӡӦ৽ن։ൃ ͳͲ༷ʑͳࣄۀΛߦͳ͓ͬͯΓ·͢ɻ IUUQTBU IUUQTDPMMFHJOPKQ
IUUQTBU
IBTJHP!ͷϞόΠϧ ΞϓϦ։ൃʹ͍ͭͯ ͷΛ͠·͢ 'MVUUFS
ٕज़બఆ w'MVUUFS wJ04"OESPJEରԠͷΫϩεϓϥοτϑΥʔϜ w։ൃݴޠ%BSU wڧྗͳ*%&ʹରԠ w*OUFMMJ+*%&"74$PEF
ٕज़બఆ'MVUUFS࠾༻ wֶशίετͷ wJ04"OESPJEΤϯδχΞ͕͍ͳ͔ͬͨͨΊɺ ΫϩεϓϥοτϑΥʔϜʹ͢Δ͜ͱͰֶश ίετΛ͔͑ͨͬͨ wର߅അ w3FBDU/BUJWF9BNBSJO wͰ৽͍͜͠ͱΓ͔ͨͬͨΜʂ
'MVUUFSͱ "OESPJEJ04ʹରԠͨ͠ (PPHMFൃͷϞόΠϧ6*ϑϨʔϜϫʔΫ wݴޠ%BSU ॻ͖͍͢ʂ wಠࣗϨϯμϦϯά wෳͷϓϥοτϑΥʔϜͰશಉҰͷ6* w·ͩϕʔλ W
'MVUUFSͬͯԿ͕ྑ͍ͷʁ wେྔͷ8JEHFU͕༻ҙ͞Ε͍ͯΔʢ6*ύʔπʣ w ͜ͷ8JEHFUΛΈ߹Θͤͯ6*Λ࡞͍ͬͯ͘ wεςʔτϨεͳߴϗοτϦϩʔυػೳ w ։ൃ͕ͱͯޮΑ͘ਐΊΒΕΔ w։ൃڥߏங͕ͱͯ؆୯ w ґଘੑ֬ೝͷίϚϯυˠqVUUFSEPDUPS
6*ΛΜͰΈΔ w ͜ͷ8JEHFUΛΈ߹Θͤͯ6*Λ࡞͍͖ͬͯ·͢ *NBHF 5FYU 5BH 5BH $PMVNO $PMVNO *NBHF
5FYU 3PX 5BH 5BH 8JEHFU5SFF 3PX
͔͜͜Β࣮ࡍʹ։ൃΛॳ Ίͯߦͬͯେมͩͬͨͷ Λհ͍͖ͯ͠·͢
'MVUUFSঢ়ଶཧ $PMVNO $BSE 5FYU *NBHF 4MJEFS $POUBJOFS *NBHF 5FYU %BUB
%BUB
'MVUUFSঢ়ଶཧ $PMVNO %BUB $BSE 5FYU *NBHF 4MJEFS $POUBJOFS *NBHF 5FYU
%BUB %BUB *OIFSJUFE8JEHFU
'MVUUFSঢ়ଶཧ w4DPQFE@NPEFM w *OIFSJUFE8JEHFUΛแؚ֦ு͍ͯ͠Δ֎෦ύοέʔδ w *OIFSJUFE8JEHFUΛܧঝͨ͠ঢ়ଶཧ.PEFMΛఆٛ͢Δ ͜ͱͰɺͦΕͧΕ*OIFSJUFE8JEHFUΛఆٛ͠ͳͯ͘Α͘ ͳͬͯͱͯεοΩϦ͢ΔΑʂ w IUUQTQVCEBSUMBOHPSHQBDLBHFTTDPQFE@NPEFM
'MVUUFSঢ়ଶཧ Ͱɾɾɾ ͪΐͬͱ·ͯΑɾɾɾ ͟Θɾɾɾ͟Θɾɾɾɾ
'MVUUFSঢ়ଶཧ 6*ͱϩδοΫ͕ 混沌ͱ͍ͯ͠Δʂʁ
@override Widget build(BuildContext context) { TodoListContainerState container = TodoListContainer.of(context); //
ϑΟϧλϦϯά͍ͨ͠ switch (container.widget.filterMode) { case FilterMode.checked: filteredTodoList = container.getCheckedTodoList(); break; case FilterMode.unchecked: filteredTodoList = container.getUncheckedTodoList(); break; case FilterMode.none: default: List<Entry> todoList = container.getTodoList(); if (todoList != null) { filteredTodoList = todoList; } break; } container.addLoadingEndListener(this); return new Scaffold( body: new ListView.builder( padding: const EdgeInsets.all(16.0), itemCount: filteredTodoList.length, itemBuilder: (context, i) => new TodoEntryItem(filteredTodoList[i])), ); } ඳըϝιου ϩδοΫ ඳը͢Δ8JEHFU
#-P$ΞʔΩςΫνϟ w #VTJOFTT-PHJD$PNQPOFOU w 6*ͱϩδοΫΛશʂ w #VJMESFBDUJWFNPCJMFBQQTXJUI'MVUUFS (PPHMF*0 w
IUUQTZPVUVCF34H#&Q0*
#-P$ΞʔΩςΫνϟ w ࡾݪଇ w ೖྗͱग़ྗγϯϓϧͳ4USFBN4JOL͔͠ڐ͞Εͳ͍ w ґଘੑೖՄೳͰϓϥοτϑΥʔϜʹґଘ͠ͳ͍ w ϓϥοτϑΥʔϜ͝ͱͷذ͠ͳ͍ w
͜ΕΒΛक͍ͬͯΔͳΒԿͰͬͯΑ͠ʂ Flutter / AngularDart – Code sharing, better together (DartConf 2018) IUUQTZPVUVCF1-)MOX)H1&
#-P$ʹͯ͠Α͔ͬͨ͜ͱ w 6*ͱϩδοΫ͕͞ΕΔͨΊ w γϯϓϧʹ࣮ʹͰ͖Δʂ w Մಡੑ͕61ʂ w ςετॻ͖͍͢ʂ
·ͱΊ w ৽͍ٕ͠ज़ָ͍͚͠Ͳ݁ߏἚͷಓ w ·ͣຊޠࢿྉ͕΄ͱΜͲͳ͍ w ͨͩ͠(PPHMFͱ͍͏࠷ڧͷ͕͍ؒΔͨΊͱͬͯ҆৺ Ͱ͖Δʂ w %BSUֶशίετ͕ͦ͜·Ͱߴ͘ͳͯ͘Α͔ͬͨ
w 'MVUUFS͍͍ͧʂ
͓·͚ ։ൃॳظʜ 'MVUUFSͬͯΈΑ͏ͥʂ ͱબఆͨ͠ͷͷʜ શһ%BSU'MVUUFSະܦݧ
ͦ͜ͰϞϒϓϩͩʂʂ
Ϟϒϓϩάϥϛϯά࠷ߴʂ w υϥΠόͷ࣋ͪ࣌ؒʂ w ͦͷଞͷਓφϏήʔλ ࢦࣔग़͠ w ΈΜͳͰ࣮ࡍʹ࣮͢ΔͷͰɺશһͷཧղ͕ߴ·Δɻ w
φϨοδͷڞ༗͕Ͱ͖ͯͱ͍͍ͯײ͡ʂ υϥΠό ίʔσΟϯά୲ Λॱ൪Ͱճ͍ͯ͘͠ɻ ͦͷଞͷਓφϏήʔλʔʢࢦࣔग़͠ʣͱͯ͠ࢀՃ͢Δɻ
ٸʹ'MVUUFSͰ։ൃͨ͘͠ͳͬ ͨͦ͜ͷ͋ͳͨʂʂ ҰॹʹϞϒϓϩ͠·ͤΜ͔ʂ
ੋඇɺϋγΰͷϒʔεʹ ༡ͼʹདྷ͍ͯͩ͘͞ʂʂʂ ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠