Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Server Side Kotlin

12,093 views

Published on

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

Published in: Technology

Server Side Kotlin

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

×