SlideShare a Scribd company logo
KotlinConf 2018 から⾒る
最近の Kotlin サーバーサイド事情
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
川⽥ 裕貴
LINE Corporation 2016年⼊社
開発1センター LINE開発1室 P Part チーム
スタンプ・絵⽂字関連サーバー開発 (Java, Kotlin?)
IoT 関連サービスの Server-side 開発 (全て Kotlin)
HIROTAKA KAWATA @hktechno
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
Microservices in LINE Shop
•Armeria を利⽤した Thrift RPC で Microservices
• Armeria: LINE 製 OSS HTTP/2 RPC ライブラリ https://line.github.io/armeria/
• LINE では、歴史的に Thrift を RPC のために利⽤している
• 内部は、ほぼすべて RxJava2 を組み合わせた Non-blocking RPC, DB アクセス
•過去に書いたブログ記事とか
• RxJava 2とArmeriaでマイクロサービスを⾮同期化してみた
• LINE スタンプショップにおける Zipkin 利⽤事例
• Elasticsearch を検索エンジンとして利⽤する際のポイント
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
お仕事での Kotlin
•IoT サービスのバックエンドを Kotlin で書いてます
• 来⽉の LINE Developer Day 2018 に期待していてください
• Spring Boot 2 + Armeria + Thrift RPC, REST API
• もともと Spring MVC で書かれていたが…
• リリースもしていないサービスなのに Armeria 化され、完全 Kotlin 化された…
• Armeria も、Kotlin から使っていてそんなに不便なことはない
• たまに微妙に感じることがあるので、落ち着いたら Kotlin 対応を⼊れたいと思っている
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
KotlinConf 2018 - 感想
•Kotlin サーバーサイドの話も、思ったよりあった
• サーバーサイドの⼈なので、サーバーサイドのトークを重点的に聞いた
• ただ、Kotlin の話より、何かを Kotlin でやってみた系の話が多かった、Kotlin はおまけ
•Coroutine がアツい
• みんな本当に使いこなせるの?Reactive Streams との共存…
•Amsterdam がいいところだった
• US でやるカンファレンスより満⾜度⾼い、会場とかいろいろ
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
Server-side Kotlin
•みんな使ってる?
•イケてるところ
• Null safety, Type safety
• Functional programming, DSL
•サーバサイド的に重要
• JVM ⾔語
• 既存の Java のリソースが使える、親和性が良い
• パフォーマンス的な問題があまりない
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
Kotlin で Web フレームワーク何つかってる?
•よく使われていそうなのは、以下の3つかな?
•Ktor http://ktor.io/
•http4k https://www.http4k.org/
•Spring Boot https://spring.io/projects/spring-boot
•Ktor, http4k は、Pure Kotlin, Lightweight
• 全部⼊りがほしければ、やっぱり Spring Boot ?
• Kotlin で Spring を快適に使うには ?
from Komparing Kotlin Server Frameworks
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
Kotlin Web フレームワーク⽐較
•Swagger, Micrometer, Zipkin (Tracing) が使いたい!
• http4k, Spring Boot
•Coroutine (Non-blocking, Asynchronous API) が使いたい!
• Ktor は JetBrains 謹製なのでもちろん対応
• Spring も Unofficial support がある (for webflux)
•(個⼈的には) Ktor のこれからの成⻑に期待
• それまでは、Spring でもいいかなぁ?
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
http4k
val app = routes(
    "bob" bind GET to { Response(OK).body("you GET bob") },
    "rita" bind POST to { Response(OK).body("you POST rita") },
    "sue" bind DELETE to { Response(OK).body("you DELETE sue") }
)
val server = app.asServer(SunHttp(8000)).start()
Ktor
embeddedServer(Netty, 8080) {
routing {
get("/") {
call.respondText("Hello, world!", ContentType.Text.Html)
}
}
}.start(wait = true)
Server as a Function
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
Spring Boot を Kotlin で快適に使うには…
•SpringFu, KoFu を使って Functional!! DSL!! (ただし incubating feature)
• やっぱり Spring 使いたいですよね
• https://github.com/spring-projects/spring-fu
•Annotation を多⽤した Configuration, Bean registration は⿊魔術に近い
• 何が起きているのかわからない、辿れない
• 解決策としての Functional configuration with Kotlin DSL で明⽰的な Configuration を実現
• 上記のプレゼンでは、Live coding で1つづつアノテーションを削っていく実演
from Kotlin and Spring Boot, a Match Made in Heaven
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
SpringFu, KoFu のサンプル https://github.com/ajavageek/springfunctional-migration
@SpringBootApplication
class MigrationDemoApplication
fun main(args: Array<String>) {
runApplication<MigrationDemoApplication>(*args)
}
@RestController
class PersonController(private val personRepository: PersonRepository) {
@GetMapping("/person")
fun readAll() = personRepository.findAll()
@GetMapping("/person/{id}")
fun readOne(@PathVariable id: Long) = personRepository.findById(id)
}
interface PersonRepository : PagingAndSortingRepository<Person, Long>
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
val beans = beans {
bean<PersonHandler>()
bean<PersonRepository>()
}
val app = application {
import(beans)
server {
import(::routes)
codecs {
jackson()
}
}
mongodb {
embedded()
}
}
SpringFu, KoFu のサンプル
fun routes(handler: PersonHandler) = router {
"/person".nest {
GET("/{id}", handler::readOne)
GET("/", handler::readAll)
}
}
fun main(args: Array<String>) {
app.run(args)
}
https://github.com/ajavageek/springfunctional-migration
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
API / Microservices
•REST に否定的(?)なトークがいくつかあった
• Painless Microservices with Kotlin
• GraphQL Powered by Kotlin
•REST (JSON over HTTP) のイケてないところ
• 型がない、スキーマが曖昧、パースに CPU を多く消費する
• 乗り換え先は?
• GraphQL (for external), gRPC (for internal) 弊社だと Thrift
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
API / Microservices
•Kubanetes Kotlin DSL
•https://github.com/fkorotkov/k8s-kotlin-dsl
from Painless Microservices with Kotlin
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
API / Microservices
•分散 Tracing の話を、思ったよりちらほら聞いた
• https://opentracing.io/ https://zipkin.io/
• 国内で Opentracing, Zipkin をあまり使っている話は聞いたことないのだけど…
• 弊社で勉強会やったけど⼈の集まりが悪かったけど…
• https://line.connpass.com/event/86639/
•Microservices 特有の分散トレーシング
• ちゃんとフレームワーク⽐較のところでも取り上げられて、⽐較されていた
• マイクロサービスを使うなら、ぜひ導⼊しておきたい
LINE スタンプショップにおける zipkin 利⽤事例
ユーザー	token	認証
Product	情報取得
Ownership	情報取得
getProduct() API の例
KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情
Kotlin/Native の可能性
•Kotlin/Native はサーバーサイドでも使えるようになるのか?
• 上記の Kotlin/Native の発表を⾒た限り、Concurrency 周りが難しそう
• GC や Safe concurrency を実現するための、オブジェクトの扱いが難しそう
• Pure Kotlin の Ktor あたりが Native をちゃんとサポートしてくれれば…?
• いずれにしても、JVM 系のライブラリは⼀切は使えない
• 今後に期待
• 現状、特に Server-less な利⽤法では、Kotlin/JVM は Startup time の問題から厳しい
• サーバーレスで使いたいなら、GraalVM の⽅に期待したほうが良さそう?
from Kotlin/Native Concurrency Model

More Related Content

PDF
IL2CPPに関する軽い話
PPTX
Clovaにおける機械学習モジュールの配信&運用基盤の紹介
PDF
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
PDF
The Next Generation for C# Developers
PPTX
Kotlin skeleton
PPTX
SpringOne Platform 2018 全体報告
PDF
お小遣いでKubernetesクラスタ
PPTX
KubeCon Recap for Istio and K8s network performance @Kubernetes Meetup #11
IL2CPPに関する軽い話
Clovaにおける機械学習モジュールの配信&運用基盤の紹介
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
The Next Generation for C# Developers
Kotlin skeleton
SpringOne Platform 2018 全体報告
お小遣いでKubernetesクラスタ
KubeCon Recap for Istio and K8s network performance @Kubernetes Meetup #11

What's hot (17)

PDF
virtual-kubeletってなんだ?Alibaba Cloudで動かしてみよう
PDF
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
PDF
OpenStack上に展開するContainer as a Service を本番で利用するために必要だったこと
PPTX
5分でわかる Capabilities と Privilege + KubeCon Recap
PPTX
祝 top-level project Apache Geode
PPTX
TypeScriptでCLIアプリケーション開発
PPTX
サイバーエージェントにおけるプライベートコンテナ基盤AKEを支える技術
PPTX
Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~
PPTX
Sinatra hijacker
PDF
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
PDF
Cloud Foundry Container-to-Container Networking
PDF
PDF
Kafka Connect(Japanese)
PPTX
当番をランダムに割り当ててみる ~ on-dutyTable.py ~
PPTX
ServiceMesh と仲間たち 〜Istio & Conduit & Linkerd〜 @Cloud Native Meetup Tokyo #1
PDF
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
PPTX
UniRx勉強会 reactive extensions inside(公開用)
virtual-kubeletってなんだ?Alibaba Cloudで動かしてみよう
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
OpenStack上に展開するContainer as a Service を本番で利用するために必要だったこと
5分でわかる Capabilities と Privilege + KubeCon Recap
祝 top-level project Apache Geode
TypeScriptでCLIアプリケーション開発
サイバーエージェントにおけるプライベートコンテナ基盤AKEを支える技術
Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~
Sinatra hijacker
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
Cloud Foundry Container-to-Container Networking
Kafka Connect(Japanese)
当番をランダムに割り当ててみる ~ on-dutyTable.py ~
ServiceMesh と仲間たち 〜Istio & Conduit & Linkerd〜 @Cloud Native Meetup Tokyo #1
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
UniRx勉強会 reactive extensions inside(公開用)
Ad

Similar to KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情 (6)

PDF
ヤフーにおけるkotlinとのかかわり #kotlinfest
PPTX
サーバサイド Kotlin
PDF
KotlinでWebアプリ開発
PDF
Lineにおけるspring frameworkの活用
PPTX
Server Side Kotlin
PDF
Kotlinのwebフレームワーク探訪
ヤフーにおけるkotlinとのかかわり #kotlinfest
サーバサイド Kotlin
KotlinでWebアプリ開発
Lineにおけるspring frameworkの活用
Server Side Kotlin
Kotlinのwebフレームワーク探訪
Ad

More from Hirotaka Kawata (13)

PDF
Kotest を使って 快適にテストを書こう - KotlinFest 2024
PDF
本当にわかる Spectre と Meltdown
PPTX
ゼロから始める自作 CPU 入門
PDF
Micro Python で組み込み Python
PDF
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
PDF
Introduction of PyCon JP 2014 in PyCon SG
PDF
xv6 + mist32 + mruby
PDF
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
PDF
産学間連携推進室(AC部屋) 2012 成果報告会
PDF
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
PDF
seccamp2012 チューター発表
ODP
Open Design Computer Project - Tsukuba.pm
ODP
About University of Tsukuba Linux User Group
Kotest を使って 快適にテストを書こう - KotlinFest 2024
本当にわかる Spectre と Meltdown
ゼロから始める自作 CPU 入門
Micro Python で組み込み Python
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
Introduction of PyCon JP 2014 in PyCon SG
xv6 + mist32 + mruby
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
産学間連携推進室(AC部屋) 2012 成果報告会
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
seccamp2012 チューター発表
Open Design Computer Project - Tsukuba.pm
About University of Tsukuba Linux User Group

KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情

  • 1. KotlinConf 2018 から⾒る 最近の Kotlin サーバーサイド事情
  • 2. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 川⽥ 裕貴 LINE Corporation 2016年⼊社 開発1センター LINE開発1室 P Part チーム スタンプ・絵⽂字関連サーバー開発 (Java, Kotlin?) IoT 関連サービスの Server-side 開発 (全て Kotlin) HIROTAKA KAWATA @hktechno
  • 3. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 Microservices in LINE Shop •Armeria を利⽤した Thrift RPC で Microservices • Armeria: LINE 製 OSS HTTP/2 RPC ライブラリ https://line.github.io/armeria/ • LINE では、歴史的に Thrift を RPC のために利⽤している • 内部は、ほぼすべて RxJava2 を組み合わせた Non-blocking RPC, DB アクセス •過去に書いたブログ記事とか • RxJava 2とArmeriaでマイクロサービスを⾮同期化してみた • LINE スタンプショップにおける Zipkin 利⽤事例 • Elasticsearch を検索エンジンとして利⽤する際のポイント
  • 4. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 お仕事での Kotlin •IoT サービスのバックエンドを Kotlin で書いてます • 来⽉の LINE Developer Day 2018 に期待していてください • Spring Boot 2 + Armeria + Thrift RPC, REST API • もともと Spring MVC で書かれていたが… • リリースもしていないサービスなのに Armeria 化され、完全 Kotlin 化された… • Armeria も、Kotlin から使っていてそんなに不便なことはない • たまに微妙に感じることがあるので、落ち着いたら Kotlin 対応を⼊れたいと思っている
  • 5. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 KotlinConf 2018 - 感想 •Kotlin サーバーサイドの話も、思ったよりあった • サーバーサイドの⼈なので、サーバーサイドのトークを重点的に聞いた • ただ、Kotlin の話より、何かを Kotlin でやってみた系の話が多かった、Kotlin はおまけ •Coroutine がアツい • みんな本当に使いこなせるの?Reactive Streams との共存… •Amsterdam がいいところだった • US でやるカンファレンスより満⾜度⾼い、会場とかいろいろ
  • 6. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 Server-side Kotlin •みんな使ってる? •イケてるところ • Null safety, Type safety • Functional programming, DSL •サーバサイド的に重要 • JVM ⾔語 • 既存の Java のリソースが使える、親和性が良い • パフォーマンス的な問題があまりない
  • 7. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 Kotlin で Web フレームワーク何つかってる? •よく使われていそうなのは、以下の3つかな? •Ktor http://ktor.io/ •http4k https://www.http4k.org/ •Spring Boot https://spring.io/projects/spring-boot •Ktor, http4k は、Pure Kotlin, Lightweight • 全部⼊りがほしければ、やっぱり Spring Boot ? • Kotlin で Spring を快適に使うには ? from Komparing Kotlin Server Frameworks
  • 8. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 Kotlin Web フレームワーク⽐較 •Swagger, Micrometer, Zipkin (Tracing) が使いたい! • http4k, Spring Boot •Coroutine (Non-blocking, Asynchronous API) が使いたい! • Ktor は JetBrains 謹製なのでもちろん対応 • Spring も Unofficial support がある (for webflux) •(個⼈的には) Ktor のこれからの成⻑に期待 • それまでは、Spring でもいいかなぁ?
  • 9. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 http4k val app = routes(     "bob" bind GET to { Response(OK).body("you GET bob") },     "rita" bind POST to { Response(OK).body("you POST rita") },     "sue" bind DELETE to { Response(OK).body("you DELETE sue") } ) val server = app.asServer(SunHttp(8000)).start() Ktor embeddedServer(Netty, 8080) { routing { get("/") { call.respondText("Hello, world!", ContentType.Text.Html) } } }.start(wait = true) Server as a Function
  • 10. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 Spring Boot を Kotlin で快適に使うには… •SpringFu, KoFu を使って Functional!! DSL!! (ただし incubating feature) • やっぱり Spring 使いたいですよね • https://github.com/spring-projects/spring-fu •Annotation を多⽤した Configuration, Bean registration は⿊魔術に近い • 何が起きているのかわからない、辿れない • 解決策としての Functional configuration with Kotlin DSL で明⽰的な Configuration を実現 • 上記のプレゼンでは、Live coding で1つづつアノテーションを削っていく実演 from Kotlin and Spring Boot, a Match Made in Heaven
  • 11. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 SpringFu, KoFu のサンプル https://github.com/ajavageek/springfunctional-migration @SpringBootApplication class MigrationDemoApplication fun main(args: Array<String>) { runApplication<MigrationDemoApplication>(*args) } @RestController class PersonController(private val personRepository: PersonRepository) { @GetMapping("/person") fun readAll() = personRepository.findAll() @GetMapping("/person/{id}") fun readOne(@PathVariable id: Long) = personRepository.findById(id) } interface PersonRepository : PagingAndSortingRepository<Person, Long>
  • 12. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 val beans = beans { bean<PersonHandler>() bean<PersonRepository>() } val app = application { import(beans) server { import(::routes) codecs { jackson() } } mongodb { embedded() } } SpringFu, KoFu のサンプル fun routes(handler: PersonHandler) = router { "/person".nest { GET("/{id}", handler::readOne) GET("/", handler::readAll) } } fun main(args: Array<String>) { app.run(args) } https://github.com/ajavageek/springfunctional-migration
  • 13. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 API / Microservices •REST に否定的(?)なトークがいくつかあった • Painless Microservices with Kotlin • GraphQL Powered by Kotlin •REST (JSON over HTTP) のイケてないところ • 型がない、スキーマが曖昧、パースに CPU を多く消費する • 乗り換え先は? • GraphQL (for external), gRPC (for internal) 弊社だと Thrift
  • 14. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 API / Microservices •Kubanetes Kotlin DSL •https://github.com/fkorotkov/k8s-kotlin-dsl from Painless Microservices with Kotlin
  • 15. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 API / Microservices •分散 Tracing の話を、思ったよりちらほら聞いた • https://opentracing.io/ https://zipkin.io/ • 国内で Opentracing, Zipkin をあまり使っている話は聞いたことないのだけど… • 弊社で勉強会やったけど⼈の集まりが悪かったけど… • https://line.connpass.com/event/86639/ •Microservices 特有の分散トレーシング • ちゃんとフレームワーク⽐較のところでも取り上げられて、⽐較されていた • マイクロサービスを使うなら、ぜひ導⼊しておきたい
  • 16. LINE スタンプショップにおける zipkin 利⽤事例 ユーザー token 認証 Product 情報取得 Ownership 情報取得 getProduct() API の例
  • 17. KotlinConf 2018 から⾒る最近の Kotlin サーバーサイド事情 Kotlin/Native の可能性 •Kotlin/Native はサーバーサイドでも使えるようになるのか? • 上記の Kotlin/Native の発表を⾒た限り、Concurrency 周りが難しそう • GC や Safe concurrency を実現するための、オブジェクトの扱いが難しそう • Pure Kotlin の Ktor あたりが Native をちゃんとサポートしてくれれば…? • いずれにしても、JVM 系のライブラリは⼀切は使えない • 今後に期待 • 現状、特に Server-less な利⽤法では、Kotlin/JVM は Startup time の問題から厳しい • サーバーレスで使いたいなら、GraalVM の⽅に期待したほうが良さそう? from Kotlin/Native Concurrency Model