!59
スケールのしやすさ
• IPに依存しない為、⾼速なスケールアウトが可能
• 同じServiceとして扱う場合、アクセス権限が共有できる
Service A
IP : aaa
IP : bbb
IP : ccc
IP : ddd
IP : eee
追加 追加
認証
IP : ddd
Service B
Slide 60
Slide 60 text
Appの追加
!60
VM VM
VM
VM
CF Cluster
App App
App App
App
Slide 61
Slide 61 text
Appの追加
!61
VM VM
VM
VM
CF Cluster
App App
App App
App
App
App
App
App
App
App
App
Slide 62
Slide 62 text
Appの追加
!62
VM VM
VM
VM
CF Cluster
App App
App App
App
App
App
App
App
App
App
App
!72
Sealed class
// sample.kt
sealed class Protocol{
abstract val seq
abstract val id
}
data class SampleProtocol(val seq, val id) : Protocol
同⼀ファイル内のみ継承可能
※異なるファイルから継承しようとするとコンパイルエラー
Slide 73
Slide 73 text
!73
型推論
val name = “デブサミ” // String, val name: Stringとなる
val count = 2018 // Int, val count: Intとなる
// Spring JDBCのコード例
val count: Long = jdbcTemplate.queryForObject(
“SELECT count(*) FROM user”)
左辺の型推論
Slide 74
Slide 74 text
NullSafe
!74
Slide 75
Slide 75 text
!75
Null Safe
val task: String? = null // nullable
val name: String = “okada” // non null
name.contains(“ok”) // 実⾏可能
task.contains(“ok”) // コンパイルエラー
Slide 76
Slide 76 text
制約で最低限の規律ができる
Slide 77
Slide 77 text
KotlinのFramework?
!77
どうなん?
Slide 78
Slide 78 text
!78
Framework
• 基本的にJavaのエコシステムを活⽤できる
• Spring Framework v5からKotlin Support
• SpringBootも使えるので導⼊コストも低い
• Kotlinで実装されたFWもある(Ktor, Spring Fu, etc )
• 現時点ではSpringBootが周辺ライブラリも揃っている状況
• Kotlinらしく書ける
• 動かない等は無い
• 場合によっては⾔語特有の部分で
意図しない挙動になる場合もある
!82
Kotlin support
Slide 83
Slide 83 text
public class Example {
public T create(Class clazz) {
try {
return clazz.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
}
!83
example 1
Slide 84
Slide 84 text
// Kotlin
val example = Example()
example.create(Foo::class.java)
!84
example 1
// Java
Example example = new Example()
example.create(Foo.class)
Slide 85
Slide 85 text
val example = Example()
example.create(Foo::class.java)
!85
example 1
Example example = new Example()
example.create(Foo.class)
kotlin.reflection.KClass java.lang.Class
Slide 86
Slide 86 text
import kotlin.reflect.KClass
fun Example.create(kclass: KClass) =
create(kclass.java)
val example = Example()
example.create(Foo::class)
!86
example 1
Kotlinらしい書き⽅!!
Slide 87
Slide 87 text
@Controller
class ExampleController(val foo: Foo, val bar: Bar?) {
@GetMapping(“/article”)
fun article(@RequestParam id: String,
@RequestParam tag: String?)
}
!87
example 2
オプション
必須
@RequestParam(required = false) String name