Pro Yearly is on sale from $80 to $50! »

アプリをさらに成長させるための技術戦略 / Tech Strategy for Boosting App Growth

F9856cc7a15ed2cb9e6ebfab41fdf1cf?s=47 Shohei Kawano
February 07, 2019

アプリをさらに成長させるための技術戦略 / Tech Strategy for Boosting App Growth

アプリ開発に携わるエンジニアは、多かれ少なかれ担当アプリの成長のために仕事をしています。エンジニアリングやその他の方法をもちいてアプリを成長させたり、その成長をより加速させることは、アプリ開発を担当するエンジニアの大切な仕事です。

4−5人以上で開発するような大きいアプリケーション、かつ歴史が長く数年前からのコードも共存するようなアプリのメンテナンスにおいて、開発者の人数が増えた場合でも開発スピードを落とさず、さらにより多くのユーザーにアプリを利用してもらうための機能追加が容易にできるような内部構造にしておくことは、アプリを成長させるためにはもはや必要不可欠であるといえます。

このプレゼンテーションでは、アプリを成長させるために業務の中で行ったAndroid技術の選定やAndroidチーム内での取り組み(ペアプロ・モブプロ・お集まり会・もくもく木曜日)を含め、クオーターや半期目線で立てた技術戦略(テスタブル化・テストカバレッジ・Kotlin化率)について紹介し、どのようにアプリの成長や、開発スピードの向上につながったか(またはつながらなかったか)を成功事例・失敗事例を踏まえて振り返りました。振り返ったのち、今までやってきたことを踏まえ、今後アプリをさらに成長させるためにこれから行いたいことについて、紹介をしました。

-

* 「エンジニアがオーナーシップを持ってプロダクト改善に向き合う!マジマッチチャレンジという取り組みについて」
https://developers.cyberagent.co.jp/blog/archives/18812/

* 【タップル誕生】会員数が400万人を突破! マッチング数は国内最大規模の延べ1億2,000万組に
https://couplingunion.com/news/1033/

*
マッチングエージェント、オンライン恋活・婚活マッチングサービスの国内市場調査を実施 ~オンライン恋活・婚活マッチングサービス市場は2017年に208億円 アプリサービスが成長をけん引、2022年には577億円に拡大~
https://www.cyberagent.co.jp/news/detail/id=13691

* マッチングアプリの利用意向度は1年で約30ポイント増加
https://www.cyberagent.co.jp/news/detail/id=22647

* 趣味でつながる恋活サービス「タップル誕生」 恋活・婚活マッチングアプリの中で国内1位を獲得
https://couplingunion.com/news/1162/

* 株式会社マッチングエージェント | MatchingAgent, Inc.
https://www.matchingagent.co.jp/

F9856cc7a15ed2cb9e6ebfab41fdf1cf?s=128

Shohei Kawano

February 07, 2019
Tweet

Transcript

  1. ΞϓϦΛ͞Βʹ੒௕
 ͤ͞ΔͨΊͷٕज़ઓུ Shohei Kawano @shaunkawano

  2. Shohei Kawano
 @shaunkawano
 
 MatchingAgent, Inc.
 (CyberAgent, Inc.)
 Android Developer

    ࣗݾ঺հ
  3. ɾٕज़ઓུ·ͰͷྲྀΕ ɹɾ͜Ε·Ͱͷʮλοϓϧ஀ੜʯͷ੒௕ ɹɾAndroidΞϓϦͷมભ ɾAndroidٕज़ઓུ ɾৼΓฦΓͱ͜Ε͔Β ໨࣍

  4. ٕज़ઓུ·ͰͷྲྀΕ

  5. ͜Ε·Ͱͷ ʮλοϓϧ஀ੜʯͷ੒௕ ٕज़ઓུ·ͰͷྲྀΕ

  6. ͜Ε·Ͱͷʮλοϓϧ஀ੜʯͷ੒௕ w೥ɹɹɹɹɹɹɹઃཱ w೥J04ɾ"OESPJE൛ʮλοϓϧ஀ੜʯ
  ٕज़ઓུ·ͰͷྲྀΕ

  7. https://www.cyberagent.co.jp/news/detail/id=22365 ٕज़ઓུ·ͰͷྲྀΕʮλοϓϧ஀ੜʯͷ੒௕

  8. https://www.cyberagent.co.jp/news/detail/id=21321 ٕज़ઓུ·ͰͷྲྀΕʮλοϓϧ஀ੜʯͷ੒௕

  9. https://www.cyberagent.co.jp/news/detail/id=22647 ٕज़ઓུ·ͰͷྲྀΕʮλοϓϧ஀ੜʯͷ੒௕

  10. ٕज़ઓུ·ͰͷྲྀΕʮλοϓϧ஀ੜʯͷ੒௕

  11. ઈࢍ੒௕தʂ ٕज़ઓུ·ͰͷྲྀΕʮλοϓϧ஀ੜʯͷ੒௕

  12. ٕज़ઓུ·ͰͷྲྀΕ "OESPJEΞϓϦͷมભ

  13. None
  14. ٕज़ઓུ·ͰͷྲྀΕ"OESPJEΞϓϦͷมભ wϦϦʔεd wd wd wd wd wdݱࡏ

  15. ٕज़ઓུ·ͰͷྲྀΕ"OESPJEΞϓϦͷมભ wϦϦʔεd wd wd wd wd wdݱࡏ ্ཱͪ͛ϑΣʔζ ্ཱͪ͛ˠٸ੒௕ϑΣʔζ վળϑΣʔζ

    ελϯμʔυԽϑΣʔζ
  16. ϦϦʔεd ٕज़ઓུ·ͰͷྲྀΕ"OESPJEΞϓϦͷมભ

  17. ϦϦʔεd w্ཱͪ͛ϑΣʔζ wػೳ௥Ճ wෆ۩߹मਖ਼ wಋೖɿ+BWB "OESPJE"OOPUBUJPOT ٕज़ઓུ·ͰͷྲྀΕ"OESPJEΞϓϦͷมભ

  18. d ٕज़ઓུ·ͰͷྲྀΕ"OESPJEΞϓϦͷมભ

  19. d w্ཱͪ͛ˠٸ੒௕ϑΣʔζ wϞμϯͳϥΠϒϥϦͷಋೖɾஔ͖׵͑ wωοτϫʔΫ·ΘΓͷϥΠϒϥϦͷ࡮৽ wಋೖɿ0L)UUQ 3FUSPpU #VUUFS,OJGFͳͲ ٕज़ઓུ·ͰͷྲྀΕ"OESPJEΞϓϦͷมભ

  20. d ٕज़ઓུ·ͰͷྲྀΕ"OESPJEΞϓϦͷมભ

  21. d wվળϑΣʔζ wΞϓϦͷঢ়ଶ؅ཧͷදݱํ๏ͷ໛ࡧ w%JBMPHදࣔपΓͷϩδοΫͷվम wϝοηʔδͱ͍ͬͨओཁը໘ͷվम ٕज़ઓུ·ͰͷྲྀΕ"OESPJEΞϓϦͷมભ

  22. d ٕज़ઓུ·ͰͷྲྀΕ"OESPJEΞϓϦͷมભ

  23. d wελϯμʔυԽϑΣʔζ w$MFBO"SDIJUFDUVSFΛҙࣝͨ͠.77. wμΠΞϩάදࣔपΓͷϩδοΫΛҰՕॴʹ· ͱΊΔ wಋೖ,PUMJO %BHHFS %BUB#JOEJOH ٕज़ઓུ·ͰͷྲྀΕ"OESPJEΞϓϦͷมભ

  24.  ٕज़ઓུ·ͰͷྲྀΕ

  25. ʮٕज़ΛތΕΔʯ૊৫΁ ٕज़ઓུ·ͰͷྲྀΕ

  26. ٕज़ΛތΕΔ૊৫ͱ͸ wཧ૝ͷνʔϜͬͯͲΜͳνʔϜʁ wͲΜͳٕज़Λ࢖͍͍ͬͯͨʁ wٕज़ΛތΕΔνʔϜͬͯͲΜͳνʔϜʁ ٕज़ઓུ·ͰͷྲྀΕ

  27. ٕज़ઓུ·ͰͷྲྀΕ

  28. ٕज़ઓུ·ͰͷྲྀΕ

  29. ݱ࣮͔Βཧ૝·Ͱͷ
 ΪϟοϓΛઓུతʹຒΊΔ ٕज़ઓུ·ͰͷྲྀΕ

  30. ݱ࣮͔Βཧ૝·Ͱͷ
 ΪϟοϓΛઓུతʹຒΊΔ ઈࢍ੒௕தͷΞϓϦΛ͞Β ʹ੒௕ͤ͞ΔͨΊͷઓུ ٕज़ઓུ·ͰͷྲྀΕ

  31. ٕज़ઓུʹ͍ͭͯ

  32. wϦϦʔεd wd wd wd wd wdݱࡏ ্ཱͪ͛ϑΣʔζ ্ཱͪ͛ˠٸ੒௕ϑΣʔζ վળϑΣʔζ ελϯμʔυԽϑΣʔζ

    ٕज़ઓུʹ͍ͭͯ
  33. wϦϦʔεd wd wd wd wd wdݱࡏ ্ཱͪ͛ϑΣʔζ ্ཱͪ͛ˠٸ੒௕ϑΣʔζ վળϑΣʔζ ελϯμʔυԽϑΣʔζ

    ٕज़ઓུͷࡦఆɾਪਐ ٕज़ઓུʹ͍ͭͯ
  34. wϦϦʔεd wd wd wd wd wdݱࡏ ্ཱͪ͛ϑΣʔζ ্ཱͪ͛ˠٸ੒௕ϑΣʔζ վળϑΣʔζ ελϯμʔυԽϑΣʔζ

    ٕज़ઓུʹ͍ͭͯ ٕज़ઓུͷࡦఆɾਪਐ
  35. d ٕज़ઓུʹ͍ͭͯ

  36. d ωΠςΟϒٕज़ઓུͷࡦఆͱ࣮ߦ ʰϢʔβʔମݧʹίϛοτ
 Ͱ͖Δ؀ڥߏஙʱ ٕज़ઓུʹ͍ͭͯ

  37. ʰϢʔβʔମݧʹίϛοτͰ͖Δ؀ڥߏஙʱ w࢓༷ܾΊ͔ΒϦϦʔε·Ͱͷ࣌ؒΛ୹ॖ wΤϯδχΞͷ਺͕૿͑ͯ΋εϐʔυ͕མͪͳ͍ Α͏ʹ ٕज़ઓུʹ͍ͭͯd

  38. wϦϦʔεd wd wd wd wd wdݱࡏ ্ཱͪ͛ϑΣʔζ ্ཱͪ͛ˠٸ੒௕ϑΣʔζ վળϑΣʔζ ελϯμʔυԽϑΣʔζ

    ٕज़ઓུʹ͍ͭͯ ٕज़ઓུͷࡦఆɾਪਐ
  39. wϦϦʔεd wd wd wd wd wdݱࡏ ্ཱͪ͛ϑΣʔζ ্ཱͪ͛ˠٸ੒௕ϑΣʔζ վળϑΣʔζ ελϯμʔυԽϑΣʔζ

    ٕज़ઓུʹ͍ͭͯ ٕज़ઓུͷࡦఆɾਪਐ
  40. dݱࡏ ٕज़ઓུʹ͍ͭͯ

  41. ωΠςΟϒٕज़ઓུΛվΊɺ ʰސ٬Ձ஋Λ࠷଎Ͱࢢ৔ʹ౤Լ͢Δʱ ٕज़ઓུʹ͍ͭͯ dݱࡏ

  42. ωΠςΟϒٕज़ઓུΛվΊɺ ʰސ٬Ձ஋Λ࠷଎Ͱࢢ৔ʹ౤Լ͢Δʱ ٕज़ઓུʹ͍ͭͯ dݱࡏ

  43. None
  44. #

  45. None
  46. None
  47. "OESPJEٕज़ઓུ

  48. w'MVYԽ wςελϒϧԽ wςετΧόϨοδ޲্ w,PUMJOԽ "OESPJEٕज़ઓུ ٕज़ઓུʹ͍ͭͯd

  49. w'MVYԽ wςελϒϧԽ wςετΧόϨοδ޲্ w,PUMJOԽ "OESPJEٕज़ઓུ ٕज़ઓུʹ͍ͭͯd

  50. d wελϯμʔυԽϑΣʔζ w$MFBO"SDIJUFDUVSFΛҙࣝͨ͠.77. wμΠΞϩάදࣔपΓͷϩδοΫΛҰՕॴʹ· ͱΊΔ wಋೖ,PUMJO %BHHFS %BUB#JOEJOH ٕज़ઓུʹ͍ͭͯd"OESPJEٕज़ઓུ'MVYԽ

  51. d wελϯμʔυԽϑΣʔζ w$MFBO"SDIJUFDUVSFΛҙࣝͨ͠.77. wμΠΞϩάදࣔपΓͷϩδοΫΛҰՕॴʹ· ͱΊΔ wಋೖ,PUMJO %BHHFS %BUB#JOEJOH ٕज़ઓུʹ͍ͭͯd"OESPJEٕज़ઓུ'MVYԽ

  52. ͳͥ.77.͔Β'MVY ٕज़ઓུʹ͍ͭͯd"OESPJEٕज़ઓུ'MVYԽ

  53. .77.ʹ͍ͭͯ ٕज़ઓུʹ͍ͭͯd"OESPJEٕज़ઓུ'MVYԽ

  54. .77. Repository View Remote Data Source Local Data Source ViewModel

    ٕज़ઓུʹ͍ͭͯd"OESPJEٕज़ઓུ'MVYԽ
  55. .77. Repository View Remote Data Source Local Data Source ViewModel

    w6*͔ΒϩδοΫΛҠߦͰ͖Δ w""$7JFX.PEFMˠը໘ճస࣌ͷσʔλ อ͕࣋༰қʹ wॻ͖ํΛύλʔϯԽ͠΍͍͢ ☀ ٕज़ઓུʹ͍ͭͯd"OESPJEٕज़ઓུ'MVYԽ
  56. .77. Repository View Remote Data Source Local Data Source ViewModel

    w7JFX.PEFMΫϥε͕ංେԽ͕ͪ͠ wը໘ؒͷσʔλͷड͚౉͠ɾ఻ൖΛ͍ͨ͠ w%3:ͳίʔυΛ૿΍͍ͨ͠ ☁ ٕज़ઓུʹ͍ͭͯd"OESPJEٕज़ઓུ'MVYԽ
  57. 'MVYʹ͍ͭͯ ٕज़ઓུʹ͍ͭͯd"OESPJEٕज़ઓུ'MVYԽ

  58. Action View Dispatcher Store Action Creator 'MVY ٕज़ઓུʹ͍ͭͯd"OESPJEٕज़ઓུ'MVYԽ

  59. Action View Dispatcher Store Action Creator 'MVY wσʔλͷྲྀΕΛ୯Ұํ޲ʹͰ͖Δ wςετ͕ॻ͖΍͍͢ wσόοά͕͠΍͍͢

    w࠶ར༻ੑ͕ߴ͍ ☀ ٕज़ઓུʹ͍ͭͯd"OESPJEٕज़ઓུ'MVYԽ
  60. .77. View ViewModel ٕज़ઓུʹ͍ͭͯd"OESPJEٕज़ઓུ'MVYԽ

  61. .77. View ٕज़ઓུʹ͍ͭͯd"OESPJEٕज़ઓུ'MVYԽ Store Action Creator ঢ়ଶ؅ཧ ৽σʔλऔಘ

  62. Action View Dispatcher Store Action Creator 'MVY ٕज़ઓུʹ͍ͭͯd"OESPJEٕज़ઓུ'MVYԽ

  63. w'MVYԽ wςελϒϧԽ wςετΧόϨοδ޲্ w,PUMJOԽ "OESPJEٕज़ઓུ ٕज़ઓུʹ͍ͭͯd

  64. w'MVYԽ wςελϒϧԽ wςετΧόϨοδ޲্ w,PUMJOԽ "OESPJEٕज़ઓུ ٕज़ઓུʹ͍ͭͯd

  65. ςελϒϧԽʹ͍ͭͯ ٕज़ઓུʹ͍ͭͯd"OESPJEٕज़ઓུςελϒϧԽ

  66. ςετ͠ʹ͍͘ίʔυΛ
 ςετ͠΍͍͢ܗʹ ٕज़ઓུʹ͍ͭͯd"OESPJEٕज़ઓུςελϒϧԽ

  67. ٕज़ઓུʹ͍ͭͯd"OESPJEٕज़ઓུςελϒϧԽ class SomeClass( ) { fun doSomeAction() { RestApi.getInstance() .getSomethingFromNetwork()

    .subscribeBy( onComplete = { thenDoThisAction() }, onError = { onError() } ) } }
  68. ٕज़ઓུʹ͍ͭͯd"OESPJEٕज़ઓུςελϒϧԽ class SomeClass( ) { fun doSomeAction() { RestApi.getInstance() .getSomethingFromNetwork()

    .subscribeBy( onComplete = { thenDoThisAction() }, onError = { onError() } ) } } ςετ͍ͨؔ͠਺
  69. ٕज़ઓུʹ͍ͭͯd"OESPJEٕज़ઓུςελϒϧԽ class SomeClass( ) { fun doSomeAction() { RestApi.getInstance() .getSomethingFromNetwork()

    .subscribeBy( onComplete = { thenDoThisAction() }, onError = { onError() } ) } } ΠϯελϯεΛϞοΫ͢Δ͜ͱ͕Ͱ͖ͳ͍☁
  70. ٕज़ઓུʹ͍ͭͯd"OESPJEٕज़ઓུςελϒϧԽ class SomeClass( ) { fun doSomeAction() { RestApi.getInstance() .getSomethingFromNetwork()

    .subscribeBy( onComplete = { thenDoThisAction() }, onError = { onError() } ) } }
  71. class SomeClass( private val api: RestApi ) { fun doSomeAction()

    { api .getSomethingFromNetwork() .subscribeBy( onComplete = { thenDoThisAction() }, onError = { onError() } ) } } ٕज़ઓུʹ͍ͭͯd"OESPJEٕज़ઓུςελϒϧԽ
  72. w'MVYԽ wςελϒϧԽ wςετΧόϨοδ޲্ w,PUMJOԽ "OESPJEٕज़ઓུ ٕज़ઓུʹ͍ͭͯd

  73. w'MVYԽ wςελϒϧԽ wςετΧόϨοδ޲্ w,PUMJOԽ "OESPJEٕज़ઓུ ٕज़ઓུʹ͍ͭͯd

  74. wΤϯδχΞ໨ઢͷ࢓༷ॻ w૝ఆ͍ͯ͠ͳ͔ͬͨڍಈͷ࡯஌ w2"ϑΣʔζ୹ॖ ςετΧόϨοδ޲্ ٕज़ઓུʹ͍ͭͯd

  75. None
  76. w'MVYԽ wςελϒϧԽ wςετΧόϨοδ޲্ w,PUMJOԽ "OESPJEٕज़ઓུ ٕज़ઓུʹ͍ͭͯd

  77. w'MVYԽ wςελϒϧԽ wςετΧόϨοδ޲্ w,PUMJOԽ "OESPJEٕज़ઓུ ٕज़ઓུʹ͍ͭͯd

  78. ,PUMJOԽ ٕज़ઓུʹ͍ͭͯd

  79. ,PUMJOԽ ٕज़ઓུʹ͍ͭͯd

  80. wϦϦʔεd wd wd wd wd wdݱࡏ ্ཱͪ͛ϑΣʔζ ্ཱͪ͛ˠٸ੒௕ϑΣʔζ վળϑΣʔζ ελϯμʔυԽϑΣʔζ

    ٕज़ઓུʹ͍ͭͯ ٕज़ઓུͷࡦఆɾਪਐ
  81. wϦϦʔεd wd wd wd wd wdݱࡏ ্ཱͪ͛ϑΣʔζ ্ཱͪ͛ˠٸ੒௕ϑΣʔζ վળϑΣʔζ ελϯμʔυԽϑΣʔζ

    ٕज़ઓུʹ͍ͭͯ ٕज़ઓུͷࡦఆɾਪਐ
  82. "OESPJEٕज़ઓུ w'MVYԽ wςετΧόϨοδ޲্ wϚϧνϞδϡʔϧԽ ٕज़ઓུʹ͍ͭͯdݱࡏ

  83. "OESPJEٕज़ઓུ w'MVYԽ wςετΧόϨοδ޲্ wϚϧνϞδϡʔϧԽ ٕज़ઓུʹ͍ͭͯdݱࡏ

  84. ϚϧνϞδϡʔϧԽ app ٕज़ઓུʹ͍ͭͯdݱࡏ"OESPJEٕज़ઓུϚϧνϞδϡʔϧԽ

  85. feature:contact app feature:dating feature:setting … … ϚϧνϞδϡʔϧԽ ٕज़ઓུʹ͍ͭͯdݱࡏ"OESPJEٕज़ઓུϚϧνϞδϡʔϧԽ

  86. ϚϧνϞδϡʔϧԽ feature:contact app feature:dating feature:setting … … wࠩ෼Ϗϧυ͕ૣ͘ͳΔ winternal modifierʹΑΔείʔϓͷ࠷

    খԽ wػೳ։ൃΛΑΓ҆શʹ ☀ ٕज़ઓུʹ͍ͭͯdݱࡏ"OESPJEٕज़ઓུϚϧνϞδϡʔϧԽ
  87. ϚϧνϞδϡʔϧԽ feature:contact app feature:dating feature:setting … … wࠩ෼Ϗϧυ͕ૣ͘ͳΔ winternal modifierʹΑΔείʔϓͷ࠷

    খԽ wػೳ։ൃΛΑΓ҆શʹ ☀ ٕज़ઓུʹ͍ͭͯdݱࡏ"OESPJEٕज़ઓུϚϧνϞδϡʔϧԽ
  88. ػೳ։ൃΛΑΓ҆શʹ ٕज़ઓུʹ͍ͭͯdݱࡏ"OESPJEٕज़ઓུϚϧνϞδϡʔϧԽ

  89. app ٕज़ઓུʹ͍ͭͯdݱࡏ"OESPJEٕज़ઓུϚϧνϞδϡʔϧԽ ػೳ։ൃΛΑΓ҆શʹ

  90. app debugging debugImplementation ٕज़ઓུʹ͍ͭͯdݱࡏ"OESPJEٕज़ઓུϚϧνϞδϡʔϧԽ ػೳ։ൃΛΑΓ҆શʹ

  91. app debugging feature:future- feature debugImplementation implementation ٕज़ઓུʹ͍ͭͯdݱࡏ"OESPJEٕज़ઓུϚϧνϞδϡʔϧԽ ػೳ։ൃΛΑΓ҆શʹ

  92. app feature:future- feature implementation ٕज़ઓུʹ͍ͭͯdݱࡏ"OESPJEٕज़ઓུϚϧνϞδϡʔϧԽ ػೳ։ൃΛΑΓ҆શʹ

  93. "OESPJEٕज़ઓུ w'MVYԽ wςελϒϧԽ wςετΧόϨοδ޲্ wϚϧνϞδϡʔϧԽ w,PUMJOԽ ٕज़ઓུʹ͍ͭͯdݱࡏ

  94. ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Β

  95. ٕज़ઓུશମͷৼΓฦΓ ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Β

  96. wΤϯδχΞશһͰͷ໨ඪ wΤϯδχΞ͔Βͷ՝୊ײΛνʔϜશମ΁ڞ༗ wݩʑվળʹ཰ઌతͳϝϯόʔʹޫΛ͋ͯΔ ☀ ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Βٕज़ઓུશମͷৼΓฦΓ

  97. wࢦඪͱͯ͠௥͏,1*͕ଟ͗ͨ͢ wߴ͗͢Δ໨ඪΛܝ͍͛ͯͨ wਐḿͷՄࢹԽ͕Ͱ͖͍ͯͳ͔ͬͨ ☁ ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Βٕज़ઓུશମͷৼΓฦΓ

  98. wࢦඪͱͯ͠௥͏,1*͕ଟ͗ͨ͢ wߴ͗͢Δ໨ඪΛܝ͍͛ͯͨ wਐḿͷՄࢹԽ͕Ͱ͖͍ͯͳ͔ͬͨ ☁ ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Βٕज़ઓུશମͷৼΓฦΓ

  99. 'ॏཁ,1*ͱ஫ྗϙΠϯτº

  100. 'ॏཁ,1*ͱ஫ྗϙΠϯτº

  101. wࢦඪͱͯ͠௥͏,1*͕ଟ͗ͨ͢ wߴ͗͢Δ໨ඪΛܝ͍͛ͯͨ wਐḿͷՄࢹԽ͕Ͱ͖͍ͯͳ͔ͬͨ ☁ ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Βٕज़ઓུશମͷৼΓฦΓ

  102. wࢦඪͱͯ͠௥͏,1*͕ଟ͗ͨ͢ wߴ͗͢Δ໨ඪΛܝ͍͛ͯͨ wਐḿͷՄࢹԽ͕Ͱ͖͍ͯͳ͔ͬͨ ☁ ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Βٕज़ઓུશମͷৼΓฦΓ

  103. None
  104. w༏ઌ౓ߴλεΫº w'MVYԽ཰ΛഒʹɺςετΧόϨοδΛഒʹ w͞Βʹ͸ތΕΔ%9վળ΋΍Γ·͠ΐ͏ʂ '௨ৗͷࢪࡦͷ࣮૷ʹϓϥεͰɺ

  105. w'$.ରԠͱ͍ͬͨ༏ઌ౓ߴλεΫº w'MVYԽ཰ΛഒʹɺςετΧόϨοδΛഒʹ w͞Βʹ͸ތΕΔ%9վળ΋΍Γ·͠ΐ͏ʂ '௨ৗͷࢪࡦͷ࣮૷ʹϓϥεͰɺ

  106. վળத ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Βٕज़ઓུશମͷৼΓฦΓ

  107. վળத w໨తΛ໌֬ʹهड़͓ͯ͘͠ w਺ΛߜΔ wPSͰ͸ͳ͘ɺෳ਺ஈ֊ͷ໨ඪΛ ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Βٕज़ઓུશମͷৼΓฦΓ

  108. None
  109. wߴ͗͢Δ໨ඪΛܝ͍͛ͯͨ wࢦඪͱͯ͠௥͏,1*͕ଟ͗ͨ͢ wਐḿͷՄࢹԽ͕Ͱ͖͍ͯͳ͔ͬͨ ☁ ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Βٕज़ઓུશମͷৼΓฦΓ

  110. wͲΕ͘Β͍ਐΜͰ͍Δͷ͔Θ͔Βͳ͍ wʮਐḿ͍ͯ͠Δؾ͕͠ͳ͍ʜʯ wʮؾ߹ʯυϦϒϯʹͳΓ͕ͪ ☁ ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Βٕज़ઓུશମͷৼΓฦΓ

  111. ٕज़ઓུͷεϐʔυΛՄࢹԽ ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Βٕज़ઓུશମͷৼΓฦΓ

  112. w'MVY wςετΧόϨοδ w,PUMJO wϞδϡʔϧ਺ ܭଌͱՄࢹԽ ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Βٕज़ઓུશମͷৼΓฦΓ

  113. w'MVY wςετΧόϨοδ w,PUMJO wϞδϡʔϧ਺ ܭଌͱՄࢹԽ ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Βٕज़ઓུશମͷৼΓฦΓ

  114. 'MVY ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Βٕज़ઓུશମͷৼΓฦΓܭଌͱՄࢹԽ

  115. Action View Dispatcher Store Action Creator wઃܭಠࣗͷཁૉ͕গͳ͍ wσʔλͷྲྀΕΛ୯Ұํ޲ʹͰ͖Δ wςετ͕ॻ͖΍͍͢ wσόοά͕͠΍͍͢

    w࠶ར༻ੑ͕ߴ͍ ☀ ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Β'MVYԽ
  116. w·ͩʮओྲྀʯͳΞʔΩςΫνϟͰ͸ͳ͍ʁ w੍໿͕গͳ͍෼ɺͦͷଞͷ࣮૷खஈ͸ݸਓґଘ wྫ "DUJPO$SFBUPSPS4UPSFͲͪΒʹॲཧ Λॻ͘  wϖΞϓϩɾϞϒϓϩ ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Β'MVYԽ ☁

  117. wʮओྲྀʯͳΞʔΩςΫνϟͰ͸ͳ͍ʁ w੍໿͕গͳ͍෼ɺͦͷଞͷ࣮૷खஈ͸ݸ ਓґଘ wྫ "DUJPO$SFBUPSPS4UPSFͲͪΒʹ ॲཧΛॻ͘  ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Β'MVYԽ wυΩϡϝϯτԽ w͓ू·Γձ౳Ͱٞ࿦

  118. wʮओྲྀʯͳΞʔΩςΫνϟͰ͸ͳ͍ʁ w੍໿͕গͳ͍෼ɺͦͷଞͷ࣮૷खஈ͸ݸ ਓґଘ wྫ "DUJPO$SFBUPSPS4UPSFͲͪΒʹ ॲཧΛॻ͘  ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Β'MVYԽ wυΩϡϝϯτԽ w͓ू·Γձ౳Ͱٞ࿦

  119. None
  120. wʮओྲྀʯͳΞʔΩςΫνϟͰ͸ͳ͍ʁ w੍໿͕গͳ͍෼ɺͦͷଞͷ࣮૷खஈ͸ݸ ਓґଘ wྫ "DUJPO$SFBUPSPS4UPSFͲͪΒʹ ॲཧΛॻ͘  ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Β'MVYԽ wυΩϡϝϯτԽ w͓ू·Γձ౳Ͱٞ࿦

  121. wʮओྲྀʯͳΞʔΩςΫνϟͰ͸ͳ͍ʁ w੍໿͕গͳ͍෼ɺͦͷଞͷ࣮૷खஈ͸ݸ ਓґଘ wྫ "DUJPO$SFBUPSPS4UPSFͲͪΒʹ ॲཧΛॻ͘  ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Β'MVYԽ wυΩϡϝϯτԽ w͓ू·Γձ౳Ͱٞ࿦

  122. None
  123. None
  124. None
  125. w'MVY wςετΧόϨοδ w,PUMJO wϞδϡʔϧ਺ ܭଌͱՄࢹԽ ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Βٕज़ઓུશମͷৼΓฦΓ

  126. w'MVY wςετΧόϨοδ w,PUMJO wϞδϡʔϧ਺ ܭଌͱՄࢹԽ ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Βٕज़ઓུશମͷৼΓฦΓ

  127. 5FTU$PWFSBHF

  128. w'MVY wςετΧόϨοδ w,PUMJO wϞδϡʔϧ਺ ܭଌͱՄࢹԽ ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Βٕज़ઓུશମͷৼΓฦΓ

  129. w'MVY wςετΧόϨοδ w,PUMJO wϞδϡʔϧ਺ ܭଌͱՄࢹԽ ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Βٕज़ઓུશମͷৼΓฦΓ

  130. ,PUMJO

  131. w'MVY wςετΧόϨοδ w,PUMJO wϞδϡʔϧ਺ ܭଌͱՄࢹԽ ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Βٕज़ઓུશମͷৼΓฦΓ

  132. w'MVY wςετΧόϨοδ w,PUMJO wϞδϡʔϧ਺ ܭଌͱՄࢹԽ ٕज़ઓུͷৼΓฦΓͱ͜Ε͔Βٕज़ઓུશମͷৼΓฦΓ

  133. .PEVMFT

  134. lͱΓ͋͑ͣϨΠϠʔΛ੾ͬͯΈΔz ☁

  135. None
  136. app

  137. tapple-resource app tapple-data tapple-base

  138. tapple-resource app tapple-data feature:?? tapple-base

  139. wʮͱΓ͋͑ͣͭϞδϡʔϧԽͯ͠ΈΔʂʯ wGFBUVSFϞδϡʔϧΛ࡞ΔͨΊʹղܾ͢΂͖ґଘ ؔ܎ͳͲʹ໨͕͍ͬͯͳ͔ͬͨ ☁

  140. wʮͱΓ͋͑ͣͭϞδϡʔϧԽͯ͠ΈΔʂʯ wGFBUVSFϞδϡʔϧΛ࡞ΔͨΊʹղܾ͢΂͖ґଘ ؔ܎ͳͲʹ໨͕͍ͬͯͳ͔ͬͨ ☁ ʮ͜ͷػೳΛGFBUVSFʹ
 ੾Γग़͢ʹ͸Ͳ͏ͨ͠ΒΑ͍͔ʁʯ

  141. None
  142. wʮͱΓ͋͑ͣͭϞδϡʔϧԽͯ͠ΈΔʂʯ w·ͣϨΠϠʔ͝ͱʹ੾ͬͯͦͷ͋ͱͲͷGFBUVSF Λ੾Δ͔ผ్ߟ͑Α͏ͱ͍ͯͨ͠ ʮ͜ͷػೳΛGFBUVSFʹ
 ੾Γग़͢ʹ͸Ͳ͏ͨ͠ΒΑ͍͔ʁʯ ΍Δ͜ͱ͸ҰॹͰ΋ɺ
 ϚΠϧετʔϯ͕ܾ·Δͱਐḿ͠΍͍͢

  143. ͱ͸͍͑ɺࢪࡦ࣮૷ͷεϐʔ υΛམͱͣ͞ʹ಺෦վળΛ ͠ଓ͚ͯ΋ɺ؇΍͔ͳ੒௕ ͔Β͸ൈ͚ग़ͤͳ͍ʢ͔΋ʣ

  144. ٕज़ઓུΛਪਐ͢Δ࢓૊Έ࡞Γ

  145. None
  146. None
  147. w'MVYԽ wϞδϡʔϧԽͷͨΊͷ݁߹ղফ w৽Ϟδϡʔϧ࡞੒ɺͳͲͳͲ wීஈɺ΍Γ͍ͨͱࢥ͍ͬͯͨ͜ͱ΋΋ͪΖΜ0, w FH4XBHHFS"1*%PDɺ1BHFS%VUZಋೖɺͳͲ ☀

  148. wΈΜͳͰ΍Δ͜ͱͰ͍͖ͬʹ͢͢Μͩ wٕज़ઓུͷਪਐʹΑΔվળͰࢪࡦ͕ૣ͘ਐΜͩͱ͍ ͏࿩΋ ☀

  149. ͱ͸͍͑ɺʮ಺෦վળʯͩ ͚ʹनΘΕ͍ͯͯ΋࢓ํ͕ͳ ͍

  150. ΤϯδχΞ͔Βࣗൃతʹ ϢʔβʔϝϦοτΛߟ͑ɺ ࣮૷͢Δػձ

  151. None
  152. ࣗ෼ͨͪͰɺϢʔβʔͷͨΊʹ ͳΔ΋ͷΛߟ͑ͯ࡞Δʂ

  153. ·ͱΊ ͜Ε͔Β

  154. wཧ૝ͱݱ࣮ͷΪϟοϓͷೝࣝΛ߹ΘͤΔ w΍Γ͸͡ΊͨΒܭଌΛ͢Δ wখ͘͞͸͡ΊΔɻ੎͍ʹ೚ͤͳ͍ wখ͞ͳ੒ޭ͔ΒɺνʔϜͰتͿ ·ͱΊ͜Ε͔Β

  155. wࢼߦࡨޡʹऴΘΓ͸ͳ͍ wΑΓྑ͍ܧଓతͳ಺෦վળ΍ٕज़౤ࢿͷ࢓૊Έ w"OESPJEͷ࿮Λ௒͑ͨઓུ
 ɹFH#'' ·ͱΊ͜Ε͔Β

  156. None
  157. ΞϓϦΛ͞Βʹ੒௕
 ͤ͞ΔͨΊͷٕज़ઓུ Shohei Kawano @shaunkawano