SlideShare a Scribd company logo
1 of 21
Download to read offline
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

More Related Content

Viewers also liked

Kotlinのwebフレームワーク探訪
Kotlinのwebフレームワーク探訪Kotlinのwebフレームワーク探訪
Kotlinのwebフレームワーク探訪豊明 尾古
 
Application Developer Festival 2015 LT
Application Developer Festival 2015 LTApplication Developer Festival 2015 LT
Application Developer Festival 2015 LTJunpei Matsuda
 
れれれのGitおぢさん - git rerere #w8lt
れれれのGitおぢさん - git rerere #w8ltれれれのGitおぢさん - git rerere #w8lt
れれれのGitおぢさん - git rerere #w8ltJunpei Matsuda
 
Try to Write A Better Commit Message
Try to Write A Better Commit MessageTry to Write A Better Commit Message
Try to Write A Better Commit MessageJunpei Matsuda
 
初心者大歓迎! Webアプリを作ってみよう!
初心者大歓迎!  Webアプリを作ってみよう! 初心者大歓迎!  Webアプリを作ってみよう!
初心者大歓迎! Webアプリを作ってみよう! 淳平 豊田
 
PRML2.3.8~2.5 Slides in charge
PRML2.3.8~2.5 Slides in chargePRML2.3.8~2.5 Slides in charge
PRML2.3.8~2.5 Slides in chargeJunpei Matsuda
 
Kotlinで快適Android開発 #W8lt
Kotlinで快適Android開発 #W8ltKotlinで快適Android開発 #W8lt
Kotlinで快適Android開発 #W8ltJunpei Matsuda
 
Spring starterによるSpring Boot Starter
Spring starterによるSpring Boot StarterSpring starterによるSpring Boot Starter
Spring starterによるSpring Boot StarterRyosuke Uchitate
 
Spring boot劇的ビフォーアフター
Spring boot劇的ビフォーアフターSpring boot劇的ビフォーアフター
Spring boot劇的ビフォーアフターorekyuu
 
もう一度Kotlinの話をしよう #ndsmeetup4
もう一度Kotlinの話をしよう #ndsmeetup4もう一度Kotlinの話をしよう #ndsmeetup4
もう一度Kotlinの話をしよう #ndsmeetup4Yukiya Nakagawa
 
はじめてのSpring Boot
はじめてのSpring BootはじめてのSpring Boot
はじめてのSpring Bootなべ
 
Spring Day 2016 springの現在過去未来
Spring Day 2016 springの現在過去未来Spring Day 2016 springの現在過去未来
Spring Day 2016 springの現在過去未来Yuichi Hasegawa
 
Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!
Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!
Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!Java女子部
 
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと心 谷本
 
Server Side Kotlin
Server Side KotlinServer Side Kotlin
Server Side Kotlinyy yank
 
Spring bootでweb 基本編
Spring bootでweb 基本編Spring bootでweb 基本編
Spring bootでweb 基本編なべ
 

Viewers also liked (18)

Kotlinのwebフレームワーク探訪
Kotlinのwebフレームワーク探訪Kotlinのwebフレームワーク探訪
Kotlinのwebフレームワーク探訪
 
Application Developer Festival 2015 LT
Application Developer Festival 2015 LTApplication Developer Festival 2015 LT
Application Developer Festival 2015 LT
 
れれれのGitおぢさん - git rerere #w8lt
れれれのGitおぢさん - git rerere #w8ltれれれのGitおぢさん - git rerere #w8lt
れれれのGitおぢさん - git rerere #w8lt
 
Try to Write A Better Commit Message
Try to Write A Better Commit MessageTry to Write A Better Commit Message
Try to Write A Better Commit Message
 
初心者大歓迎! Webアプリを作ってみよう!
初心者大歓迎!  Webアプリを作ってみよう! 初心者大歓迎!  Webアプリを作ってみよう!
初心者大歓迎! Webアプリを作ってみよう!
 
PRML2.3.8~2.5 Slides in charge
PRML2.3.8~2.5 Slides in chargePRML2.3.8~2.5 Slides in charge
PRML2.3.8~2.5 Slides in charge
 
Kotlinで快適Android開発 #W8lt
Kotlinで快適Android開発 #W8ltKotlinで快適Android開発 #W8lt
Kotlinで快適Android開発 #W8lt
 
Spring starterによるSpring Boot Starter
Spring starterによるSpring Boot StarterSpring starterによるSpring Boot Starter
Spring starterによるSpring Boot Starter
 
Spring boot劇的ビフォーアフター
Spring boot劇的ビフォーアフターSpring boot劇的ビフォーアフター
Spring boot劇的ビフォーアフター
 
もう一度Kotlinの話をしよう #ndsmeetup4
もう一度Kotlinの話をしよう #ndsmeetup4もう一度Kotlinの話をしよう #ndsmeetup4
もう一度Kotlinの話をしよう #ndsmeetup4
 
はじめてのSpring Boot
はじめてのSpring BootはじめてのSpring Boot
はじめてのSpring Boot
 
Spring Framework勉強会
Spring  Framework勉強会Spring  Framework勉強会
Spring Framework勉強会
 
Spring Day 2016 springの現在過去未来
Spring Day 2016 springの現在過去未来Spring Day 2016 springの現在過去未来
Spring Day 2016 springの現在過去未来
 
Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!
Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!
Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!
 
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと
 
Server Side Kotlin
Server Side KotlinServer Side Kotlin
Server Side Kotlin
 
Kotlin as an AltJS
Kotlin as an AltJSKotlin as an AltJS
Kotlin as an AltJS
 
Spring bootでweb 基本編
Spring bootでweb 基本編Spring bootでweb 基本編
Spring bootでweb 基本編
 

Recently uploaded

自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 

Recently uploaded (9)

自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 

Spring + Gradle + Kotlin W8LT#5