Upgrade to Pro — share decks privately, control downloads, hide ads and more …

サーバーサイドKotlinのすすめ(仮)

noripi
June 14, 2017

 サーバーサイドKotlinのすすめ(仮)

2017.06.14 【トクバイ×Retty×Gunosy】ビール片手にKotlinを語る会 で使用したスライドです。

noripi

June 14, 2017
Tweet

More Decks by noripi

Other Decks in Technology

Transcript

  1. αʔόαΠυ,PUMJOͷ͢͢ΊʢԾʣ  /PSJZVLJ*TIJEB 

  2. ͸͡Ίʹ  ,PUMJOͷ"OESPJEެࣜݴޠαϙʔτ ͓ΊͰͱ͏͍͟͝·͢ʂ

  3. ͍͋ͭࣗ͝͞ݾ঺հ  ɾ໊લ/PSJZVLJ*TIJEB  ɾαʔόαΠυʢ+BWB1)11ZUIPO˞ษڧத ɾΤϯδχΞ!3FUUZ ɾJ04 0CKFDUJWF$ ɾ"84΋ͪΐͬͱ ɾ,PUMJOྺϲ݄͘Β͍

    ɾࠓ΍,PUMJO͕Ұ൪޷͖ͳݴޠ͔΋ ɾ೔ͷۀ຿ͷ൒෼͘Β͍͸,PUMJOΛॻ͍͍ͯΔ
  4. ͍͓͋ͭ͝͞Θͼ  ˞"OESPJE͸ॻ͚·ͤΜ

  5. ࠓ೔࿩͢͜ͱ  ɾαʔόαΠυͰ,PUMJOΛಋೖͨ͠ܦҢ ɾαʔόαΠυͰ,PUMJOΛ࢖ͬͯΈͯײͨ͜͡ͱ ɾฐࣾͰ͸ΞϓϦ༻ͷ"1*αʔόΛ,PUMJOͰ࡞͍ͬͯ·͢

  6. αʔόαΠυͰ,PUMJOΛಋೖͨ͠ܦҢ 

  7. ࠃ಺/P໊࣮άϧϝαʔϏε3FUUZͷӡӦ ೥ઃཱ XFCͱΞϓϦͰαʔϏεల։ γϯάϧυϝΠϯ εϚϗϑΝʔετ ݄ؒສ66 

  8. ฐࣾͷαʔϏεͷಛ௃  ɾ໊࣮ͷϢʔβ͞Μୡ͕ར༻͢ΔάϧϝαʔϏε ɾ'BDFCPPLͱ࿈ܞͯ͠ొ࿥Մೳ ɾ-*/&ϝʔϧΞυϨεͰ΋ొ࿥Ͱ͖Δ͕࠷ॳʹ໊࣮ొ࿥͕ඞཁ ɾϢʔβ͞Μ͕͓ళͷʮ͓͢͢ΊʯΛ౤ߘ͠
 ɹڞ༗͢Δ ɾࣗ෼ͱ޷Έ͕߹͏Ϣʔβ͞ΜΛݟ͚ͭͯɺͦͷਓͨͪΛ௨ͯࣗ͡෼ͷ
 ɹ޷Έʹ߹͓ͬͨళΛ୳ͤΔੈք؍ΛΊ͍ͯ͟͠·͢

  9. ฐࣾͷΞϓϦͷಛ௃   ɾେ൒ͷίϯςϯπ͸)551௨৴ "1* Λ௨ͯ͡ ɹऔಘͨ͠σʔλΛ࢖ͬͯද͍ࣔͯ͠Δ ɾΞϓϦ্Ͱͷૢ࡞΋·ͨ"1*Λ௨ͯ͡αʔόʹૹΒΕΔ

  10. ɾ"1*͕ͪΌΜͱ஋Λฦͯ͘͠Εͳ͍ͱ
 ɹίϯςϯπ͕յΕΔ ɾ഑ྻΛظ଴͍ͯ͠Δͱ͜Ζʹจࣈྻ͕ೖ͍ͬͯΔ౳ ɾͦ΋ͦ΋ܗࣜࣗମ͕ظ଴͍ͯ͠Δ΋ͷͱҟͳΔ ฐࣾͷΞϓϦͷಛ௃   ɾΤϥʔϋϯυϦϯά͕Ͱ͖͍ͯͳͯ͘Ϋϥογϡ ɹ͢Δέʔε΋͋Δ

  11. ฐࣾʹ͓͚ΔΞϓϦ༻"1*1)1Ͱॻ͍͍ͯͨ࣌୅  ɾ͔ͭͯ͸ฦΓ஋ͷܗࣜΛอূ͍ͯ͠ͳ͔ͬͨ ɾઃܭࢥ૝্ͷ໰୊ ɾ഑ྻΛظ଴͍ͯ͠Δͷʹจࣈྻ͕ೖͬͨΓ#PPMFBO͕ೖͬͨΓ͍ͯͨ͠ ˠΑΓ҆શͰΤϯδχΞʹ΍͍͞͠"1*Λ࡞Δ
 ɹͨΊʹ੩తܕ෇͚ݴޠʹҠߦ ɾಈతܕ෇͚ݴޠ1)1Ͱॻ͔Ε͍ͯͨ͜ͱ͕ٲͱͳͬͨ ɾฦΓ஋ͷෆඋΛॲཧ͢Δͷ͸ΫϥΠΞϯτଆͷ੹຿ͩͬͨ

  12. ฐࣾʹ͓͚ΔΞϓϦ༻"1*+BWBͷಋೖ  ɾ੩తܕ෇͚ݴޠͰαʔόαΠυͰ΋࣮੷͕͋Δ
 ɹ+BWBΛಋೖ ɾ'VODUJPOBM*OUFSGBDF ɾ4USFBN"1* NBQͱ͔GJMUFSͱ͔Λ࢖͑Δ΍ͭ ɾ0QUJPOBMܕ ɾ+BWB4FSWMFU ɾΫϥΠΞϯτʹฦ͢஋Λ10+0Ͱ໌֬ʹఆٛ

    ɾ+BWBಠࣗͷػೳ΋׆༻
  13. ฐࣾʹ͓͚ΔΞϓϦ༻"1*+BWB͔Β,PUMJO΁ͷҠߦ  ɾ೥΄Ͳܦͬͨࠒʹ͓΋ΉΖʹ,PUMJO΁ͷҠߦ
 ɹΛ։࢝ ɾ࠷ॳ͸γϯϓϧͳΫϥε΍FOVNͳͲΛॻ͖׵͑ ɾঃʑʹ৽نͷϑΝΠϧ͸,PUMJOͰ࡞ΔΑ͏ʹ ɾࠓͰ͸ϓϩμΫτશମͷఔ౓͕,PUMJOʹ

  14. ฐࣾʹ͓͚ΔΞϓϦ༻"1*+BWB͔Β,PUMJOʹҠߦͨ͠ཧ༝  ɾ࣮͸ੵۃతʹҠߦ͢Δͭ΋Γ͸ແ͔ͬͨ ɾ೥΄Ͳ+BWBͰॻ͍͍ͯͯɺಛஈෆศΛײ͡Δ͜ͱ΋ͳ͔ͬͨ ɾ౰ॳ͸/1&ʹ݁ߏ೰·͞Ε͍͕ͯͨɺ0QUJPOBMΛ͍͍ײ͡ʹ࢖ͬͯ
 ɹճආ͠Ͱ͖͍ͯͨ ɾ׶͑ͯҠߦͷཧ༝Λڍ͛ΔͳΒ/6--ͷѻ͍ ɾฦΓ஋ͷܕ৘ใͱͯ͠/6--Λڐ༰͢Δ͔Ͳ͏͔΋ॏཁ ɾ0QUJPOBM͸4FSJBMJ[BCMFͰ͸ͳ͍ͨΊ֎޲͖ͷΠϯλϑΣʔεͱ
 ɹͯ͠͸޲͔ͳ͍

    ɾ!/VMMBCMFΞϊςʔγϣϯΛ࢖ͬͯ/6--Λڐ༰͢Δ͔Ͳ͏͔දݱ ɹ͍͕ͯͨ͠ɺίϯύΠϥνΣοΫ͕ແ͍ͨΊ࣮ଶͱҟͳ͍ͬͯͨ
  15. αʔόαΠυͰ,PUMJOΛ࢖ͬͯΈͯײͨ͜͡ͱ 

  16.  ɾ͢ΜͳΓಋೖͰ͖Δ ɾ+7.ݴޠͳͷͰ+7.͕ಈ͘؀ڥԼͰ͋Ε͹Ͳ͜Ͱ΋ಈ͘ ɾطʹ+BWBͷϓϩμΫτ͕͋Δ৔߹ɺͦ͜ʹ,PUMJOΛೖΕΔͷ͸ͱͯ΋؆୯ αʔόαΠυͰ,PUMJOΛ࢖ͬͯΈͯײͨ͜͡ͱΑ͍ͱ͜Ζ ɾ+BWBͩͱಈ͍ͨͷʹॻ͖׵͑ͨΒಈ͔ͳ͘ͳͬͨɺͱ͍͏͜ͱ͸·ͣͳ͍ ɾ,PUMJOͱ͍͏ݴޠࣗମʹΫη͕গͳ͍ ɾ/6--ڐ༰ܕܕਪ࿦ϥϜμͳͲϞμϯͳݴޠͷػೳΛҰ௨Γඋ͑Δ ɾ͋Δ6UJMJUZΫϥε͚ͩ,PUMJOʹॻ͖׵͑ͱ͔ͦ͏͍ͬͨ͜ͱ΋༰қ ɾൺֱతετϨεগͳ͘ॻ͚Δݴޠͷͭ

  17. αʔόαΠυͰ,PUMJOΛ࢖ͬͯΈͯײͨ͜͡ͱΑ͍ͱ͜Ζ  ɾαʔόαΠυͰ࢖ͬͯಛʹศརͩͬͨػೳ val restaurant: Restaurant = RestaurantModel.get(id)
 val station:

    Station? = RestaurantModel .getNearestStation(id)
 restaurant.nearestStation = station /6--ڐ༰ܕ ɾTFSJBMJ[F͞ΕͯΫϥΠΞϯτʹ౤͛Δܕ͸/6--ڐ༰͔Ͳ͏͔΋ॏཁ data class Restaurant(val id: Long, val name: String, var station: Station?) ɾ/6--ڐ༰͔Ͳ͏͔͸ίϯύΠϥͰνΣοΫ͞ΕΔ
  18. αʔόαΠυͰ,PUMJOΛ࢖ͬͯΈͯײͨ͜͡ͱΑ͍ͱ͜Ζ  ɾαʔόαΠυͰ࢖ͬͯಛʹศརͩͬͨػೳ EBUBDMBTTͱܧঝ ,PUMJOd ɾTFSJBMJ[Fର৅ͷܕΛେྔʹ࡞ΔͱɺLFZʹදهΏΕ͕ى͖΍͍͢ͷͰ
 ɹΑ͘࢖͏LFZΛJOUFSGBDFͰఆٛͯ͠ܧঝ͢Δ data class Restaurant(override

    val restaurantId: Long, 
 override val restaurantName: String, var station: Station?): IRestaurantInfo interface IRestaurantInfo { @JsonProperty(“restaurant_id”) val restaurantId: Long @JsonProperty(“restaurant_name”) val restaurantName: String }
  19. αʔόαΠυͰ,PUMJOΛ࢖ͬͯΈͯײͨ͜͡ͱΑ͍ͱ͜Ζ  ɾαʔόαΠυͰ࢖ͬͯಛʹศརͩͬͨػೳ ֦ுؔ਺ ɾಛʹ$PMMFDUJPO*UFSBCMFʹ͸૊ΈࠐΈʹ΋ଟ֦͘ுؔ਺͕࣮૷͞Εͯ
 ɹ͍ΔͷͰศར return this.restaurantModel.getAll(restaurantIds) .filter {

    it.name.length > 10 } .map { it.restaurantId } .drop(offset) .take(limit)
  20. αʔόαΠυͰ,PUMJOΛ࢖ͬͯΈͯײͨ͜͡ͱ஫ҙ͢Δͱ͜Ζ  ɾϥΠϒϥϦ·ͰؚΊͯશͯΛ,PUMJOͰॻ͘ͷ͸
 ɹ೉͍͠ ɾ࣮੷ͷ͋Δ8FC"QQMJDBUJPOϑϨʔϜϫʔΫͰ,PUMJOΛਖ਼ࣜαϙʔτ͍ͯ͠Δ
 ɹ΋ͷ͸·ͩଟ͘ͳ͍ ɾ΋ͪΖΜࣗલͷίʔυ͸શͯ,PUMJOͰॻ͘͜ͱ͕Ͱ͖Δ ɾ+BWB੡ͷϥΠϒϥϦΛ࢖͏ͱ͖͸ෆఆܕʹ
 ɹ஫ҙ͕ඞཁ ɾ+BWB੡ͷϝιουͷฦΓ஋͸ɺ!/VMMBCMF!/PU/VMM͕͍ͭͯ


    ɹ͍ͳ͍ݶΓɺ͕෇͍ͨෆఆܕʹͳΔ ɾαʔυύʔςΟ੡ͷϥΠϒϥϦશͯΛ,PUMJOͰ༻ҙ͢Δͷ͸ݱ࣮తͰ͸ͳ͍ ɾ࣮ࡍʹͦͷ஋͕/6--ڐ༰͔Ͳ͏͔͸ϥΠϒϥϦΛ࢖͏ଆͰ൑அ͢Δ
  21. ·ͱΊ  ɾαʔό௨৴Λ൐͏ΞϓϦͰ͸αʔόαΠυ͕ ɹॏେͳ໾ׂΛ઎ΊΔ ɾαʔόαΠυͷෆඋ͸αʔόαΠυͰղফ͢΂͖ ɾ੩తܕ෇͚ݴޠΛ࢖ͬͯݫີʹܕΛఆٛ͢Δͷ͸ͭͷղܾࡦʹͳΓ͏Δ ɾࠓ͔ΒαʔόαΠυΛ੩తܕ෇͚ݴޠͰ࢝ΊΔ
 ɹͳΒ,PUMJO͕͓͢͢Ί ɾಋೖ͢Δͷ͸ͱͯ΋؆୯ ɾ,PUMJOͱ͍͏ݴޠࣗମΫη͕গͳ͍͍ͯ͘ݴޠ

    ɾϋϚΓϙΠϯτ͕ແ͍Θ͚Ͱ͸ͳ͍͕ɺগ͠ؾΛ࢖͑͹໰୊ແͦ͞͏ ɾ໊લ͕͔Θ͍͍
  22. ࠷ޙʹͪΐͬͱ͚ͩએ఻ 

  23. ࠓ݄຤ɺ3FUUZ͸ຑ෍े൪ʹҠస͠·͢ 

  24.  ৄࡉ͸ޙ೔$POOQBTTʹެ։༧ఆͰ͢ʂ