Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

型がほしい

Slide 7

Slide 7 text

型がほ しい

Slide 8

Slide 8 text

なぜか ● アプリケーションが複雑になってくると コード変 更の影響が読みきれなくなってくる ○ なんでこのメソッドにこんなオブジェクトが入ってくるんだ … ● 型・インターフェースが欲しくなってくる ○ このメソッドにわたるオブジェクトはこのメソッド、このプロ パティを持っていることを保証したい ○ でもテストやコードレビューだけでは保証しきれない…

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

よさそう

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

やって みた

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

リスト操作 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}

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

実際触ってみてどうだったの?(4) ● とはいえJavaのことはわかってないとハマりが ち ○ 特にアノテーション周り ○ KotlinがJava的には何をしているのか?は知っておいた ほうが良さそう ○ 一ヶ月くらいはJavaの復習やってました

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

One More Thing

Slide 29

Slide 29 text

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