spring + gradle + kotlin w8lt#5
TRANSCRIPT
Spring Gradle Kotlin
でWebアプリケーションを作ってみてる
W8LT#5 @ふぁっとだるま
もういらない気がしてきた
• 松田 淳平 (だるま,デブ,酒クズ) • 東工大 佐伯研M2 • Java, Kotlin,シェル芸 • twitter:@fat_daruuuuma, github:jmatsu
発端 • 某講義のページがRails1だか2で動いている • 最低限の機能しかないので不便 • 講義中小課題提出がメール • メール用の管理ツールも古い
• 今後のこと(あと数年?)も考えるとちょっと不安 → 新しいものを作るしかない (๑•`ㅂ•́)و✧
検討 • Rails4 • つまらない • 現在のサーバーを汚すのは避けたい
• Play1.x (一回作りました) • 助教氏「なんで2.xじゃないの」 • 僕「それな」
• Play2.x • sbt「ぶおおおんwwww・・・(フリーズ」 • 本当に消えて欲しい
検討(続) • Play1.xでいいやん! • バグが見つかる • 設計が汚い • Java7で書かれている(重要) • 用意した自動設定の書式を忘れた(最重要)
• 作り直すにも, • Lambdaがないとやる気になれない • Play2.xは重すぎてやる気になれない
そうだ、Kotlinにしよう
• 目的等をガン無視して手段から入る最低な発想
Kotlin • 静的型付オブジェクト指向のJVM言語 • intelliJで有名なJetBrains社が作成(現在OSS化) • Javaと相互完全運用 • Lambdaやら諸々が標準装備
7
♡
検討(続続) • あ、KotlinでPlay1.xって動くんかな!?
→ 祈りが足りず動く方法を見つけられない • KotlinでPlay2.xなら!? • Gradle → 祈りが足りず終了 • Sbt → まあ動きはしたけど重すぎ却下
• Kotlinでなんかないかな!? • 勉強会で @yy_yank さんがSSに触れてたぞ!
• http://www.slideshare.net/yyyank/server-side-kotlin-49030491
• Spring Bootが現実的っぽい?
Spring Boot • Spring frameworkの各コンポーネントを簡単に
使えるようごにょごにょしたもの • Controllerレイヤーに関するコンポーネントだけ,
とか色々選択しながら利用することが可能 • Not XML-based configuration. • Java/Annotation-based Configuration!
9
♡
つまり
10
♡
♡
11
♡
じゃなくて
12
♡
13
♡
14
♡接着剤
要件(?)を全て満たしている(???) • Rails4
• つまらない → 楽しい!
• 現在のサーバーを汚すのは避けたい → one jarなので汚れない!
• Play1.x (一回作りました) • 助教氏「なんで2.xじゃないの
→ この議論が不要!!! • 僕「それな」
→ それな • Play2.x
• sbt「ぶおおおんwwww・・・(フリーズ」 → Gradleなので問題ない(?)
• 本当に消えて欲しい → 使わない!
利用物 • Controller layer • Spring Boot Starter(SBS) Web
• Model layer • mongoDB via SBS
• View layer • Thymeleaf via SBS
• Security component • SBS Security
16
構築は超簡単 • Gradleでひな形を作成 • Kotlinの設定 • Kotlin pluginを追加 • compileにKotlinのstdlibを追加
• Spring Bootの設定 • Spring Boot pluginを追加 • compileに必要なコンポーネントを追加 • springBoot内でmainClassを記述
• 以上.一瞬で終わる.下は最小構成 • https://github.com/jmatsu/SpringBootWithKotlinSample
17
つまずいた点 • KotlinのIntやStringがSerializableじゃない • このままじゃmodelのIDに使えない!!
• ネット情報「Converterってのがあってな?」 • 僕「Configクラスで追加すればええんやな?」
• Configクラスでinjectionがエラーになる orz • @Value(“${spring.data.mongodb.database}”)
• Kotlinだと変数展開と判定 → CE • Raw stringにしても無理
• ラップして回避 • E.g. data class SInt(body: Int): Serializable
18
Spring Boot w/ Kotlinの利点 • Null安全 && Let等による構造化が強すぎる • API部分で冗長になりがちな記述に対して良い • スコープが制限されるのでレイヤー違反を減らし
やすい • Accessorが生えるので,PropertyはViewから
そのままアクセス可能 • import A as B が神すぎてヤバい
19
Spring Boot w/ Kotlinの欠点 • View側ではKotlinは使えない • Javaから呼び出すときの記法に従う必要がある
• そのままじゃ拡張メソッドは使えない • Kotlin部分はHotDeployできない・・・ • 拡張メソッドを使える余地が大きすぎる • 各自が勝手に拡張するとひどいことになりそう • Android開発時よりも,冗長な部分の解決策が広
そうな感触
20
課題 • 有用性は大いにあるけど,HotDeployがないのは
つらい • 現状の規模ならビルドは十分に早いけども
• Webフレームワーク用Kotlinライブラリが必要 • Kotlin人口 • はよAndroid界の標準になって欲しいな!!!1
21