$30 off During Our Annual Pro Sale. View Details »

サーバーサイド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

    View Slide

  2. ͸͡Ίʹ

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

    View Slide

  3. ͍͋ͭࣗ͝͞ݾ঺հ

    ɾ໊લ/PSJZVLJ*TIJEB

    ɾαʔόαΠυʢ+BWB1)11ZUIPO˞ษڧத

    ɾΤϯδχΞ!3FUUZ
    ɾJ04 0CKFDUJWF$

    ɾ"84΋ͪΐͬͱ
    ɾ,PUMJOྺϲ݄͘Β͍
    ɾࠓ΍,PUMJO͕Ұ൪޷͖ͳݴޠ͔΋
    ɾ೔ͷۀ຿ͷ൒෼͘Β͍͸,PUMJOΛॻ͍͍ͯΔ

    View Slide

  4. ͍͓͋ͭ͝͞Θͼ

    ˞"OESPJE͸ॻ͚·ͤΜ

    View Slide

  5. ࠓ೔࿩͢͜ͱ

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

    View Slide

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

    View Slide

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

    View Slide

  8. ฐࣾͷαʔϏεͷಛ௃

    ɾ໊࣮ͷϢʔβ͞Μୡ͕ར༻͢ΔάϧϝαʔϏε
    ɾ'BDFCPPLͱ࿈ܞͯ͠ొ࿥Մೳ
    ɾ-*/&ϝʔϧΞυϨεͰ΋ొ࿥Ͱ͖Δ͕࠷ॳʹ໊࣮ొ࿥͕ඞཁ
    ɾϢʔβ͞Μ͕͓ళͷʮ͓͢͢ΊʯΛ౤ߘ͠

    ɹڞ༗͢Δ
    ɾࣗ෼ͱ޷Έ͕߹͏Ϣʔβ͞ΜΛݟ͚ͭͯɺͦͷਓͨͪΛ௨ͯࣗ͡෼ͷ

    ɹ޷Έʹ߹͓ͬͨళΛ୳ͤΔੈք؍ΛΊ͍ͯ͟͠·͢

    View Slide

  9. ฐࣾͷΞϓϦͷಛ௃


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

    View Slide

  10. ɾ"1*͕ͪΌΜͱ஋Λฦͯ͘͠Εͳ͍ͱ

    ɹίϯςϯπ͕յΕΔ
    ɾ഑ྻΛظ଴͍ͯ͠Δͱ͜Ζʹจࣈྻ͕ೖ͍ͬͯΔ౳
    ɾͦ΋ͦ΋ܗࣜࣗମ͕ظ଴͍ͯ͠Δ΋ͷͱҟͳΔ
    ฐࣾͷΞϓϦͷಛ௃


    ɾΤϥʔϋϯυϦϯά͕Ͱ͖͍ͯͳͯ͘Ϋϥογϡ
    ɹ͢Δέʔε΋͋Δ

    View Slide

  11. ฐࣾʹ͓͚ΔΞϓϦ༻"1*1)1Ͱॻ͍͍ͯͨ࣌୅

    ɾ͔ͭͯ͸ฦΓ஋ͷܗࣜΛอূ͍ͯ͠ͳ͔ͬͨ
    ɾઃܭࢥ૝্ͷ໰୊
    ɾ഑ྻΛظ଴͍ͯ͠Δͷʹจࣈྻ͕ೖͬͨΓ#PPMFBO͕ೖͬͨΓ͍ͯͨ͠
    ˠΑΓ҆શͰΤϯδχΞʹ΍͍͞͠"1*Λ࡞Δ

    ɹͨΊʹ੩తܕ෇͚ݴޠʹҠߦ
    ɾಈతܕ෇͚ݴޠ1)1Ͱॻ͔Ε͍ͯͨ͜ͱ͕ٲͱͳͬͨ
    ɾฦΓ஋ͷෆඋΛॲཧ͢Δͷ͸ΫϥΠΞϯτଆͷ੹຿ͩͬͨ

    View Slide

  12. ฐࣾʹ͓͚ΔΞϓϦ༻"1*+BWBͷಋೖ

    ɾ੩తܕ෇͚ݴޠͰαʔόαΠυͰ΋࣮੷͕͋Δ

    ɹ+BWBΛಋೖ
    ɾ'VODUJPOBM*OUFSGBDF
    ɾ4USFBN"1* NBQͱ͔GJMUFSͱ͔Λ࢖͑Δ΍ͭ

    ɾ0QUJPOBMܕ
    ɾ+BWB4FSWMFU
    ɾΫϥΠΞϯτʹฦ͢஋Λ10+0Ͱ໌֬ʹఆٛ
    ɾ+BWBಠࣗͷػೳ΋׆༻

    View Slide

  13. ฐࣾʹ͓͚ΔΞϓϦ༻"1*+BWB͔Β,PUMJO΁ͷҠߦ

    ɾ೥΄Ͳܦͬͨࠒʹ͓΋ΉΖʹ,PUMJO΁ͷҠߦ

    ɹΛ։࢝
    ɾ࠷ॳ͸γϯϓϧͳΫϥε΍FOVNͳͲΛॻ͖׵͑
    ɾঃʑʹ৽نͷϑΝΠϧ͸,PUMJOͰ࡞ΔΑ͏ʹ
    ɾࠓͰ͸ϓϩμΫτશମͷఔ౓͕,PUMJOʹ

    View Slide

  14. ฐࣾʹ͓͚ΔΞϓϦ༻"1*+BWB͔Β,PUMJOʹҠߦͨ͠ཧ༝

    ɾ࣮͸ੵۃతʹҠߦ͢Δͭ΋Γ͸ແ͔ͬͨ
    ɾ೥΄Ͳ+BWBͰॻ͍͍ͯͯɺಛஈෆศΛײ͡Δ͜ͱ΋ͳ͔ͬͨ
    ɾ౰ॳ͸/1&ʹ݁ߏ೰·͞Ε͍͕ͯͨɺ0QUJPOBMΛ͍͍ײ͡ʹ࢖ͬͯ

    ɹճආ͠Ͱ͖͍ͯͨ
    ɾ׶͑ͯҠߦͷཧ༝Λڍ͛ΔͳΒ/6--ͷѻ͍
    ɾฦΓ஋ͷܕ৘ใͱͯ͠/6--Λڐ༰͢Δ͔Ͳ͏͔΋ॏཁ
    ɾ0QUJPOBM͸4FSJBMJ[BCMFͰ͸ͳ͍ͨΊ֎޲͖ͷΠϯλϑΣʔεͱ

    ɹͯ͠͸޲͔ͳ͍
    ɾ!/VMMBCMFΞϊςʔγϣϯΛ࢖ͬͯ/6--Λڐ༰͢Δ͔Ͳ͏͔දݱ
    ɹ͍͕ͯͨ͠ɺίϯύΠϥνΣοΫ͕ແ͍ͨΊ࣮ଶͱҟͳ͍ͬͯͨ

    View Slide

  15. αʔόαΠυͰ,PUMJOΛ࢖ͬͯΈͯײͨ͜͡ͱ

    View Slide


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

    View Slide

  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--ڐ༰͔Ͳ͏͔͸ίϯύΠϥͰνΣοΫ͞ΕΔ

    View Slide

  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
    }

    View Slide

  19. αʔόαΠυͰ,PUMJOΛ࢖ͬͯΈͯײͨ͜͡ͱΑ͍ͱ͜Ζ

    ɾαʔόαΠυͰ࢖ͬͯಛʹศརͩͬͨػೳ
    ֦ுؔ਺
    ɾಛʹ$PMMFDUJPO*UFSBCMFʹ͸૊ΈࠐΈʹ΋ଟ֦͘ுؔ਺͕࣮૷͞Εͯ

    ɹ͍ΔͷͰศར
    return this.restaurantModel.getAll(restaurantIds)
    .filter { it.name.length > 10 }
    .map { it.restaurantId }
    .drop(offset)
    .take(limit)

    View Slide

  20. αʔόαΠυͰ,PUMJOΛ࢖ͬͯΈͯײͨ͜͡ͱ஫ҙ͢Δͱ͜Ζ

    ɾϥΠϒϥϦ·ͰؚΊͯશͯΛ,PUMJOͰॻ͘ͷ͸

    ɹ೉͍͠
    ɾ࣮੷ͷ͋Δ8FC"QQMJDBUJPOϑϨʔϜϫʔΫͰ,PUMJOΛਖ਼ࣜαϙʔτ͍ͯ͠Δ

    ɹ΋ͷ͸·ͩଟ͘ͳ͍
    ɾ΋ͪΖΜࣗલͷίʔυ͸શͯ,PUMJOͰॻ͘͜ͱ͕Ͱ͖Δ
    ɾ+BWB੡ͷϥΠϒϥϦΛ࢖͏ͱ͖͸ෆఆܕʹ

    ɹ஫ҙ͕ඞཁ
    ɾ+BWB੡ͷϝιουͷฦΓ஋͸ɺ!/VMMBCMF!/PU/VMM͕͍ͭͯ

    ɹ͍ͳ͍ݶΓɺ͕෇͍ͨෆఆܕʹͳΔ
    ɾαʔυύʔςΟ੡ͷϥΠϒϥϦશͯΛ,PUMJOͰ༻ҙ͢Δͷ͸ݱ࣮తͰ͸ͳ͍
    ɾ࣮ࡍʹͦͷ஋͕/6--ڐ༰͔Ͳ͏͔͸ϥΠϒϥϦΛ࢖͏ଆͰ൑அ͢Δ

    View Slide

  21. ·ͱΊ

    ɾαʔό௨৴Λ൐͏ΞϓϦͰ͸αʔόαΠυ͕
    ɹॏେͳ໾ׂΛ઎ΊΔ
    ɾαʔόαΠυͷෆඋ͸αʔόαΠυͰղফ͢΂͖
    ɾ੩తܕ෇͚ݴޠΛ࢖ͬͯݫີʹܕΛఆٛ͢Δͷ͸ͭͷղܾࡦʹͳΓ͏Δ
    ɾࠓ͔ΒαʔόαΠυΛ੩తܕ෇͚ݴޠͰ࢝ΊΔ

    ɹͳΒ,PUMJO͕͓͢͢Ί
    ɾಋೖ͢Δͷ͸ͱͯ΋؆୯
    ɾ,PUMJOͱ͍͏ݴޠࣗମΫη͕গͳ͍͍ͯ͘ݴޠ
    ɾϋϚΓϙΠϯτ͕ແ͍Θ͚Ͱ͸ͳ͍͕ɺগ͠ؾΛ࢖͑͹໰୊ແͦ͞͏
    ɾ໊લ͕͔Θ͍͍

    View Slide

  22. ࠷ޙʹͪΐͬͱ͚ͩએ఻

    View Slide

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

    View Slide


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

    View Slide