どこでもKotlin #4 〜秋のLT大会 その弐〜 https://m3-engineer.connpass.com/event/70561/
Copyright © 2017 M3, Inc. All Rights ReservedポストRailsとしてのKotlin + Spring Boot#m3ktどこでもKotlin #4@suusan2go
View Slide
自己紹介鈴木健太 (@suusan2go)エムスリー株式会社(2017/11/1〜)これまではRails / Ruby / JSの開発がメイン趣味含めてKotlin歴3ヶ月くらい
アジェンダ● Rails使ってたときに感じていた課題からポストRailsな構成を考える● Kotlin + Spring Bootを触ってみて所感
初めに言っておくとタイトルは若干釣りです :bow:● ポストRailsというよりは、大規模になってきたRailsアプリケーションを分割していくときの選択肢としてKotlin + Spring Bootもあるよ!みたいな話をします。
創業3年目〜のRailsの会社に話を聞きに行くと大体皆さん言うこと
型がほしい
なぜか● アプリケーションが複雑になってくると コード変更の影響が読みきれなくなってくる○ なんでこのメソッドにこんなオブジェクトが入ってくるんだ…● 型・インターフェースが欲しくなってくる○ このメソッドにわたるオブジェクトはこのメソッド、このプロパティを持っていることを保証したい○ でもテストやコードレビューだけでは保証しきれない…
とはいえ● 仕様がシンプルな機能や画面ではRailsの生産性はかなり高い● ユーザーにHTMLを返す部分もやっぱりRailsは強いと思う○ 豊富なGemを持つRubyのエコシステム、Railsの便利機能はやっぱりすごい※SPAになるとまたちょっと状況は違うが…
Rails => Rails + X なアプリケーション構成の可能性重要・複雑で精密さが求められる部分やアプリ間で重複するロジックを、Railsから固く作れる別アプリケーションにしていく構成は結構アリなのでは?型のある何か
よさそう
でもRailsエンジニアがKotlinとか本当にやれるの?
やってみた
Gistっぽい何かGyst(仮)構成● バックエンドはSpringBoot● フロントはVue.jsのSPA● 休日の夜をつかって2ヶ月くらい(学習込み)RESTswagger-codegenでAPIクライアント自動生成
DEMOhttps://github.com/suusan2go/gyst
実際触ってみてどうだったの?(1)● IntelliJのJava => Kotlin変換が優秀○ ググって出てきたものがJavaのコードでもそんなに困らない○ 多少の変換は自分で必要な場合も多いけど優秀(nullable、var、val など)
実際触ってみてどうだったの?(2)● SpringはJSONサーバとして(・∀・)イイ!!○ @RestcontrollerつけるだけでレスポンスがJSONになる!○ null-safeなKotlinのお陰で、モデルを見ればNullが入ることがあるのか自明になる○ Springからほぼ自動でAPI Doc / Clientが生成できる(Swagger Codegenで APIクライアントgem 自動生成)○ (当たり前だけど)型がある
実際触ってみてどうだったの?(3)● Kotlin書いていて結構楽しい○ 結構Rubyに似たシンタックスでいける○ こんな感じでかけないかなーというのが大体用意されてる
リスト操作Ruby Kotlina.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}
if式Ruby Kotlinval job = if (name == "taro") {"エバンジェリスト"} else {"エンジニア"}job = if name == "taro""エバンジェリスト"else"エンジニア"end
拡張関数Ruby Kotlinfun Int.print(): Unit= println(this)1.print()class Integerdef print; puts self; endend1.print
実際触ってみてどうだったの?(3)● Kotlin書いていて結構楽しい○ スコープ関数(let, apply , run とか)がうまくハマると気持ちいい
実際触ってみてどうだったの?(4)● とはいえJavaのことはわかってないとハマりがち○ 特にアノテーション周り○ KotlinがJava的には何をしているのか?は知っておいたほうが良さそう○ 一ヶ月くらいはJavaの復習やってました
実際触ってみてどうだったの?(5)● KotlinよりもSpringの理解が大変だった○ 本を買ったりしました(Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発)○ Spring5からKotlinサポートも入ったけど、マイクロサービスなバックエンドサーバーとしては、もうちょいシンプルなFWが欲しい○ KtorなどKotlin製のFWに期待!
まとめ● Kotlin はRubyエンジニアでもとっつきやすい言語になっていて怖くないよ!● JSONを返すサーバーとしてはKotlin + SpringBootの開発体験は結構良い!● Railsをフロント・SpringBootをバックエンドとする構成は結構アリな気がする
One More Thing
Kotlin + Spring Boot + gRPCな新プロジェクトが進行中!JOIN US!GateWay