Your SlideShare is downloading. ×
0
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Server Side Kotlin
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Server Side Kotlin

357

Published on

第三回かわいいKotlin勉強会の資料です

第三回かわいいKotlin勉強会の資料です

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
357
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Server Side Kotlin Kotlin Webフレームワークの現状 第3回 かわいいKotlin勉強会 #jkug @yy_yank
  • 2. 自己紹介 こいつです ・vimmerなのに サクラエディタアイコン ・小物SIer ・JavaとKotlinが好き ヤンク(@yy_yank)
  • 3. ・関西Kotlin勉強会参加(2014/09) ・Kotlinアドベントカレンダー2014とか書いた ・逆引きKotlinというサイトを作った ・twitterでKotlinで検索して巡回(毎日) 僕のKotlin活動
  • 4. What is Server Side?
  • 5. ・Client Side <-> Server Side ・Http (Get,Post,Put,Delete...) ・MVC 2.0 ・Component ・REST ・Servlet ・Apache Stru… What is Server Side?
  • 6. Web Frameworkの話 をしよう
  • 7. ・KotlinのWebフレームワーク ・JavaのWebフレームワークとかも考える ・まとめ Agenda
  • 8. KotlinのWebフレーム ワーク、いくつ知って ますか?
  • 9. ・Kara ・wasabi ・Node.kt ・Kool ・vertx-kotlin Kotlin製のWebフレームワーク
  • 10. ・Kara ・wasabi ・Node.kt ・Kool ・vertx-kotlin Kotlin製のWebフレームワーク
  • 11. ・Kara ・wasabi ・Node.kt 6 months ago ・Kool 3 years ago ・vertx-kotlin 3 years ago Kotlin製のWebフレームワーク
  • 12. 誰も保守しない オレオレフレーム ワークやない か!!!
  • 13. ・GitHubでKotlinを検索すると、 3 years agoとか2 years agoが多い ・我々は今を生きている Kotlin製のWebフレームワーク
  • 14. ・Kara ・wasabi ・Node.kt 実質はこの3つ
  • 15. ・Kara ・wasabi ・Node.kt Kotlin製のWebフレームワーク①
  • 16. ・名前通りNode.jsの模倣的なもの ・ベースはNetty ・Node.ktは割とActiveな方だが 大体wasabiで同等の機能が網羅されている ・独自にベーシック認証や暗号化復号化機能を 持っているぐらい Node.ktは正直微妙
  • 17. 何が微妙かってソース が汚い
  • 18. Node.ktは正直微妙 fun listen(port: Int? = null) { var aPort = port; if (aPort == null) { aPort = get("port") as Int } if (aPort == null) { throw IllegalStateException("hogehoge")
  • 19. Node.ktは正直微妙 fun listen(port: Int? = null) { var aPort = port; if (aPort == null) { aPort = get("port") as Int } if (aPort == null) { throw IllegalStateException("hogehoge") デフォルト値 がnull 2回目のnull チェック 変数使いまわ して代入
  • 20. しぶい
  • 21. せめてこうとか… fun listen(port: Int?) { var aPort = port ?: get("port")?.toInt() if (aPort == null) throw IllegalStateException("hogehoge") }
  • 22. ・Kara ・wasabi ・Node.kt Kotlin製のWebフレームワーク②
  • 23. ・JetBrainsのHadi Haririのプロジェクト ・Http FrameWork(らしい) ・ベースはNetty ・Interceptorが優秀 ・ModelやViewは含まれず、かなり軽量 ・WebSocketにも対応したっぽい? wasabi
  • 24. ・Nettyのアップ/ダウンストリームに合わせ てライフ・サイクルが形成されている PreRequest PreExecusion PostExecusion PostRequest Error wasabi
  • 25. server.get("/", { val log = Log() log.info("URI requested is${request.uri}") next() },{ response.send("Hello World!") } ) wasabi
  • 26. server.get("/", { val log = Log() log.info("URI requested is${request.uri}") next() },{ response.send("Hello World!") } ) wasabi ルーティング
  • 27. server.get("/", { val log = Log() log.info("URI requested is${request.uri}") next() },{ response.send("Hello World!") } ) wasabi Requestの 処理
  • 28. server.get("/", { val log = Log() log.info("URI requested is${request.uri}") next() },{ response.send("Hello World!") } ) wasabi Response の処理
  • 29. ・逆引きKotlinをwasabiで作ってみました(宣 伝) Html + bootstrap + wasabiという感じ https://github.com/yyYank/kotlin-rev- solution-wasabi wasabi
  • 30. ・Kara ・wasabi ・Node.kt Kotlin製のWebフレームワーク③
  • 31. ・TinyMissionというアメリカのミネソタ州の Webサービスとモバイル系の会社が開発開始 ・(M)VCフレームワーク ・全てが.ktになる(htmlもcssもロジックも) ・Jetty + kootstrap(bootstrapのKotlin版) + Kotlin製Htmlテンプレートエンジン Kara
  • 32. ( ˘⊖˘) 。o(ん、待てよ …?)
  • 33. JetBrains JetBrains JetBrains JetBrains JetBrains TinyMission
  • 34. _人人人人人人人人人人_ > ほとんどJetBrains <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
  • 35. ‘’Currently, it is actively developed by JetBrains, the company behind Kotlin.‘’ Kara ・現在Karaを引っ張っているのは JetBrains
  • 36. ( ˘⊖˘) 。o(あんしん)
  • 37. Get("/test") class Test() : Request({ TextResult("This is a test action, yo") }) Get("/crash") class Crash() : Request({ error("This resource crashes") }) Karaのルーティング
  • 38. Get("/test") class Test() : Request({ TextResult("This is a test action, yo") }) Get("/crash") class Crash() : Request({ error("This resource crashes") }) Karaのルーティング ルーティング
  • 39. Get("/test") class Test() : Request({ TextResult("This is a test action, yo") }) Get("/crash") class Crash() : Request({ error("This resource crashes") }) Karaのルーティング Response の処理
  • 40. Get("/test") class Test() : Request({ TextResult("This is a test action, yo") }) Get("/crash") class Crash() : Request({ error("This resource crashes") }) Karaのルーティング Viewのクラス
  • 41. table { setClass(fields) tr { td { setClass(cLabel) labelFor("title") } td { submitButton("Submit") } } } } KaraのView
  • 42. table { setClass(fields) tr { td { setClass(cLabel) labelFor("title") } td { submitButton("Submit") } } } } KaraのViewのメリット ・タグの対応が簡単 ・もちろん静的型付け →書き間違いなし!!
  • 43. table { setClass(fields) tr { td { setClass(cLabel) labelFor("title") } td { submitButton("Submit") } } } } KaraのViewのデメリット デザイナーさんとの分 業とかだとちょっと覚 えてもらう必要がある …。
  • 44. table(fields) { td { padding = box(6.px, 3.px) } td.c(cLabel) { textAlign = TextAlign.right } td(cLabel, top) { verticalAlign = VerticalAlign.top } KaraのCSS
  • 45. なぜ、Kotlinライブラ リとして、vert.xや node.jsライクにやろ うとするのか
  • 46. ・ルーティング処理などの関数の引数として関 数渡しをするようなシグネチャが作りやすい ->必然的にnode.jsのような書き方になる 関数リテラルと相性が良い
  • 47. inline fun HtmlBodyTag.table(contents: TABLE.() -> Unit) = contentTag(TABLE(this), contents) 大体こういう感じ
  • 48. inline fun HtmlBodyTag.table(contents: TABLE.() -> Unit) = contentTag(TABLE(this), contents) 大体こういう感じ
  • 49. ・ライブラリ実装 TABLE.() -> Unit ・使う側 table { } 大体こういう感じ
  • 50. その他も考える
  • 51. ・Spring Boot ・JAX-RS(JSR339) ・MVC 1.0(JSR371) JavaのWebフレームワーク
  • 52. ・Spring Boot ・JAX-RS(JSR339) ・MVC 1.0(JSR371) JavaのWebフレームワーク①
  • 53. ・やってみた 【Kotlin】KotlinでもJava EE 8 の MVC1.0(Ozark)は動くよ ・結構辛さあった MVC1.0(JSR371)
  • 54. ・Spring Boot ・JAX-RS(JSR339) ・MVC 1.0(JSR371) JavaのWebフレームワーク②
  • 55. ・うらがみ(backpaper0)さんがやってた KotlinでJAX-RS + おまけ ・あんまりJavaと変わらなかった JAX-RS(JSR339)
  • 56. ・Spring Boot ・JAX-RS(JSR339) ・MVC 1.0(JSR371) JavaのWebフレームワーク③
  • 57. ・しおしお(@_siosio_)さんがやってた KotlinでSpring Bootしてみた ・Hadi Haririもやってた Creating a RESTful Web Service with Spring Boot ・地味に辛さあるけどまあまあ Spring Boot
  • 58. ・Java EEはJavaで使ったほうが良い ・使うとしたらSpring Bootかも知れない JavaのWebFW with Kotlin?
  • 59. ・Karaの低レイヤな部分が参考になりやすいの でそれをベースに作ってみるのも良いかも -> HttpServletを継承してその上にApplication クラスを上乗せするような形 情報の受け渡しはApplicationContextがやって いる様子 自分でつくるから安心!負担は増える! オレオレWebフレームワーク
  • 60. ・一番手厚くて今後見込みありそうなのはKara ・wasabiもすでに完成形なので使えるけどフル スタックというよりは軽量なもの ・Spring Bootもまあまあアリ ・更なるKotlinらしさを求めるならプルリクか 自作だ まとめ

×