Slide 1

Slide 1 text

iOSΤϯδχΞ͸ΠέͯΔ Android։ൃ Λ׬શʹཧղͨ͠() Android։ൃָ͠ΜͰ͍͜͏Ͷ

Slide 2

Slide 2 text

ࣗݾ঺հ • iOS/AndroidΤϯδχΞʢࣗশʣ • ܦྺ: ͳΜͪΌͬͯSE->NWΤϯδχΞ[SIer]->αʔόʔαΠυΤϯδ χΞ[SIer](java/PHP..etc)->iOS/Android ΞϓϦ։ൃ[ελʔτΞοϓ] ʹͳΓ·͢ • ΞϓϦ։ൃେ޷͖(°˜°)(°˜°)(°˜°)(°˜°)

Slide 3

Slide 3 text

΋͘͡

Slide 4

Slide 4 text

΋͘͡

Slide 5

Slide 5 text

స৬ཧ༝͸࠙਌ձͰฉ͍͍ͯͩ͘͞

Slide 6

Slide 6 text

๻ͷϨϕϧ • ͔ͳΓiOSΑΓ • Ұ͔ΒαΫοͱ࡞ΕΔ(͸ͣ) • RxSwiftͰMVVMͷಋೖ͸ܦݧ͋Δ • ͔͠͠ • Android։ൃ(Kotlin)͸࠷ۙ͋Μ·Γ΍ͬͯͳ͍ • ؆୯ͳมߋ͸Ͱ͖Δ͚Ͳ

Slide 7

Slide 7 text

https://developer.android.com/jetpack?hl=JA Android jetpackͳΔ΋ͷ͕͋ΔΒ͍͠…

Slide 8

Slide 8 text

ͨ͘͞Μ͋ͬͯƂŜŽūŘ…

Slide 9

Slide 9 text

ྲྀߦΓʁͷMVVMͰ͍͍ײ͡ʹͰ͖ ΔΑ͏ʹͳΔͱ͜ΖΛ໨ࢦͦ͏ʂ

Slide 10

Slide 10 text

Google ΞʔΩςΫνϟ https://developer.android.com/topic/libraries/architecture/ Lifecycle (ϥΠϑαΠΫϧΠϕϯτʹࣗಈతʹԠ౴͢ΔUIΛ࡞੒) LiveData (Ϗϡʔʹ௨஌͢ΔσʔλΦϒδΣΫτͷߏங) ViewModel (ΞϓϦͷճసͰഁغ͞Εͳ͍UIؔ࿈ͷσʔλΛอଘ) Room (ΞϓϦ಺ΦϒδΣΫτͱίϯύΠϧ࣌ͷνΣοΫΛ࢖༻ͯ͠ɺΞϓϦͷSQLiteσʔλϕʔεʹΞΫ ηε) architectureपΓ͔Β͍͘

Slide 11

Slide 11 text

https://developer.android.com/topic/libraries/architecture/ Lifecycle (ϥΠϑαΠΫϧΠϕϯτʹࣗಈతʹԠ౴͢ΔUIΛ࡞੒) ⭐ LiveData (Ϗϡʔʹ௨஌͢ΔσʔλΦϒδΣΫτͷߏங) ⭐ ViewModel (ΞϓϦͷճసͰഁغ͞Εͳ͍UIؔ࿈ͷσʔλΛอଘ) ⭐ Room (ΞϓϦ಺ΦϒδΣΫτͱίϯύΠϧ࣌ͷνΣοΫΛ࢖༻ͯ͠ɺΞϓϦͷSQLiteσʔλϕʔεʹΞΫ ηε) architectureपΓ͔Β͍͘

Slide 12

Slide 12 text

ΜͰ๻͕஌ͬͯΔiOS։ൃͷMVVM ͷొ৔ਓ෺͸ͲΜͳײͩ͡Ζ͏ʁ

Slide 13

Slide 13 text

JPT "OESPJE 7JFXͷදࣔϩδοΫ $POUSPMMFS "DUJWJUZ'SBHNFOUͷؔ܎ੑ͸$POUBJOFS7JFXͱ ෳ਺ͷ7JFX$POUSPMMFSͰ࣮ݱ "DUJWJUZ'SBHNFOU ༧Ί༻ҙ͞Ε͍ͯΔ 7JFXͷදࣔϩδοΫ $POUSPMMFS EFMFHBUFEBUBTPVSDF ෦෼͕ͦΕʹ౰ͨΔ͸ͣ "EBQUFS 7JFXͱ.PEFMΛܨ͙ ΋ͷ 7JFX.PEFM 3YͳͲͷϥΠϒϥϦ͕ඞཁɻઃܭ͕ΦϨΦϨ "OESPJE7JFX.PEFM ެࣜͰఏڙ %BUBCJOEJOH $POUSPMMFSFUD 3YͳͲͷϥΠϒϥϦ͕ඞཁɻ $POUSPMMFSPSEBUBTPVSDFΛผϑΝΠϧͰࢦఆ͠ ͦ͜ͰCJOEͷ಺༰Λॻ͘ %BUB#JOEJOH6UJM ެࣜͰఏڙ ࣗಈੜ੒͞ΕΜͷ͕ΩϞ ͍ .PEFM "1*$MJFOUͰୟ͍ͨ݁ՌΛఆٛͨ͠ߏ଄ମ TUSVDU ʹ֨ೲ "MBNPpSF"1*,JUͳͲ "1*$MJFOUͰୟ͍ͨ݁ՌΛ ఆٛͨ͠ߏ଄ମ EBUB DMBTT ʹ֨ೲ 3FUSP'JU 7JFX 4UPSU#PBSEYJCFUD ๻͸4UPSU#PBSE޷͖Ͱ͢ YNM YNM͏Β΍·͍͠ iOS/Android։ൃͬ͘͟Γൺֱ

Slide 14

Slide 14 text

ViewͷදࣔϩδοΫ

Slide 15

Slide 15 text

ViewͷදࣔϩδοΫ - Lifecycle Lifecycle-aware components perform actions in response to a change in the lifecycle status of another component, such as activities and fragments. These components help you produce better- organized, and often lighter-weight code, that is easier to maintain. ϥΠϑαΠΫϧରԠίϯϙʔωϯτ͸ɺΞΫςΟϏςΟ΍ϑϥάϝϯτͳͲɺଞͷίϯϙʔωϯτͷϥΠϑ αΠΫϧεςʔλεͷมԽʹԠͯ͡ΞΫγϣϯΛ࣮ߦ͠·͢ɻ͜ΕΒͷίϯϙʔωϯτΛ࢖༻͢Δͱɺ੔ཧ ͕༰қͰɺΑΓܰྔͳίʔυΛ؆୯ʹ࡞੒Ͱ͖·͢ɻ

Slide 16

Slide 16 text

ViewͷදࣔϩδοΫ - Lifecycle

Slide 17

Slide 17 text

ViewͷදࣔϩδοΫ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) if (savedInstanceState == null) { //ϓϩδΣΫτҰཡͷFragment val fragment = ProjectListFragment() supportFragmentManager .beginTransaction() .add(R.id.fragment_container, fragment, TAG_OF_PROJECT_LIST_FRAGMENT) .commit() } } J04Ͱ͍͏Կͳͷ͔͸ Θ͔ΒΜ 㶦꒳㶦 ŝžŕ Activity͸FragmentΛݺͼग़͢

Slide 18

Slide 18 text

ViewͷදࣔϩδοΫ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { //dataBinding༻ͷϨΠΞ΢τϦιʔεΛηοτ binding = DataBindingUtil.inflate(inflater, R.layout.fragment_project_list, container, false) //ΠϕϯτͷcallbackΛadapterʹ఻ୡ projectAdapter = ProjectAdapter() //্هadapterΛreclclerViewʹద༻ requireNotNull(binding).projectList.adapter = projectAdapter //Loading։࢝ requireNotNull(binding).isLoading = true //rootViewΛऔಘ return requireNotNull(binding).root } override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) val viewModel = ViewModelProviders.of(this).get(ProjectListViewModel::class.java) //؂ࢹΛ։࢝ observeViewModel(viewModel) } J04Ͱ͍͏ $POUSPMMFS Έ͍ͨͳ MVVM͔ͩΒFragment͸ViewModel΍Adapter΁ड͚౉͢͠Δ͚ͩ

Slide 19

Slide 19 text

༧Ί༻ҙ͞Ε͍ͯΔ ViewͷදࣔϩδοΫ - Adapter

Slide 20

Slide 20 text

ViewͷදࣔϩδοΫ - Adapter An Adapter object acts as a bridge between an AdapterView and the underlying data for that view. The Adapter provides access to the data items. The Adapter is also responsible for making a View for each item in the data set. AdapterΦϒδΣΫτ͸ɺAdapterViewͱͦͷϏϡʔͷجʹͳΔσʔλͱͷؒͷϒϦοδͱͯ͠ػೳ͠· ͢ɻΞμϓλ͸σʔλ߲໨΁ͷΞΫηεΛఏڙ͠·͢ɻΞμϓλ͸ɺσʔληοτ಺ͷ֤߲໨ʹରͯ͠Ϗϡʔ Λ࡞੒͢Δ੹೚΋͋Γ·͢ɻ JPT։ൃͰ͍͏ UBCMFWJFXͱ͔ʹ౉͢ EBUBTPVSDFͩ

Slide 21

Slide 21 text

ViewͷදࣔϩδοΫ - Adapter & DataBinding 3Y4XJGUͰ΋ಉ͡ϊϦͰ CJOEJOH͢ΔΑ // σʔλΛset͢Δ fun setProjectList(projectList: List) { this.projectList = projectList result.dispatchUpdatesTo(this) } } // σʔλΛview಺ͷitemʹ౰ͯ͸ΊΔ override fun onCreateViewHolder(parent: ViewGroup, viewtype: Int): ProjectViewHolder { val binding = DataBindingUtil.inflate( LayoutInflater.from(parent.context), R.layout.project_list_item, parent, false) as ProjectListItemBinding //ࣗಈੜ੒͞ΕͨDataBinding༻ͷjavaclass return ProjectViewHolder(binding) }

Slide 22

Slide 22 text

ViewͱModelΛܨ͙΋ͷ - ViewModel

Slide 23

Slide 23 text

ViewModel The ViewModel class is designed to store and manage UI-related data in a lifecycle conscious way. The ViewModel class allows data to survive configuration changes such as screen rotations. The Android framework manages the lifecycles of UI controllers, such as activities and fragments. The framework may decide to destroy or re-create a UI controller in response to certain user actions or device events that are completely out of your control. ViewModelΫϥε͸ɺϥΠϑαΠΫϧΛҙࣝͨ͠ํ๏ͰUIؔ࿈ͷσʔλΛ֨ೲ͓Αͼ؅ཧ͢ΔΑ͏ʹઃܭ ͞Ε͍ͯ·͢ɻ ViewModelΫϥεΛ࢖༻͢ΔͱɺσʔλΛը໘ͷճసͳͲͷߏ੒มߋʹ଱͑Δ͜ͱ͕Ͱ͖ ·͢ɻ 3Y4XJGUͰ΍ͬͨ΍ͭͩ ͳʂ

Slide 24

Slide 24 text

ViewModel class ProjectListViewModel(application: Application) : AndroidViewModel(application) { val projectListObservable: LiveData> init { // APIͷ݁ՌΛObservable΁ projectListObservable = FootballRepository.instance.getProjectList() } } 3Y4XJGUͰ ΋ࢥ͚ͬͨͲ γϯϓϧͳߏ੒ͳΒ 7JFX.PEFM͍Βͳ͍͔΋Ͷ σʔλݺͼग़ͯ͠Observable(؂ࢹͰ͖ΔΑ͏ʹ)͢Δʂ

Slide 25

Slide 25 text

View J04Ͱ͍͏ DPVTUPN7JFXʹ.PEFM౉͢ ϊϦ

Slide 26

Slide 26 text

Model public class User { private final String firstName; private final String lastName; public User(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public String getFirstName() { return this.firstName; } public String getLastName() { return this.lastName; } } .PEFMͷ࡞Γํ͸ͦΜͳ มΘΜͳ͍ͳ

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

ͱ͍͏Θ͚Ͱ ࡞ͬͯΈͨΞϓϦΛdemo͠·͢ ( ˙꒳˙ )ŝžŕ

Slide 29

Slide 29 text

Googleਆͷެࣜsample https://github.com/googlesamples/android-architecture- components/tree/master/GithubBrowserSample Android - MVVM https://proandroiddev.com/android-viewmodel-livedata- coroutines-contraption-e1e44af690a6 ࢀߟࢿྉ Googleਆ͕ఏڙ͢Δjetpack https://developer.android.com/jetpack?hl=JA ࠓճେ͖͘ύΫͬ ࢀߟʹͨ͠Qiitaهࣄ https://qiita.com/Tsutou/items/69a28ebbd69b69e51703

Slide 30

Slide 30 text

Twitter GitHub ϦϙδτϦ࡞͍ͬͨͥ( ˙꒳˙ )ŝžŕ ⭐⭐⭐⭐⭐⭐

Slide 31

Slide 31 text

͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠