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

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

35b58828e4e24c579c35529061711dfd?s=47 Kenta Suzuki
November 22, 2017

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

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

35b58828e4e24c579c35529061711dfd?s=128

Kenta Suzuki

November 22, 2017
Tweet

Transcript

  1. Copyright © 2017 M3, Inc. All Rights Reserved ポストRailsとしての Kotlin

    + Spring Boot #m3kt どこでもKotlin #4 @suusan2go
  2. 自己紹介 鈴木健太 (@suusan2go) エムスリー株式会社 (2017/11/1〜) これまではRails / Ruby / JSの開発がメイン

    趣味含めてKotlin歴3ヶ月くらい
  3. アジェンダ • Rails使ってたときに感じていた課題からポスト Railsな構成を考える • Kotlin + Spring Bootを触ってみて所感

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

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

  6. 型がほしい

  7. 型がほ しい

  8. なぜか • アプリケーションが複雑になってくると コード変 更の影響が読みきれなくなってくる ◦ なんでこのメソッドにこんなオブジェクトが入ってくるんだ … • 型・インターフェースが欲しくなってくる ◦

    このメソッドにわたるオブジェクトはこのメソッド、このプロ パティを持っていることを保証したい ◦ でもテストやコードレビューだけでは保証しきれない…
  9. とはいえ • 仕様がシンプルな機能や画面ではRailsの生産 性はかなり高い • ユーザーにHTMLを返す部分もやっぱりRailsは 強いと思う ◦ 豊富なGemを持つRubyのエコシステム、Railsの便利機 能はやっぱりすごい

    ※SPAになるとまたちょっと状況は違うが…
  10. Rails => Rails + X なアプリケーション構 成の可能性 重要・複雑で精密さが求められる部分やアプリ間で重複するロジックを、 Railsから固く作れる別アプリケーションにしていく構成は結構アリなので は?

    型のある何か
  11. None
  12. None
  13. よさそう

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

  15. やって みた

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

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

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

    (nullable、var、val など)
  19. 実際触ってみてどうだったの?(2) • SpringはJSONサーバとして(・∀・)イイ!! ◦ @RestcontrollerつけるだけでレスポンスがJSONにな る! ◦ null-safeなKotlinのお陰で、モデルを見ればNullが入るこ とがあるのか自明になる ◦

    Springからほぼ自動でAPI Doc / Clientが生成できる (Swagger Codegenで APIクライアントgem 自動生成 ) ◦ (当たり前だけど)型がある
  20. 実際触ってみてどうだったの?(3) • Kotlin書いていて結構楽しい ◦ 結構Rubyに似たシンタックスでいける ◦ こんな感じでかけないかなーというのが大体用意されて る

  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}
  22. if式 Ruby Kotlin val job = if (name == "taro")

    { "エバンジェリスト" } else { "エンジニア" } job = if name == "taro" "エバンジェリスト" else "エンジニア" end
  23. 拡張関数 Ruby Kotlin fun Int.print(): Unit = println(this) 1.print() class

    Integer def print; puts self; end end 1.print
  24. 実際触ってみてどうだったの?(3) • Kotlin書いていて結構楽しい ◦ スコープ関数(let, apply , run とか)がうまくハマると気持 ちいい

  25. 実際触ってみてどうだったの?(4) • とはいえJavaのことはわかってないとハマりが ち ◦ 特にアノテーション周り ◦ KotlinがJava的には何をしているのか?は知っておいた ほうが良さそう ◦

    一ヶ月くらいはJavaの復習やってました
  26. 実際触ってみてどうだったの?(5) • KotlinよりもSpringの理解が大変だった ◦ 本を買ったりしました(Spring徹底入門 Spring FrameworkによるJavaアプリケー ション開発) ◦ Spring5からKotlinサポートも入ったけど、マイクロサービ

    スなバックエンドサーバーとしては、もうちょいシンプルな FWが欲しい ◦ KtorなどKotlin製のFWに期待!
  27. まとめ • Kotlin はRubyエンジニアでもとっつきやすい言 語になっていて怖くないよ! • JSONを返すサーバーとしてはKotlin + Spring Bootの開発体験は結構良い!

    • Railsをフロント・SpringBootをバックエンドとする 構成は結構アリな気がする
  28. One More Thing

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