SlideShare a Scribd company logo
1 of 91
SpringBoot + Kotlin
劇的ビフォーアフター
@orekyuu
自己紹介
• @orekyuu
• 京都コンピュータ学院 情報科学科4回生
• IDEはIntelliJ IDEAが好き
_人人人人人人人人人_
> 突然の宗教戦争 <
 ̄Y^Y^Y^Y^Y^Y^Y^Y ̄
KotlinはAndroid
だけじゃないぞ!
そんな話
この会場でKotlin
を使っている方
会場の10割くらいを想定
KotlinをAndroid
で使っている方
Kotlinを使ってる方の8割を想定
KotlinをAndroid
以外でも使っている方
SpringInitializerのLanguageで
Kotlinが選べるようになった!
( っ’ω’c)ほう……
( っ’ω’c)悪くない……
( っ’ω’c)うごいた!
( っ’ω’c)これからは
Kotlinだ!
とはならないよね?
動いたけど・・・
• DIとKotlinって相性悪そう
• JavaのフレームワークでKotlin使うの怖い
• 落とし穴多そう
( ^q^)Kotlin+SpringBootのう
まくいかない所探すぞ〜〜
〜
( ^q^)DIどうすんのよ
@Inject
private var hoge: Hoge? = null
▂▅▇█▓▒░(’ω’)░▒▓█▇▅▂
うわあああああああああ
@Inject
private var hoge: Hoge? = null
nullableになっているのがダサい
値分かりきってるのに
書きたくない
解決策
lateinitを使おう
@Inject
private lateinit var hoge: Hoge
KotlinはDIのことも
ちゃんと考えられている
!
( っ’ω’c)ええやん
NEXT
( ^q^)JRebel使える?
JRebelとは
アプリを再起動せず
コードの変更を反映
できるやつ
DEMO
結論: 問題なく動く
NEXT
( ^q^)AOP大丈夫なの?
試してみた
( っ’ω’c)実行!
( ^q^)…
( ^q^)……
( ^q^)???
動いてない
Kotlinでは
finalがデフォルト
openにすれば
動く
NEXT
@Bean
値を返すだけなら
fun hoge() = 式
と書ける
( っ’ω’c)ええやん
( っ’ω’c)oh…
Configuration problem:
@Bean method ‘hogeService'
must not be private or final;
change the method's
modifiers to continue
訳: openにしろや
ハマリポイント
まとめ
基本的に
openにする/しない
に気をつければ良さそう
???「わざわざKotlin
使う意味あるの?」
Kotlinを使って
嬉しいところ
CASE 1
POJO
Kotlinのフィールドには
getter/setterが
生えてくる
class User {
private String id;
private String name;
public User() {}
public User(String id, String name){…}
(getter/setterが続く…)
}
class User(
var id: String = “”,
var name: String = “”
)
getter/setter👋
CASE 2
nullの扱い
Javaでは
nullへの対策
どうしてますか?
JSR-305
@Nonnull
@Nullable
@Nullable
public String hoge(
@Nonnull String str1,
@Nullable String str2) {
}
fun hoge(
str1: String,
str2: String?): String?
アノテーション書いてって
言っても書かない人出てく
る💢
Kotlinなら大丈夫👏
Annotation👋
ハマリポイント+資料の少なさ
VS
Kotlinを使うメリット
天秤にかけて
どっちに傾くか
僕はKotlinに
傾きました
JavaからKotlinに
移行中です
用法用量を守って
正しく使いましょう
よかったら
声かけてください
_人人人人人人_
> 質問とか <
 ̄Y^Y^Y^Y^Y ̄

More Related Content

What's hot

Kotlinソースコード探訪
Kotlinソースコード探訪Kotlinソースコード探訪
Kotlinソースコード探訪yy yank
 
KotlinつかってQiitaクライアント作った時の話
KotlinつかってQiitaクライアント作った時の話KotlinつかってQiitaクライアント作った時の話
KotlinつかってQiitaクライアント作った時の話shinnosuke kugimiya
 
KotlinAndroidLibを使ってみた
KotlinAndroidLibを使ってみたKotlinAndroidLibを使ってみた
KotlinAndroidLibを使ってみた豊明 尾古
 
Kotlinで快適Android開発 #W8lt
Kotlinで快適Android開発 #W8ltKotlinで快適Android開発 #W8lt
Kotlinで快適Android開発 #W8ltJunpei Matsuda
 
言語設計者が意味論を書くときに考えていたこと
言語設計者が意味論を書くときに考えていたこと言語設計者が意味論を書くときに考えていたこと
言語設計者が意味論を書くときに考えていたことTaku Miyakawa
 
コルーチンの実装について
コルーチンの実装についてコルーチンの実装について
コルーチンの実装についてTaku Miyakawa
 
LL Ring Recursive ライトニングトーク
LL Ring Recursive ライトニングトークLL Ring Recursive ライトニングトーク
LL Ring Recursive ライトニングトークRyuichi Ueda
 
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介豊明 尾古
 
LDDによるWebアプリケーション開発
LDDによるWebアプリケーション開発LDDによるWebアプリケーション開発
LDDによるWebアプリケーション開発Munenori Sugimura
 
Pythonによる4足歩行ロボットの制御と強化学習による歩行動作獲得の実例 #pyconjp
 Pythonによる4足歩行ロボットの制御と強化学習による歩行動作獲得の実例 #pyconjp Pythonによる4足歩行ロボットの制御と強化学習による歩行動作獲得の実例 #pyconjp
Pythonによる4足歩行ロボットの制御と強化学習による歩行動作獲得の実例 #pyconjpHideyuki TAKEI
 
Play meetup 2 2015.07.05
Play meetup 2 2015.07.05Play meetup 2 2015.07.05
Play meetup 2 2015.07.05Junichi Okamura
 
イベント駆動とノンブロッキング #hokkaidopm
イベント駆動とノンブロッキング #hokkaidopmイベント駆動とノンブロッキング #hokkaidopm
イベント駆動とノンブロッキング #hokkaidopm鉄次 尾形
 
かわいいKotlinでAndroidアプリをつくろう
かわいいKotlinでAndroidアプリをつくろうかわいいKotlinでAndroidアプリをつくろう
かわいいKotlinでAndroidアプリをつくろうgyro_s
 
今年作ったもの2013 #hokkaidopm
今年作ったもの2013 #hokkaidopm今年作ったもの2013 #hokkaidopm
今年作ったもの2013 #hokkaidopm鉄次 尾形
 
IT業界における伝統芸能の継承 #hachiojipm
IT業界における伝統芸能の継承 #hachiojipmIT業界における伝統芸能の継承 #hachiojipm
IT業界における伝統芸能の継承 #hachiojipm鉄次 尾形
 
140120_innovation WS_robot meets ife
140120_innovation WS_robot meets ife140120_innovation WS_robot meets ife
140120_innovation WS_robot meets ifeTaketo Mogi
 
ランダムにおちるfeature_system spec対策rspec-retry_ex の 紹介
ランダムにおちるfeature_system spec対策rspec-retry_ex の 紹介ランダムにおちるfeature_system spec対策rspec-retry_ex の 紹介
ランダムにおちるfeature_system spec対策rspec-retry_ex の 紹介Yuya Taki
 

What's hot (20)

Kotlinソースコード探訪
Kotlinソースコード探訪Kotlinソースコード探訪
Kotlinソースコード探訪
 
KotlinつかってQiitaクライアント作った時の話
KotlinつかってQiitaクライアント作った時の話KotlinつかってQiitaクライアント作った時の話
KotlinつかってQiitaクライアント作った時の話
 
Kotlinにお触り
Kotlinにお触りKotlinにお触り
Kotlinにお触り
 
KotlinAndroidLibを使ってみた
KotlinAndroidLibを使ってみたKotlinAndroidLibを使ってみた
KotlinAndroidLibを使ってみた
 
Kotlinで快適Android開発 #W8lt
Kotlinで快適Android開発 #W8ltKotlinで快適Android開発 #W8lt
Kotlinで快適Android開発 #W8lt
 
言語設計者が意味論を書くときに考えていたこと
言語設計者が意味論を書くときに考えていたこと言語設計者が意味論を書くときに考えていたこと
言語設計者が意味論を書くときに考えていたこと
 
NDS36 Kotlin Cute
NDS36 Kotlin CuteNDS36 Kotlin Cute
NDS36 Kotlin Cute
 
コルーチンの実装について
コルーチンの実装についてコルーチンの実装について
コルーチンの実装について
 
LL Ring Recursive ライトニングトーク
LL Ring Recursive ライトニングトークLL Ring Recursive ライトニングトーク
LL Ring Recursive ライトニングトーク
 
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
 
Kotlinの紹介
Kotlinの紹介Kotlinの紹介
Kotlinの紹介
 
LDDによるWebアプリケーション開発
LDDによるWebアプリケーション開発LDDによるWebアプリケーション開発
LDDによるWebアプリケーション開発
 
Pythonによる4足歩行ロボットの制御と強化学習による歩行動作獲得の実例 #pyconjp
 Pythonによる4足歩行ロボットの制御と強化学習による歩行動作獲得の実例 #pyconjp Pythonによる4足歩行ロボットの制御と強化学習による歩行動作獲得の実例 #pyconjp
Pythonによる4足歩行ロボットの制御と強化学習による歩行動作獲得の実例 #pyconjp
 
Play meetup 2 2015.07.05
Play meetup 2 2015.07.05Play meetup 2 2015.07.05
Play meetup 2 2015.07.05
 
イベント駆動とノンブロッキング #hokkaidopm
イベント駆動とノンブロッキング #hokkaidopmイベント駆動とノンブロッキング #hokkaidopm
イベント駆動とノンブロッキング #hokkaidopm
 
かわいいKotlinでAndroidアプリをつくろう
かわいいKotlinでAndroidアプリをつくろうかわいいKotlinでAndroidアプリをつくろう
かわいいKotlinでAndroidアプリをつくろう
 
今年作ったもの2013 #hokkaidopm
今年作ったもの2013 #hokkaidopm今年作ったもの2013 #hokkaidopm
今年作ったもの2013 #hokkaidopm
 
IT業界における伝統芸能の継承 #hachiojipm
IT業界における伝統芸能の継承 #hachiojipmIT業界における伝統芸能の継承 #hachiojipm
IT業界における伝統芸能の継承 #hachiojipm
 
140120_innovation WS_robot meets ife
140120_innovation WS_robot meets ife140120_innovation WS_robot meets ife
140120_innovation WS_robot meets ife
 
ランダムにおちるfeature_system spec対策rspec-retry_ex の 紹介
ランダムにおちるfeature_system spec対策rspec-retry_ex の 紹介ランダムにおちるfeature_system spec対策rspec-retry_ex の 紹介
ランダムにおちるfeature_system spec対策rspec-retry_ex の 紹介
 

Spring boot劇的ビフォーアフター

Editor's Notes

  1. @orekyuuです 京都駅の近くにある専門学校に通っています IDEはIntelliJ IDEA
  2. SpringInitializerの言語選択でKotlinが選べるようになりました!