Android Architecture Componentsを使って、改善・効率化するAndroidアプリ開発

Android Architecture Componentsを使って、改善・効率化するAndroidアプリ開発

@builderscon 2019

90ec81078e4fd2b905f8ef0776887afa?s=128

Ryo Sakaguchi

August 30, 2019
Tweet

Transcript

  1. ©2019 Wantedly, Inc. "OESPJE"SDIJUFDUVSF$PNQPOFOUͰ
 վળɾޮ཰Խ͢Δ"OESPJEΞϓϦ։ൃ CVJMEFSTDPO XBLXBL 3ZP4BLBHVDIJ 2019.8.30 -

  2. ©2019 Wantedly, Inc. Ryo Sakaguchi • Wantedly, Inc • Android/Kotlin…

    • Sake/Beer/Guitar… • Twitter/GitHub: @wakwak3125
  3. ϖʔδλΠτϧ ϖʔδαϒλΠτϧ ©2019 Wantedly, Inc. "OESPJEΛϝΠϯͰ΍ͬͯΔਓ " ͍Βͬ͠Ό͍·͢ʜʁ

  4. ©2019 Wantedly, Inc.  ""$ͷશମ૾  طଘϓϩμΫτ΁ͷಋೖͱͦͷมԽ  ΩϟονΞοϓํ๏ 

    ·ͱΊ ࿩͢͜ͱ AAC=Android Architecture Components
  5. ©2019 Wantedly, Inc.  ""$ͷશମ૾  طଘϓϩμΫτ΁ͷಋೖͱͦͷมԽ  ΩϟονΞοϓํ๏ 

    ·ͱΊ ࿩͢͜ͱ AAC=Android Architecture Components
  6. ©2019 Wantedly, Inc.  ""$ͷશମ૾  طଘϓϩμΫτ΁ͷಋೖͱͦͷมԽ  ΩϟονΞοϓํ๏ 

    ·ͱΊ ࿩͢͜ͱ AAC=Android Architecture Components
  7. ©2019 Wantedly, Inc.  ""$ͷશମ૾  طଘϓϩμΫτ΁ͷಋೖͱͦͷมԽ  ΩϟονΞοϓํ๏ 

    ·ͱΊ ࿩͢͜ͱ AAC=Android Architecture Components
  8. ©2019 Wantedly, Inc.  ""$ͷશମ૾  طଘϓϩμΫτ΁ͷಋೖͱͦͷมԽ  ΩϟονΞοϓํ๏ 

    ·ͱΊ ࿩͢͜ͱ AAC=Android Architecture Components
  9. ©2019 Wantedly, Inc. ""$ͷશମ૾

  10. ©2019 Wantedly, Inc.  ""$ͱ͸ʁ  ϥΠϒϥϦͷ঺հ  ొ৔ʹΑͬͯมԽͨ͜͠ͱ AACͷશମ૾

    ࿩͢͜ͱ
  11. ©2019 Wantedly, Inc. ""$ͱ͸ʁ ""$ͷશମ૾

  12. ©2019 Wantedly, Inc. Android architecture components 
 are a collection

    of libraries that help you design robust, testable, and maintainable apps. Page Title Page Subtitle https://developer.android.com/topic/libraries/architecture
  13. ©2019 Wantedly, Inc. Android architecture components 
 are a collection

    of libraries that help you design robust, testable, and maintainable apps. Page Title Page Subtitle https://developer.android.com/topic/libraries/architecture
  14. ©2019 Wantedly, Inc. Android architecture components 
 are a collection

    of libraries that help you design robust, testable, and maintainable apps. Page Title Page Subtitle https://developer.android.com/topic/libraries/architecture
  15. ©2019 Wantedly, Inc. Android architecture components 
 are a collection

    of libraries that help you design robust, testable, and maintainable apps. Page Title Page Subtitle https://developer.android.com/topic/libraries/architecture
  16. ©2019 Wantedly, Inc. Android architecture components 
 are a collection

    of libraries that help you design robust, testable, and maintainable apps. Page Title Page Subtitle https://developer.android.com/topic/libraries/architecture
  17. ©2019 Wantedly, Inc. ϥΠϒϥϦͷ঺հ ൺֱతೃછΈਂ͍͋ͷࢠ΋""$ͷҰһͰ͢

  18. ©2019 Wantedly, Inc.  %BUB#JOEJOH  -JGFDZDMF  -JWF%BUB 

    7JFX.PEFM  3PPN AACͷҰһͨͪ ϥΠϒϥϦͷ঺հ  8PSL.BOBHFS  1BHJOH  /BWJHBUJPO
  19. ©2019 Wantedly, Inc. https://developer.android.com/ jetpack/docs/guide Page Title Page Subtitle

  20. ©2019 Wantedly, Inc.  %BUB#JOEJOH  -JGFDZDMF  -JWF%BUB 

    7JFX.PEFM  3PPN AACͷҰһͨͪ ϥΠϒϥϦͷ঺հ  8PSL.BOBHFS  1BHJOH  /BWJHBUJPO
  21. ©2019 Wantedly, Inc. %BUB#JOEJOH

  22. ©2019 Wantedly, Inc. YNMͰϨΠΞ΢τΛఆٛ͢Δ جຊతͳ"OESPJEͷը໘ͷ࡞Γํ %BUB#JOEJOHະ࢖༻ <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent" tools:context=“.MainActivity">

    <TextView android:id="@+id/text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> text_view
  23. ©2019 Wantedly, Inc. +BWB,PUMJO͔Β࢖͏ جຊతͳ"OESPJEͷը໘ͷ࡞Γํ %BUB#JOEJOHະ࢖༻ val textView = findViewById<TextView>(R.id.text_view)

    textView.text = "Hello, World!" text_view
  24. ©2019 Wantedly, Inc. YNMͰϨΠΞ΢τΛఆٛ͢Δ جຊతͳ"OESPJEͷը໘ͷ࡞Γํ %BUB#JOEJOH <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity">

    <TextView android:id="@+id/text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{text}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> android:text="@{text}"
  25. ©2019 Wantedly, Inc. !\^ͱ͍͏ܗͰηοτ͢Δ جຊతͳ"OESPJEͷը໘ͷ࡞Γํ %BUB#JOEJOH <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity">

    <TextView android:id="@+id/text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{text}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> android:text="@{text}"
  26. ©2019 Wantedly, Inc. YNM͔Β#JOEJOHΫϥε͕ੜ੒͞ΕΔ جຊతͳ"OESPJEͷը໘ͷ࡞Γํ %BUB#JOEJOH <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity">

    <TextView android:id="@+id/text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{text}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> android:text="@{text}"
  27. ©2019 Wantedly, Inc. Lifecycle Lifecycle-Aware Components

  28. ©2019 Wantedly, Inc. ԿΒ͔ͷඇಉظͳॲཧΛ࣮૷͢Δͱ͖͸ ݱࡏͷը໘͕ʮੜ͖͍ͯΔʯͷ͔ʮࢮΜͰ͍Δʯͷ͔ʹ஫ҙΛ෷͏ඞཁ͕͋Δ w ը໘͕ੜ͖͍ͯΔ࣌ʹඇಉظॲཧͷ݁Ռ͕ฦͬͯ ͖ͨʂը໘ʹ൓ө͠Α͏ʂ ‎ 0,

    w ը໘͕ࢮΜͰ͍Δ࣌ʹඇಉظॲཧͷ݁Ռ͕ฦͬͯ ͖ͨʂը໘ʹ͸OʢSZ ‎ /( Ϋϥογϡ͢Δ Α͋͘Γ͕ͪͳύλʔϯ -JGFDZDMF
  29. ©2019 Wantedly, Inc. !0O-JGFDZDMF&WFOU ʜ -JGFDZDMF"XBSF$PNQPOFOUT @OnLifecycleEvent(Lifecycle.Event.ON_START) fun start() {

    // startObserveSomething { result -> // callback(result) // } } @OnLifecycleEvent(Lifecycle.Event.ON_STOP) fun stop() { // ઀ଓΛղআ͢Δ }
  30. ©2019 Wantedly, Inc. -JGFDZDMF&WFOU0/@45"35 -JGFDZDMF"XBSF$PNQPOFOUT @OnLifecycleEvent(Lifecycle.Event.ON_START) fun start() { //

    startObserveSomething { result -> // callback(result) // } } @OnLifecycleEvent(Lifecycle.Event.ON_STOP) fun stop() { // ઀ଓΛղআ͢Δ } w 3FBDU w DPNQPOFOU%JE.PVOU w J04 w WJFX%JE"QQFBS ଞͷϑϨʔϜϫʔΫʹ౰ͯ͸ΊΔͱ͜Μͳײ͡
  31. ©2019 Wantedly, Inc. -JGFDZDMF&WFOU0/@4501 -JGFDZDMF"XBSF$PNQPOFOUT @OnLifecycleEvent(Lifecycle.Event.ON_START) fun start() { //

    startObserveSomething { result -> // callback(result) // } } @OnLifecycleEvent(Lifecycle.Event.ON_STOP) fun stop() { // ઀ଓΛղআ͢Δ } ଞͷϑϨʔϜϫʔΫʹ౰ͯ͸ΊΔͱ͜Μͳײ͡ w 3FBDU w DPNQPOFOU8JMM6ONPVOU w J04 w WJFX8JMM%JTBQQFBS
  32. ©2019 Wantedly, Inc. ϥΠϑαΠΫϧΛ֎ग़͠Ͱ͖Δ ͭ·ΓɺͦΕʹґଘͨ͠ίʔυͷݺͼग़͠࿙ΕΛ๷͙͜ͱ͕Ͱ͖Δ w 3Y+BWB΍3Y4XJGUͳͲͷετϦʔϜͷղআͱ͔ w ը໘ͷϥΠϑαΠΫϧʹ४ͨ͡ಠࣗͷΦϒδΣΫ τΛ࡞Δ͜ͱ͕Ͱ͖Δɻ

    ͪΐͬͱ·ͱΊΔͱ -JGFDZDMF
  33. ©2019 Wantedly, Inc. LiveData Observable data holder

  34. ©2019 Wantedly, Inc. -JGFDZDMFΛߟྀͯ͘͠ΕΔɺ0CTFSWBCMF ϑϨʔϜϫʔΫͷ-JGFDZDMFʹ͏·͘৐͔ͬͬͯ͘ΕΔ w -JGFDZDMFతʹɺը໘ͷߋ৽Λͯ͠΋ྑ͍ঢ়ଶͷ ࣌ʹ͸஋͕ྲྀΕͯ͘Δɻͦ͏͡Όͳ͍ͱ͖͸ྲྀΕ ͯ͜ͳ͍ ‎

    ը໘͕ࢮΜͩޙʹ7JFXΛߋ৽͠Α͏ͱͯ͠ࢮͳ ͳ͍ ‎ ։ൃऀ͸-JGFDZDMF΁ͷҙࣝΛ͜Ε·ͰΑΓ΋ɺ ͠ͳ͘ͱ΋7JFXͷߋ৽ॲཧ͕Ͱ͖ΔΑ͏ʹͳͬ ͯɺޮ཰తͰɺੜ࢈ੑ͕ߴ͍ ͦ΋ͦ΋ͲΜͳ΋ͷʁ -JWF%BUB
  35. ©2019 Wantedly, Inc. -JGFDZDMFΛߟྀͯ͘͠ΕΔɺ0CTFSWBCMF ϑϨʔϜϫʔΫͷ-JGFDZDMFʹ͏·͘৐͔ͬͬͯ͘ΕΔ w -JGFDZDMFతʹɺը໘ͷߋ৽Λͯ͠΋ྑ͍ঢ়ଶͷ ࣌ʹ͸஋͕ྲྀΕͯ͘Δɻͦ͏͡Όͳ͍ͱ͖͸ྲྀΕ ͯ͜ͳ͍ ‎

    ը໘͕ࢮΜͩޙʹ7JFXΛߋ৽͠Α͏ͱͯ͠ࢮͳ ͳ͍ ‎ ։ൃऀ͸-JGFDZDMF΁ͷҙࣝΛ͜Ε·ͰΑΓ΋ɺ ͠ͳ͘ͱ΋7JFXͷߋ৽ॲཧ͕Ͱ͖ΔΑ͏ʹͳͬ ͯɺޮ཰తͰɺੜ࢈ੑ͕ߴ͍ ͦ΋ͦ΋ͲΜͳ΋ͷʁ -JWF%BUB
  36. ©2019 Wantedly, Inc. -JGFDZDMFΛߟྀͯ͘͠ΕΔɺ0CTFSWBCMF ϑϨʔϜϫʔΫͷ-JGFDZDMFʹ͏·͘৐͔ͬͬͯ͘ΕΔ w -JGFDZDMFతʹɺը໘ͷߋ৽Λͯ͠΋ྑ͍ঢ়ଶͷ ࣌ʹ͸஋͕ྲྀΕͯ͘Δɻͦ͏͡Όͳ͍ͱ͖͸ྲྀΕ ͯ͜ͳ͍ ‎

    ը໘͕ࢮΜͩޙʹ7JFXΛߋ৽͠Α͏ͱͯ͠ࢮͳ ͳ͍ ‎ ։ൃऀ͸-JGFDZDMF΁ͷҙࣝΛ͜Ε·ͰΑΓ΋ɺ ͠ͳ͘ͱ΋7JFXͷߋ৽ॲཧ͕Ͱ͖ΔΑ͏ʹͳͬ ͯɺޮ཰తͰɺੜ࢈ੑ͕ߴ͍ ͦ΋ͦ΋ͲΜͳ΋ͷʁ -JWF%BUB
  37. ©2019 Wantedly, Inc. -JGFDZDMFΛߟྀͯ͘͠ΕΔɺ0CTFSWBCMF ϑϨʔϜϫʔΫͷ-JGFDZDMFʹ͏·͘৐͔ͬͬͯ͘ΕΔ w -JGFDZDMFతʹɺը໘ͷߋ৽Λͯ͠΋ྑ͍ঢ়ଶͷ ࣌ʹ͸஋͕ྲྀΕͯ͘Δɻͦ͏͡Όͳ͍ͱ͖͸ྲྀΕ ͯ͜ͳ͍ ‎

    ը໘͕ࢮΜͩޙʹ7JFXΛߋ৽͠Α͏ͱͯ͠ࢮͳ ͳ͍ ‎ ։ൃऀ͸-JGFDZDMF΁ͷҙࣝΛ͜Ε·ͰΑΓ΋ɺ ͠ͳ͘ͱ΋7JFXͷߋ৽ॲཧ͕Ͱ͖ΔΑ͏ʹͳͬ ͯɺޮ཰తͰɺੜ࢈ੑ͕ߴ͍ ͦ΋ͦ΋ͲΜͳ΋ͷʁ -JWF%BUB
  38. ©2019 Wantedly, Inc. -JGFDZDMF0XOFS -JGFDZDMFͷঢ়ଶΛ஌͍ͬͯΔଘࡏ public interface LifecycleOwner { /**

    * Returns the Lifecycle of the provider. * * @return The lifecycle of the provider. */ @NonNull Lifecycle getLifecycle(); }
  39. ©2019 Wantedly, Inc. 0CTFSWF͢Δ࣌ʹɺ-JGFDZDMF0XOFSΛऔΔ -JWF%BUB viewModel.comments.observe(lifecycleOwner, Observer { // ͜͜ʹίϝϯτͷϦετ͕ྲྀΕͯ͘Δɻ

    })
  40. ©2019 Wantedly, Inc. -JGFDZDMFΛߟྀͯ͘͠ΕΔɺ0CTFSWBCMF ϑϨʔϜϫʔΫͷ-JGFDZDMFʹ͏·͘৐͔ͬͬͯ͘ΕΔ w -JGFDZDMFతʹɺը໘ͷߋ৽Λͯ͠΋ྑ͍ঢ়ଶͷ ࣌ʹ͸஋͕ྲྀΕͯ͘Δɻͦ͏͡Όͳ͍ͱ͖͸ྲྀΕ ͯ͜ͳ͍ ‎

    ը໘͕ࢮΜͩޙʹ7JFXΛߋ৽͠Α͏ͱͯ͠ࢮͳ ͳ͍ ‎ ։ൃऀ͸-JGFDZDMF΁ͷҙࣝΛ͜Ε·ͰΑΓ΋ɺ ͠ͳ͘ͱ΋7JFXͷߋ৽ॲཧ͕Ͱ͖ΔΑ͏ʹͳͬ ͯɺޮ཰తͰɺੜ࢈ੑ͕ߴ͍ ͦ΋ͦ΋ͲΜͳ΋ͷʁ -JWF%BUB
  41. ©2019 Wantedly, Inc. ViewModel Store and manage UI-related data in

    a lifecycle conscious way
  42. ©2019 Wantedly, Inc. 7JFX.PEFM ఆٛࣗମ͸ͱͯ΋ബ͍ public abstract class ViewModel {

    @SuppressWarnings("WeakerAccess") protected void onCleared() { } } ࣮ࡍʹ͸ߦఔͲ͸͋Δɻ͕ɺͦΕͰ΋ബ͍
  43. ©2019 Wantedly, Inc. ը໘ճసΛ৐Γ੾Δ͜ͱ͕Ͱ͖Δ ը໘͕ճసͨ࣌͠ɺը໘͸࠶ੜ੒͞ΕΔ͕ɺ7JFX.PEFM͸มΘΒͳ͍ w ͭ·Γɺ7JFX.PEFM͸ը໘Λੜ੒ͨ࣌͠ʹ࡞Β ΕΔͦͷΠϯελϯεͱมΘΒͳ͍ͷͰɺը໘Λ ࠶ੜ੒ͨ࣌͠ʹ΋ɺಉ͡΋ͷΛ࢖͏͜ͱ͕Ͱ͖ Δɻ

    ‎ Αͬͯɺը໘Λճసͨ࣌͠ͷॲཧͳͲΛؾΛͭ ͚ͯॻ͔ͳͯ͘΋Α͘ͳͬͨ 7JFX.PEFMͷ͍͢͝ͱ͜Ζ 7JFX.PEFM
  44. ©2019 Wantedly, Inc. 7JFX.PEFM4UPSF 7JFX.PEFM͕ը໘ճసΛ௒͑ͯอଘ͞Ε͍ͯΔ৔ॴ w ͜ͷ৔ॴʹɺ7JFX.PEFMͷΠϯελϯε͕อ࣋͞Ε͍ͯΔɻ w ը໘࠶ੜ੒࣌͸ɺ͔͜͜Β7JFX.PEFMΛऔΓग़͢͜ͱͰɺ
 ৐Γ੾͍ͬͯΔ

    7JFX.PEFMͷ͍͢͝ͱ͜Ζ ը໘ճసΛ৐Γ੾Δ
  45. ©2019 Wantedly, Inc. 7JFX.PEFM1SPWJEFS 7JFX.PEFMͷΠϯελϯεΛఏڙͯ͘͠ΕΔ΋ͷ w ͜ͷɺ7JFX.PEFM1SPWJEFSΛܦ༝ͯ͠ɺ7JFX.PEFMͷΠϯελ ϯεΛऔಘ͓ͯ͘͜͠ͱͰɺ7JFX.PEFM4UPSFʹࣗಈతʹऔಘ ͨ͠7JFX.PEFMͷΠϯελϯε͕อଘ͞Ε͍ͯΔɻ 7JFX.PEFMͷ͍͢͝ͱ͜Ζ

    ը໘ճసΛ৐Γ੾Δ
  46. ©2019 Wantedly, Inc. $PSPVUJOFT ը໘ؒͷ7JFX.PEFMͷڞ༗ 7JFX.PEFMͷ͍͍ͱ͜Ζ͸ଞʹ΋͋Δ w $PSPVUJOFTαϙʔτ w ҟͳΔը໘ͰͷಉҰ7JFX.PEFMΠϯελϯεͷڞ༗

    7JFX.PEFMͷ͍͍ͱ͜Ζ ͦͷଞ
  47. ©2019 Wantedly, Inc. Room Room Persistence Library

  48. ©2019 Wantedly, Inc. 42-JUFͷΦϒδΣΫτϚούʔ ػೳϞϦϞϦͷ03.ͱ͍͏ΑΓ͸ɺ42-JUFͷந৅ԽϨΠϠ w $PSPVUJOFTαϙʔτ w 3Y+BWBαϙʔτ w

    -JWF%BUBαϙʔτ w ΫΤϦͷ"OESPJE4UVEJPʹΑΔิ׬ w 7*&8 w '54 3PPN 3PPN1FSTJTUFODF-JCSBSZ
  49. ©2019 Wantedly, Inc. WorkManager

  50. ©2019 Wantedly, Inc. গ͠௕͍ॲཧ΍஗Ԇ͕Մೳͳ΋ͷΛ࣮ߦ͢Δͱ͖ Ϣʔβʹͱͬͯ͸ଈ࣌ੑ͕ͳͯ͘΋ྑ͍΋ͷ w ΞφϦςΟΫεΠϕϯτͷૹ৴ॲཧ w ఆظతͳಉظ Ϣʔεέʔε

    8PSL.BOBHFSΛศརʹ࢖͑Δέʔε
  51. ©2019 Wantedly, Inc. σόΠεͷঢ়ଶʁ εϚʔτϑΥϯ͸ෆ҆ఆͳঢ়ଶʹ͋Δ͜ͱ͕ଟ͍ w ωοτϫʔΫ͸ྑ޷͔ʁ w όοςϦʔ͸े෼͔ʁ w

    ॆిத͔ʁ w ୺຤͕ΞΠυϧ͔ʁ w ετϨʔδ͸े෼͔ʁ σόΠεͷঢ়ଶͰ࣮ߦ͢Δ͔Ͳ͏͔ΛܾΊΔ 8PSL.BOBHFS
  52. ©2019 Wantedly, Inc. $POTUSBJOUT#VJMEFS 8PSL.BOBHFSͷδϣϒͷىಈʹඞཁͳ੍໿Λઃ͚Δ w TFU3FRVJSFE/FUXPSL5ZQF w TFU3FRVJSFT#BUUFSZ/PU-PX w

    TFU3FRVJSFT$IBSHJOH w TFU3FRVJSFT%FWJDF*EMF w TFU3FRVJSFT4UPSBHF/PU-PX σόΠεͷঢ়ଶͰ࣮ߦ͢Δ͔Ͳ͏͔ΛܾΊΔ 8PSL.BOBHFS
  53. ©2019 Wantedly, Inc. Paging

  54. ©2019 Wantedly, Inc. 1BHFE-JTU ϖʔδωʔγϣϯʹඞཁͳ1BHFͷσʔλΛ࣋ͭ w ͜ͷ1BHFE-JTUΛ-JWF%BUBͰฦ͢Α͏ͳ࣮૷Λࣗ෼Ͱ͔͘ w ࠓ·ͰɺಠࣗʹΞΠςϜΧ΢ϯτΛͯ͠Լ·ͰߦͬͨΒʜͱ ߦͬͨ෩ʹॻ͍͍࣮ͯͨ૷Λڞ௨Խ͢Δ͜ͱ͕Ͱ͖Δ

    w ݱࡏ͸ओʹ3PPNͷσʔλ͔ΒͷಡΈࠐΈ͕ϝΠϯ w ωοτϫʔΫ͔ΒͷಡΈࠐΈΛαϙʔτ͸͍ͯ͠Δ͕ɺࠓޙ͞ Βʹ࢖͍΍͘͢ͳΓͦ͏ͳػೳ͕ఏڙ͞ΕΔݟࠐΈ͕͋Δ 1BHJOHͷओ໾ 1BHJOH
  55. ©2019 Wantedly, Inc. /BWJHBUJPO Πϝʔδ͸J04ͷ4FHVF w ը໘ભҠΛ(6*΍YNMͰఆٛ͠ɺͦΕΛίʔυ͔Βݺͼग़͢͜ͱ Ͱը໘ભҠΛߦ͏͜ͱ͕Ͱ͖Δ w όοΫελοΫͷ؅ཧͳͲ͕༰қʹͳΔ

    /BWJHBUJPO ୯७ͳը໘ભҠ͔Βෳࡶͳ΋ͷ·Ͱ
  56. ©2019 Wantedly, Inc. ศརʹ࢖͑ΔɺެࣜɺϞμϯ͞ "OESPJEΞϓϦ։ൃͷਏ͍ͱ͜ΖΛ৭ʑͳ໘Ͱαϙʔτͯ͘͠ΕΔ "OESPJE"SDIJUFDUVSF$PNQPOFOUT w 6*69ͷվળ w ߴ଎Ͱݎ࿚ͳΞϓϦ։ൃ

    w ෦෼ಋೖ͕Մೳ
  57. ©2019 Wantedly, Inc. طଘϓϩμΫτ΁ͷಋೖͱͦͷมԽ

  58. ©2019 Wantedly, Inc.  ઃܭʹมԽ͕ੜ·Εͨ  ϢʔβମݧʹมԽ͕ੜ·Εͨ طଘϓϩμΫτ΁ͷಋೖͱͦͷมԽ AAC=Android Architecture

    Components
  59. ©2019 Wantedly, Inc. 8BOUFEMZ1FPQMF ͍ΘΏΔ໊ࢗ؅ཧΞϓϦ ࣗ෼ͷϏδωεͷͭͳ͕ΓΛ؅ཧ w ໊ࢗΛຕҰؾʹόοͱಡΈࠐΜͰଈσʔλԽͨ͠Γ w ໊ࢗʹؔ࿈͢ΔχϡʔεΛݟ͚͖ͭͯͨΓ

    w 8BOUFEMZͷϓϩϑΟʔϧͷߋ৽͕ड͚औΕͨΓ w ΦϑϥΠϯঢ়ଶͰ΋࿈བྷઌͷ֬ೝΛ͢Δ͜ͱ͕Ͱ͖ͨΓ ͜͜Ͱ঺հ͢ΔϓϩμΫτ طଘϓϩμΫτ΁ͷಋೖͱͦͷมԽ
  60. ©2019 Wantedly, Inc. ౰ॳͷઃܭ ਆ"DUJWJUZਆ'SBHNFOU͕͍ͯɺڊେͳ.BOBHFSΫϥε͕͍ΔΈ͍ͨͳઃܭ w ͜Εࣗ਎͸ѱ͘ͳ͍ͱࢥ͍ͬͯΔ w ݶΒΕͨϦιʔεͷதͰϢʔβʹՁ஋Λಧ͚Δඞཁ͕͋ͬͨ w

    ݩʑͷ։ൃऀ͕ҰਓͰશͯ࡞Γ੾ͬͨͷͰɺҰਓ͕։ൃΛ͢Δ ʹ͋ͨͬͯ࠷଎ͷઃܭʹͳ͍ͬͯͨ w ڊେͳΫϥεͰ͸͋Δ͕ɺΠϯλʔϑΣΠεઃܭ͕͖ͪΜͱ͠ ͍ͯͨͨΊɺΫϥε੹຿͕ͬͪ͝Όʹͳ͍ͬͯΔՕॴ͸গͳ ͔ͬͨ 8BOUFEMZ1FPQMF طଘϓϩμΫτ΁ͷಋೖͱͦͷมԽ
  61. ©2019 Wantedly, Inc. ݱࡏͷઃܭ .77.Ͱɺ3FQPTJUPSZ 6TF$BTFͳͲ͕ଘࡏ͢Δܗ w େ͖ͳΫϥεͷ੹຿Λ΋͏গ͠ࡉ෼Խ w ڊେͳ6TF$BTFυϝΠϯϩδοΫͷմͷΑ͏ͳΫϥεΛ

    6TF$BTF΁ͱ੾Γग़͠ w 3FQPTJUPSZͷΑ͏ͳ΋ͷΛ3FQPTJUPSZΫϥε΁ͱҠ͠ସ͑ w େ͖ͳ"DUJWJUZ'SBHNFOU͔Β.77.Λϕʔεʹͨ͠ϨΠϠʔ υΞʔΩςΫνϟ΁ͷஈ֊తҠߦ 8BOUFEMZ1FPQMF طଘϓϩμΫτ΁ͷಋೖͱͦͷมԽ
  62. ©2019 Wantedly, Inc. 3FBMN3PPN ΑΓ࢖͍΍͘͢ɺςελϒϧͳ΋ͷΛ໨ࢦͯ͠ w 3FBMN w ૣ͍ɺ࢖͍΍͍͢ w

    εϨουपΓͷѻ͍͕೉͍͠ɺςετίετ͕ߴ͍ w 3PPN w ໰୊ʹͳΒͳ͍଎͞ɺ࢖͍΍͍͢ɺεϨουʹ΋ෆ҆఺ͳ͠
 ͯελϏϦςΟ΋ߴ͍ w ςʔϒϧͷఆ͕ٛ3FBMNʹൺ΂Δͱগ͠໘౗ 8BOUFEMZ1FPQMF ΠϯϑϥϨΠϠʔͷվળ
  63. ©2019 Wantedly, Inc. Ҡߦεςοϓ ·ͣ͸Ұ෦ͷςʔϒϧ͔Β w ΫϦςΟΧϧͳόάΛग़͠ʹ͍͘Օॴ͔Βஈ֊తʹ w αʔό͔Βͷઃఆ஋Λอଘ͢ΔΑ͏ͳςʔϒϧΛ·ͣ͸Ҡߦ w

    3FBMNͱ3PPNΛಉ͡΋ͷͱͯ͠ѻ͑ΔΑ͏ͳΠϯλʔϑΣ ΠεΛఆٛ w औಘઌΛεΠον͢Ε͹3FBMNͰ΋3PPNͰ΋౷Ұతʹѻ ͑Δ͜ͱΛ໨ࢦͨ͠ 8BOUFEMZ1FPQMF ΠϯϑϥϨΠϠʔͷվળ
  64. ©2019 Wantedly, Inc. ϏδωεϩδοΫͷ੾Γग़͠ 6TF$BTF૚Λ༻ҙ͠ɺࡉ͔ͳ୯ҐͰͷ੹຿෼ׂ w %BUB.BOBHFSΫϥε͔ΒϏδωεϩδοΫʹؔ͢ΔՕॴΛ੾ Γग़ͯ͘͠ w ͜ΕΒͷ੾Γग़ͨ͠ϩδοΫΛ7JFX.PEFMͰ࢖͏͜ͱΛ໨

    తͱͨ͠ w ը໘ʹ఺ࡏ͍ͯ͠ΔϏδωεϩδοΫ΋Ұ෦6TF$BTFʹ੾Γ ग़͠ɺ7JFX.PEFMͳͲ͔Β࢖͑Δঢ়ଶʹ w େ͖ͳը໘Λͳͦ͘͏ͱ͍͏ࢼΈ 8BOUFEMZ1FPQMF ϏδωεϩδοΫ
  65. ©2019 Wantedly, Inc. .71ͷಋೖ .77.Ͱ7JFX.PEFMͷಋೖͷલʹ.71Ͱ·ͣ͸ബ͘࡞Δͱ͜Ζ͔Β w ੾Γग़ͨ͠ɺϩδοΫΛ1SFTFOUFSͰ࢖༻Ͱ͖Δ w ςετ͕͠΍͍͢ w

    ςετ͕ॻ͖΍͍͢ w ίʔυΛॻ͘ྔ͕ѹ౗తʹ૿͑Δ w ඇੜ࢈త w .77.Ͱ-JWF%BUBΛ࢖ͬͯYNMʹ௚઀όΠϯυͨ͠ํ͕ྑ͍ͷ Ͱ͸ʁͱ͍͏൑அʹͳΔ 8BOUFEMZ1FPQMF 6*૚ͷվળ
  66. ©2019 Wantedly, Inc. .77.ͷಋೖ .71Ͱͷ൓লΛੜ͔͠ɺ.77.Λಋೖ w .71ʹൺ΂ͯॻ͘ྔ͕֨ஈʹݮͬͨ w YNMʹ௚઀తʹ-JWF%BUBΛ౉͢͜ͱͰɺࣗಈతʹϥΠϑαΠΫ ϧʹόΠϯυͯ͘͠ΕΔ

    w ஋Λ7JFX.PEFM͔Βྲྀ͠ࠐΊ͹ͦΕ͚ͩͰ6*͕ߋ৽͞ΕΔ w ը໘ؒͰͷ7JFX.PEFMͷڞ༗ w ڞ௨ͷϩδοΫΛ͍࣋ͪͨͱͳͬͨ࣌ʹɺͱͯ΋΍Γ΍͍͢ 8BOUFEMZ1FPQMF 6*૚ͷվળ
  67. ©2019 Wantedly, Inc. ·ͱΊ ςελϏϦςΟͷ޲্ͱɺੜ࢈ੑͷ޲্ w 3PPNͰΠϯϑϥ૚ͷςελϏϦςΟΛ޲্ͤͨ͞ w 7JFX.PEFMͷಋೖͰɺ6*ͷ࡞੒ʹ͔͔Δ࣌ؒΛେ෯ʹ࡟ݮͨ͠ w

    ಋೖ͸εςοϓόΠεςοϓͰՄೳ w ҰؾʹೖΕͳͯ͘΋ྑ͍ w ·ͣ͸Ͱ͖ͦ͏ͳͱ͜Ζ͔Βগͣͭ͠Ͱ0, 8BOUFEMZ1FPQMF ΞʔΩςΫνϟͷվળ
  68. ©2019 Wantedly, Inc. 8PSL.BOBHFSͷಋೖ ୺຤ͷ࿈བྷઌͱͷಉظɺ஗Ԇ࣮ߦՄೳ͔ͭϩϯάλεΫ w 8BOUFEMZ1FPQMF͸໊ࢗΛ؅ཧ͢ΔΞϓϦ w ͭ·Γ͸৭ʑͳ࿈བྷઌΛΞϓϦ಺ʹอ࣋͢Δඞཁ͕͋Δ w

    Ϣʔβʹͱͬͯ͸ΞϓϦ಺͚ͩͰ͸ͳ͘ɺࣗ෼ͷ୺຤ͷ࿈བྷઌ ʹಉظ͍ͨ͠ͱ͍͏έʔε΋ɻ w ͦ͏͍ͬͨ࣌ʹɺΞϓϦ಺ͷ࿈བྷઌ͔Β୺຤ͷ࿈བྷઌ΁ͷΤΫ εϙʔτ͸࿈བྷઌ݅਺ʹ΋ΑΔ͕ϩϯάλεΫʹͳΓ͕ͪ 8BOUFEMZ1FPQMF 69ͷվળ
  69. ©2019 Wantedly, Inc. ΩϟονΞοϓํ๏

  70. ©2019 Wantedly, Inc. "OESPJE%FWFMPQFST$PEFMBCT ·ͣ͸ެ͔ࣜΒ w IUUQTEFWFMPQFSBOESPJEDPNUPQJDMJCSBSJFTBSDIJUFDUVSF w ެࣜͷυΩϡϝϯτ͕ྑ͍ w

    ڵຯͷ༙͍ͨίϯϙʔωϯτ͕͋Ε͹$PEFMBCTΛ࢖ͬͯɺ
 Ұ௨Γͷجຊతͳ࢖͍ํ͸ֶͿ͜ͱ͕Ͱ͖Δ w IUUQTEFWFMPQFSBOESPJEDPNUPQJDMJCSBSJFTBSDIJUFDUVSFBEEJUJPOBMSFTPVSDFTIUNM w 4BNQMFɺ$PEFMBCT΍#MPH΁ͷϦϯΫू w ͜͜ʹॻ͍ͯ͋Δ͜ͱΛಡΉͱ΋ͬͱ৭ʑͳ5JQTΛݟΔ͜ͱ͕Ͱ͖Δ ৘ใͷΩϟονΞοϓ Ͳ͕͍͍͜ʁ
  71. ©2019 Wantedly, Inc. "OESPJE%BHBTIJ 5XJUUFS w IUUQTBOESPJEEBHBTIJHJUIVCJP w "OESPJEؔ࿈ͷ8FFLMZ/FXT ৘ใͷΩϟονΞοϓ

    Ͳ͕͍͍͜ʁ
  72. ©2019 Wantedly, Inc. "OESPJEք۾ͳ5XJUUFSϦετ 5XJUUFS w IUUQTUXJUUFSDPNTZBSJIVMJTUTBOESPJEJOGP w "OESPJEͷڧͦ͏ͳਓ͕ͨͪू·͍ͬͯΔϦετ͕ެ։͞Ε͍ͯΔ w

    ΋ͪΖΜ5XJUUFSͳͷͰΈͳ͞Μࣗ༝ʹͭͿ΍͍͍ͯ·͢ ৘ใͷΩϟονΞοϓ Ͳ͕͍͍͜ʁ
  73. ©2019 Wantedly, Inc. ·ͱΊ

  74. ©2019 Wantedly, Inc. ࠷ۙͷ"OESPJE։ൃ͸͍ͩͿΜਐԽͨ͠ ""$͸طଘΞϓϦͷઃܭମݧΛஈ֊తʹվળͰ͖Δ w গͣͭ͠ಋೖͰ͖Δ w ಋೖεςοϓͷΦεεϝ͸ɺΞϓϦ಺ͷ௿͍ϨΠϠʔ͔Β͕Φεεϝ w

    6*૚पΓ͸ࠓޙ΋มΘ͍ͬͯ͘ͱࢥ͍ͬͯΔ w J04ͳΒ4XJGU6* "OESPJEͳΒ+FUQBDL$PNQPTF w ΞϓϦ಺ͷσʔλपΓΛ͖ͪΜͱݻΊ͓ͯ͘ͷ͕େࣄ w ͦͷ఺ɺ3PPN͸ςελϏϦςΟ΋ߴ͘ɺ࠷ॳͷಋೖʹ͸Φεεϝ w ͨͩɺͦͷલʹݱࡏͷઃܭͱͷ݉Ͷ߹͍΋͋Δ͔Βͦ͜͸͏·͘΍ͬͯཉ͍͠ ·ͱΊ
  75. ©2019 Wantedly, Inc. 69ʹ΋د༩Ͱ͖Δ ϞόΠϧΞϓϦͳΒͰ͸ͷෆ҆ఆͳঢ়ଶΛߟྀͨ͠όοΫάϥ΢ϯυλεΫ༻ͷ8PSL.BOBHFS w ϞόΠϧΞϓϦͳΒͰ͸ͷෆ҆ఆͳঢ়ଶΛߟྀͨ͠όοΫάϥ΢ϯυλεΫ༻ͷ8PSL.BOBHFS w Ϣʔβ͕εϚʔτϑΥϯ͔Β཭Ε͍ͯΔλΠϛϯά΍ॆిதͳͲͷλΠϛϯάͰ
 σόΠεͷϦιʔεΛ࢖͏͜ͱ͕Ͱ͖Δ

    ‎ Ϣʔβʹ༩͑ΔετϨεΛܰݮͰ͖ΔݟࠐΈɻ ·ͱΊ
  76. ϖʔδλΠτϧ ϖʔδαϒλΠτϧ ©2019 Wantedly, Inc. ͋Γ͕ͱ͏͍͟͝·ͨ͠