Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ポストRailsとしてのKotlin + Spring Boot #m3kt
Search
Kenta Suzuki
November 22, 2017
Technology
4
2.2k
ポストRailsとしてのKotlin + Spring Boot #m3kt
どこでもKotlin #4 〜秋のLT大会 その弐〜
https://m3-engineer.connpass.com/event/70561/
Kenta Suzuki
November 22, 2017
Tweet
Share
More Decks by Kenta Suzuki
See All by Kenta Suzuki
レガシーアプリケーションのリニューアルにNuxt.jsで戦う #vuefes_reject
suusan2go
9
21k
rescue されない例外?! / A Exception not rescue #megurorb
suusan2go
0
2.9k
Rails サービスクラス再考 / have a rethink on Rails service class
suusan2go
8
11k
フロントエンドエンジニアも知っておきたいgRPC
suusan2go
18
11k
Flutterでアプリ作ってる話
suusan2go
2
3k
Nuxt.js + TypeScript = Great!
suusan2go
8
42k
gRPC on Spring Boot
suusan2go
0
3k
ずっとRubyをやっていたエンジニアがGoに入門して挫折して再挑戦した話
suusan2go
2
5.3k
非SPAなRailsアプリでレールに乗りつつReactを使う話
suusan2go
6
7.8k
Other Decks in Technology
See All in Technology
ZOZOのAI活用実践〜社内基盤からサービス応用まで〜
zozotech
PRO
0
220
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
2
5.5k
関係性が駆動するアジャイル──GPTに人格を与えたら、対話を通してふりかえりを習慣化できた話
mhlyc
0
130
PLaMoの事後学習を支える技術 / PFN LLMセミナー
pfn
PRO
9
4k
カンファレンスに託児サポートがあるということ / Having Childcare Support at Conferences
nobu09
1
410
英語は話せません!それでも海外チームと信頼関係を作るため、対話を重ねた2ヶ月間のまなび
niioka_97
0
130
Findy Team+のSOC2取得までの道のり
rvirus0817
0
490
ACA でMAGI システムを社内で展開しようとした話
mappie_kochi
1
300
オープンソースでどこまでできる?フォーマル検証チャレンジ
msyksphinz
0
120
動画データのポテンシャルを引き出す! Databricks と AI活用への奮闘記(現在進行形)
databricksjapan
0
160
生成AIで「お客様の声」を ストーリーに変える 新潮流「Generative ETL」
ishikawa_satoru
1
350
JAZUG 15周年記念 × JAT「AI Agent開発者必見:"今"のOracle技術で拡張するAzure × OCIの共存アーキテクチャ」
shisyu_gaku
0
130
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
We Have a Design System, Now What?
morganepeng
53
7.8k
For a Future-Friendly Web
brad_frost
180
9.9k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
54
3k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
Optimizing for Happiness
mojombo
379
70k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
850
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Writing Fast Ruby
sferik
629
62k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Transcript
Copyright © 2017 M3, Inc. All Rights Reserved ポストRailsとしての Kotlin
+ Spring Boot #m3kt どこでもKotlin #4 @suusan2go
自己紹介 鈴木健太 (@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から固く作れる別アプリケーションにしていく構成は結構アリなので は?
型のある何か
None
None
よさそう
でもRailsエンジニアが Kotlinとか本当にやれる の?
やって みた
Gistっぽい何かGyst(仮)構成 • バックエンドはSpringBoot • フロントはVue.jsのSPA • 休日の夜をつかって2ヶ月くらい(学習込み) REST swagger-codegenで APIクライアント自動生成
DEMO https://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 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}
if式 Ruby Kotlin val job = if (name == "taro")
{ "エバンジェリスト" } else { "エンジニア" } job = if name == "taro" "エバンジェリスト" else "エンジニア" end
拡張関数 Ruby Kotlin fun Int.print(): Unit = println(this) 1.print() class
Integer def print; puts self; end end 1.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 + Spring Bootの開発体験は結構良い!
• Railsをフロント・SpringBootをバックエンドとする 構成は結構アリな気がする
One More Thing
Kotlin + Spring Boot + gRPC な新プロジェクトが進行中! JOIN US! GateWay