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

ポストRailsとしてのKotlin + Spring Boot #m3kt

Kenta Suzuki
November 22, 2017

ポストRailsとしてのKotlin + Spring Boot #m3kt

どこでもKotlin #4 〜秋のLT大会 その弐〜
https://m3-engineer.connpass.com/event/70561/

Kenta Suzuki

November 22, 2017
Tweet

More Decks by Kenta Suzuki

Other Decks in Technology

Transcript

  1. Copyright © 2017 M3, Inc. All Rights Reserved
    ポストRailsとしての
    Kotlin + Spring Boot
    #m3kt
    どこでもKotlin #4
    @suusan2go

    View Slide

  2. 自己紹介
    鈴木健太 (@suusan2go)
    エムスリー株式会社
    (2017/11/1〜)
    これまではRails / Ruby / JSの開発がメイン
    趣味含めてKotlin歴3ヶ月くらい

    View Slide

  3. アジェンダ
    ● Rails使ってたときに感じていた課題からポスト
    Railsな構成を考える
    ● Kotlin + Spring Bootを触ってみて所感

    View Slide

  4. 初めに言っておくと
    タイトルは若干釣りです :bow:
    ● ポストRailsというよりは、大規模になってきた
    Railsアプリケーションを分割していくときの選択
    肢としてKotlin + Spring Bootもあるよ!みたい
    な話をします。

    View Slide

  5. 創業3年目〜のRailsの
    会社に話を聞きに行くと
    大体皆さん言うこと

    View Slide

  6. 型がほしい

    View Slide

  7. 型がほ
    しい

    View Slide

  8. なぜか
    ● アプリケーションが複雑になってくると コード変
    更の影響が読みきれなくなってくる
    ○ なんでこのメソッドにこんなオブジェクトが入ってくるんだ

    ● 型・インターフェースが欲しくなってくる
    ○ このメソッドにわたるオブジェクトはこのメソッド、このプロ
    パティを持っていることを保証したい
    ○ でもテストやコードレビューだけでは保証しきれない…

    View Slide

  9. とはいえ
    ● 仕様がシンプルな機能や画面ではRailsの生産
    性はかなり高い
    ● ユーザーにHTMLを返す部分もやっぱりRailsは
    強いと思う
    ○ 豊富なGemを持つRubyのエコシステム、Railsの便利機
    能はやっぱりすごい
    ※SPAになるとまたちょっと状況は違うが…

    View Slide

  10. Rails => Rails + X なアプリケーション構
    成の可能性
    重要・複雑で精密さが求められる部分やアプリ間で重複するロジックを、
    Railsから固く作れる別アプリケーションにしていく構成は結構アリなので
    は?
    型のある何か

    View Slide

  11. View Slide

  12. View Slide

  13. よさそう

    View Slide

  14. でもRailsエンジニアが
    Kotlinとか本当にやれる
    の?

    View Slide

  15. やって
    みた

    View Slide

  16. Gistっぽい何かGyst(仮)構成
    ● バックエンドはSpringBoot
    ● フロントはVue.jsのSPA
    ● 休日の夜をつかって2ヶ月くらい(学習込み)
    REST
    swagger-codegenで
    APIクライアント自動生成

    View Slide

  17. DEMO
    https://github.com/suusan2go/gyst

    View Slide

  18. 実際触ってみてどうだったの?(1)
    ● IntelliJのJava => Kotlin変換が優秀
    ○ ググって出てきたものがJavaのコードでもそんなに困ら
    ない
    ○ 多少の変換は自分で必要な場合も多いけど優秀
    (nullable、var、val など)

    View Slide

  19. 実際触ってみてどうだったの?(2)
    ● SpringはJSONサーバとして(・∀・)イイ!!
    ○ @RestcontrollerつけるだけでレスポンスがJSONにな
    る!
    ○ null-safeなKotlinのお陰で、モデルを見ればNullが入るこ
    とがあるのか自明になる
    ○ Springからほぼ自動でAPI Doc / Clientが生成できる
    (Swagger Codegenで APIクライアントgem 自動生成
    )
    ○ (当たり前だけど)型がある

    View Slide

  20. 実際触ってみてどうだったの?(3)
    ● Kotlin書いていて結構楽しい
    ○ 結構Rubyに似たシンタックスでいける
    ○ こんな感じでかけないかなーというのが大体用意されて

    View Slide

  21. リスト操作
    Ruby Kotlin
    a.map {i -> i * 10}
    a.reduce {sum,n -> sum + n}
    a.groupBy {i -> i % 2}
    a.filter {i -> i % 2 == 0}
    a.map {|i| i * 10}
    a.reduce {|sum,n| sum + n}
    a.group_by {|i| i % 2}
    a.select {|i| i % 2 == 0}

    View Slide

  22. if式
    Ruby Kotlin
    val job = if (name == "taro") {
    "エバンジェリスト"
    } else {
    "エンジニア"
    }
    job = if name == "taro"
    "エバンジェリスト"
    else
    "エンジニア"
    end

    View Slide

  23. 拡張関数
    Ruby Kotlin
    fun Int.print(): Unit
    = println(this)
    1.print()
    class Integer
    def print; puts self; end
    end
    1.print

    View Slide

  24. 実際触ってみてどうだったの?(3)
    ● Kotlin書いていて結構楽しい
    ○ スコープ関数(let, apply , run とか)がうまくハマると気持
    ちいい

    View Slide

  25. 実際触ってみてどうだったの?(4)
    ● とはいえJavaのことはわかってないとハマりが

    ○ 特にアノテーション周り
    ○ KotlinがJava的には何をしているのか?は知っておいた
    ほうが良さそう
    ○ 一ヶ月くらいはJavaの復習やってました

    View Slide

  26. 実際触ってみてどうだったの?(5)
    ● KotlinよりもSpringの理解が大変だった
    ○ 本を買ったりしました(Spring徹底入門 Spring FrameworkによるJavaアプリケー
    ション開発)
    ○ Spring5からKotlinサポートも入ったけど、マイクロサービ
    スなバックエンドサーバーとしては、もうちょいシンプルな
    FWが欲しい
    ○ KtorなどKotlin製のFWに期待!

    View Slide

  27. まとめ
    ● Kotlin はRubyエンジニアでもとっつきやすい言
    語になっていて怖くないよ!
    ● JSONを返すサーバーとしてはKotlin + Spring
    Bootの開発体験は結構良い!
    ● Railsをフロント・SpringBootをバックエンドとする
    構成は結構アリな気がする

    View Slide

  28. One More Thing

    View Slide

  29. Kotlin + Spring Boot + gRPC
    な新プロジェクトが進行中!
    JOIN US!
    GateWay

    View Slide