昨日(2月20日)JJUG ナイトセミナー「Kotlin(ことりん)」に行ってきた!ので、その内容をメモメモ
■クラスの作り方に見るKotlinの表現力
・Kotlin入門
・Kotlinとは
JVM言語(すからー、ぐるーびーとかのなかま)
androidもサポート
JetBrainsが開発(IntelliJ IDEAを開発している)
2011年に発表され、2016年2月にVer1.0(1.1もうじきでそう)
静的型付け
簡潔安全Javaとの相互運用
・Hello World
package sample
fun main(args: Array<String>){
if(args.isEmpty())return
val name=args[0]
println("うつせなかった・・ここまでしか");
}
・自己紹介
Kotolinスタートブック
・もくじ
有理数(分数)
片方向リストのノード
・題材その1:有理数を表現するクラス
有理数クラス:Rational
プロパティ
分子
分母
・クラス定義
// プライマリコンストラクタ
class Rational(val numerator : Int,
val denominator: Int)
//使い方
fun main(args:Array<String>){
// newと書かなくても生成
val half = Rational(1,2)
// getter setterが書かないでもいい
printf(half.denominator)
}
・オーバーライド
class Rational(val numerator : Int,
val denominator: Int){
//オーバーライドのとき
// overrideのことば必須
override fun toString():String
= "${numerator}/$(denominator}"
//式が評価された文字列内に展開
// ストリングテンプレート
}
・イニシャライザイー
不正なものを生成させない
init{
require・・・・
}
・非公開メソッド private fun
・if elseは、式(値を返す)
・末尾再帰の場合、tailrecとかくと、最適化可能
→スタックオーバーフローなくなる
・非公開プロパティ
valとかかないと、非公開プロパティ
class Rational(numerator : Int,
denominator: Int){
・演算子オーバーロード Operator
plus +演算子を使ったメソッド呼び出し
→ユーザー定義クラスにも
・2 * Rational(2,5)
→拡張関数
operator fun Int.times
・題材その2片方向リストのノード
プロパティ
値 value
次のノードへのポインタ next
・抽象クラス
//共変指定
abstract class Node<out T>{
abstruct val value:T
abstruct val next:Node<T>
}
・継承してノードを表現
・シングルトンオブジェクト object
クラスとは違う
Nothing あらゆる型のサブタイプ
・リストを作れる!
・コンパニオンオブジェクト
スタティックな宣言に近い
・呼び出し時に引数が省略されるとデフォルト値が使用される
・通常の抽象クラスは見える人なら継承OK
・クラスの前にsealedとつけると、外側にいる人は継承できない
・ノード数プロパティsize
再帰呼び出しで計算
when式:switchの強い版
・委譲プロパティによる遅延初期化
byのあとにかく
■spark Framework with kotlin
・自己紹介
サーバーエージェントのFresh!(動画配信プラットフォーム)について
マイクロサービス
フルDocker
AWSのEC2コンテナ(ECS)
主にGo
・GoとFRESH
1個のサービス、1個のコンテナ 1個のリポジトリ
十数個のマイクロサービス
・つらくなってきた
→基本的に筋力に頼る言語:書く量多い
生産性を挙げる:コード生成
→新たな基軸言語を求めた
・マイクロサービス:言語変えられる
ミドル、低レイヤはGo
新たに1つの基軸言語(乱立はいけない→学習コスト)
・Kotlinを選択
API実装の基軸言語として
新しいマイクロサービスは基本ことりんで
・選んだ理由
モダンな文法
IDE(IntelliJ IDEA)
一番現実的
社内リソース(JVM系人材、Androidでの実績)
・助走期間
サービスをKotlinで
SpringBoot
Springfox
domaframework
感想
生産性高い
そこそこの学習コスト
もうちょっと薄いものでいいかもしれない?
モノリシックなサービスを作るわけではない
・Spark Framework
小規模Javaフレームワーク
Java8ベースのマイクロWebフレームワーク
Apache Sparkとは別物
ラムダ式
DIない
・Spark Framework With Kotlin
ラムダ式では満足できない
SparkFrameworkとことりんのよさ
相性の悪さ、迷いはあまりない
・Spark With Kotlin
コントローラー・ルーティング
フィルター(横断的関心ごと)
レスポンストランスフォーまー(JSON)
データクラス
拡張関数
Guice(DI):Google
愚直なDI(とばす)
okhttp
hystrix
メトリクス
・コントローラー
package io.stormcat.controller
import spark.*
class EchoController{
val echo = Route{ req,res ->
"Hello・・・・
・ルーティングmainからgetで
・Filter
handleをオーバーライドする
mainメソッドで定義 after
→around的なものがない
・レスポンストランスフォーマー
どのように整形するか
jacksonのkotlinモジュール
dataclassをサポート
・data class
Javaだと入れ物定義
echoの返すところ EchoResultを作って返す
JSONにシリアライズ
・拡張関数
リクエストに対して、authUser
beforeでユーザーオブジェクト取ってきて
拡張関数の仕組みを使うと、メソッドに
・じゅーす
SparkにDIのしくみない→DIほしい
GuiceでDIを利用
コンストラクタインジェクション
・愚直なDI
Guiceのインジェクター
・okhttp
マイクロサービス間の通信
ことりんのでーたくらすにでしりあらいず
・Hystrix
ネットフリックスがつくっている
分散システムにおいて、回復力のアルアーキテクチャを実現するライブラリ
サーキットブレーカーをサポート
・サーキットブレーカー
どこかがダウン→ダウンしたところにリクエスト→タイムアウト→連鎖的におかしくなる
コレを防ぐ
閾値超えたらアクセス遮断
ダッシュボード
・Hystrix Command
をいれていく
・メトリクス(Jolokia じょろきあ)
Dockerビルドの際にいれておいて、とれるようにする
・FrashにおけるSparkとKotlin
公開APIとして本番稼動
・まとめ
Spark+ことりんは現実的な選択肢
マイクロサービス:シンプルなもの
サーバーサイドことりんの波は少しずつきている
Kotlin気持ちいい
■Spring はーとまーく Kotlin
・自己紹介
・今日のお話
SpringBootをKotlinで
Spring5で入っているKotlinサポート
・せばすちゃんの受け売り
・SpringBootをKotlin
Spring Initializr
→IDEも裏でコレたたいている
デフォルトでJava
→スイッチ フルバージョン
→言語Kotlin選択できる
・MVCコントローラー
・DIコンテナーに管理してもらいたい
Javaconfig
ことりんの場合 openつけないといけない
→なぜ、Openいるの?
シングルトンオブジェクトになる
→同じインスタンス:Cglib
ことりんは、Finalを勝手に付ける
→勝手に付けなくするのがopen
→spring のopen問題
・セバスチャンが解決
springだったらfinalつけないというspringプラグイン
→JPAのプラグインも
→今はOpenいらない。
・Spring5のことりんサポート
Spring5
Java8ベースライン、Java9コンパチ
:
:
Http2サポート
Kotlinサポート
・ことりんサポート
拡張関数のサポート
Reified type parameters
・ことりんKクラス
Bar::class.java
Javaのクラスは.javaが必要
→拡張関数:もともとの関数を書き換えることなく
・Reified(らいふぁいど)type parameters
inline fun <reified T:Any> Foo.create()
ことりんらしいコード
idiomatic Kotlin code
・Reactiveサポート
今:サーブレットベース
→リアクティブランタイム(ノンブロッキング)
→Webflux
リアクティブストリーム
サーブレット3.1→Netty
いままでと同じようにサーブレット
+
ルーターファンクションモデル
SpringMVCも
・WebMVC+@Controller
→いままでどおり:ブロッキング
WebFlux+@Controller
→帰り値:ノンブロッキング、引数ちょっと変わる
WebFlux+RouterFunction in Java
ルーターファンクションはDIなしで動く
・mix-it
・そのほかのことりんサポート
本家見てね
・5.0 M5がリリースされれば、使えるはず
http://start.spring.io/#!language=kotlin
・JJUG CCC 2017 Spring
CFP募集中
■クラスの作り方に見るKotlinの表現力
・Kotlin入門
・Kotlinとは
JVM言語(すからー、ぐるーびーとかのなかま)
androidもサポート
JetBrainsが開発(IntelliJ IDEAを開発している)
2011年に発表され、2016年2月にVer1.0(1.1もうじきでそう)
静的型付け
簡潔安全Javaとの相互運用
・Hello World
package sample
fun main(args: Array<String>){
if(args.isEmpty())return
val name=args[0]
println("うつせなかった・・ここまでしか");
}
・自己紹介
Kotolinスタートブック
・もくじ
有理数(分数)
片方向リストのノード
・題材その1:有理数を表現するクラス
有理数クラス:Rational
プロパティ
分子
分母
・クラス定義
// プライマリコンストラクタ
class Rational(val numerator : Int,
val denominator: Int)
//使い方
fun main(args:Array<String>){
// newと書かなくても生成
val half = Rational(1,2)
// getter setterが書かないでもいい
printf(half.denominator)
}
・オーバーライド
class Rational(val numerator : Int,
val denominator: Int){
//オーバーライドのとき
// overrideのことば必須
override fun toString():String
= "${numerator}/$(denominator}"
//式が評価された文字列内に展開
// ストリングテンプレート
}
・イニシャライザイー
不正なものを生成させない
init{
require・・・・
}
・非公開メソッド private fun
・if elseは、式(値を返す)
・末尾再帰の場合、tailrecとかくと、最適化可能
→スタックオーバーフローなくなる
・非公開プロパティ
valとかかないと、非公開プロパティ
class Rational(numerator : Int,
denominator: Int){
・演算子オーバーロード Operator
plus +演算子を使ったメソッド呼び出し
→ユーザー定義クラスにも
・2 * Rational(2,5)
→拡張関数
operator fun Int.times
・題材その2片方向リストのノード
プロパティ
値 value
次のノードへのポインタ next
・抽象クラス
//共変指定
abstract class Node<out T>{
abstruct val value:T
abstruct val next:Node<T>
}
・継承してノードを表現
・シングルトンオブジェクト object
クラスとは違う
Nothing あらゆる型のサブタイプ
・リストを作れる!
・コンパニオンオブジェクト
スタティックな宣言に近い
・呼び出し時に引数が省略されるとデフォルト値が使用される
・通常の抽象クラスは見える人なら継承OK
・クラスの前にsealedとつけると、外側にいる人は継承できない
・ノード数プロパティsize
再帰呼び出しで計算
when式:switchの強い版
・委譲プロパティによる遅延初期化
byのあとにかく
■spark Framework with kotlin
・自己紹介
サーバーエージェントのFresh!(動画配信プラットフォーム)について
マイクロサービス
フルDocker
AWSのEC2コンテナ(ECS)
主にGo
・GoとFRESH
1個のサービス、1個のコンテナ 1個のリポジトリ
十数個のマイクロサービス
・つらくなってきた
→基本的に筋力に頼る言語:書く量多い
生産性を挙げる:コード生成
→新たな基軸言語を求めた
・マイクロサービス:言語変えられる
ミドル、低レイヤはGo
新たに1つの基軸言語(乱立はいけない→学習コスト)
・Kotlinを選択
API実装の基軸言語として
新しいマイクロサービスは基本ことりんで
・選んだ理由
モダンな文法
IDE(IntelliJ IDEA)
一番現実的
社内リソース(JVM系人材、Androidでの実績)
・助走期間
サービスをKotlinで
SpringBoot
Springfox
domaframework
感想
生産性高い
そこそこの学習コスト
もうちょっと薄いものでいいかもしれない?
モノリシックなサービスを作るわけではない
・Spark Framework
小規模Javaフレームワーク
Java8ベースのマイクロWebフレームワーク
Apache Sparkとは別物
ラムダ式
DIない
・Spark Framework With Kotlin
ラムダ式では満足できない
SparkFrameworkとことりんのよさ
相性の悪さ、迷いはあまりない
・Spark With Kotlin
コントローラー・ルーティング
フィルター(横断的関心ごと)
レスポンストランスフォーまー(JSON)
データクラス
拡張関数
Guice(DI):Google
愚直なDI(とばす)
okhttp
hystrix
メトリクス
・コントローラー
package io.stormcat.controller
import spark.*
class EchoController{
val echo = Route{ req,res ->
"Hello・・・・
・ルーティングmainからgetで
・Filter
handleをオーバーライドする
mainメソッドで定義 after
→around的なものがない
・レスポンストランスフォーマー
どのように整形するか
jacksonのkotlinモジュール
dataclassをサポート
・data class
Javaだと入れ物定義
echoの返すところ EchoResultを作って返す
JSONにシリアライズ
・拡張関数
リクエストに対して、authUser
beforeでユーザーオブジェクト取ってきて
拡張関数の仕組みを使うと、メソッドに
・じゅーす
SparkにDIのしくみない→DIほしい
GuiceでDIを利用
コンストラクタインジェクション
・愚直なDI
Guiceのインジェクター
・okhttp
マイクロサービス間の通信
ことりんのでーたくらすにでしりあらいず
・Hystrix
ネットフリックスがつくっている
分散システムにおいて、回復力のアルアーキテクチャを実現するライブラリ
サーキットブレーカーをサポート
・サーキットブレーカー
どこかがダウン→ダウンしたところにリクエスト→タイムアウト→連鎖的におかしくなる
コレを防ぐ
閾値超えたらアクセス遮断
ダッシュボード
・Hystrix Command
をいれていく
・メトリクス(Jolokia じょろきあ)
Dockerビルドの際にいれておいて、とれるようにする
・FrashにおけるSparkとKotlin
公開APIとして本番稼動
・まとめ
Spark+ことりんは現実的な選択肢
マイクロサービス:シンプルなもの
サーバーサイドことりんの波は少しずつきている
Kotlin気持ちいい
■Spring はーとまーく Kotlin
・自己紹介
・今日のお話
SpringBootをKotlinで
Spring5で入っているKotlinサポート
・せばすちゃんの受け売り
・SpringBootをKotlin
Spring Initializr
→IDEも裏でコレたたいている
デフォルトでJava
→スイッチ フルバージョン
→言語Kotlin選択できる
・MVCコントローラー
・DIコンテナーに管理してもらいたい
Javaconfig
ことりんの場合 openつけないといけない
→なぜ、Openいるの?
シングルトンオブジェクトになる
→同じインスタンス:Cglib
ことりんは、Finalを勝手に付ける
→勝手に付けなくするのがopen
→spring のopen問題
・セバスチャンが解決
springだったらfinalつけないというspringプラグイン
→JPAのプラグインも
→今はOpenいらない。
・Spring5のことりんサポート
Spring5
Java8ベースライン、Java9コンパチ
:
:
Http2サポート
Kotlinサポート
・ことりんサポート
拡張関数のサポート
Reified type parameters
・ことりんKクラス
Bar::class.java
Javaのクラスは.javaが必要
→拡張関数:もともとの関数を書き換えることなく
・Reified(らいふぁいど)type parameters
inline fun <reified T:Any> Foo.create()
ことりんらしいコード
idiomatic Kotlin code
・Reactiveサポート
今:サーブレットベース
→リアクティブランタイム(ノンブロッキング)
→Webflux
リアクティブストリーム
サーブレット3.1→Netty
いままでと同じようにサーブレット
+
ルーターファンクションモデル
SpringMVCも
・WebMVC+@Controller
→いままでどおり:ブロッキング
WebFlux+@Controller
→帰り値:ノンブロッキング、引数ちょっと変わる
WebFlux+RouterFunction in Java
ルーターファンクションはDIなしで動く
・mix-it
・そのほかのことりんサポート
本家見てね
・5.0 M5がリリースされれば、使えるはず
http://start.spring.io/#!language=kotlin
・JJUG CCC 2017 Spring
CFP募集中
ネットの削除要請代行、非弁行為と認める判決
http://news.goo.ne.jp/article/yomiuri/nation/20170220-567-OYT1T50101.html
(以下太字は上記サイトより引用)
弁護士法は、弁護士以外が報酬目的で法律事務を行うのを非弁行為として禁止している。訴訟で業者側は「サイトの通報用フォームを使って削除を依頼しただけで法律事務ではない」と主張した。
判決は「フォームの入力は男性の人格権に基づく削除請求権の行使で、サイト運営者に削除義務という法律上の効果を発生させる」と判断
とのことらしい。
http://news.goo.ne.jp/article/yomiuri/nation/20170220-567-OYT1T50101.html
(以下太字は上記サイトより引用)
弁護士法は、弁護士以外が報酬目的で法律事務を行うのを非弁行為として禁止している。訴訟で業者側は「サイトの通報用フォームを使って削除を依頼しただけで法律事務ではない」と主張した。
判決は「フォームの入力は男性の人格権に基づく削除請求権の行使で、サイト運営者に削除義務という法律上の効果を発生させる」と判断
とのことらしい。