Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Re: ゼロから始めるサーバー サイドKotlin ● toliner
Slide 2
Slide 2 text
About me ● トリナー @toliner_ (Twitter), @toliner (GitHub) ● justInCase(@justInCaseHoken)でKotlin書くバイトやってます ● ♥ Windows 10, JetBrains IDE, Kotlin, ASUS, Firefox ● ゲーム: R6S, Apex, Factorio, Arknights, SINoALICE, etc…
Slide 3
Slide 3 text
About me
Slide 4
Slide 4 text
質問等について ● 質問 -> ZoomのQ&A機能を使って質問して下さい ● 感想・意見等 -> できればTwitterで#kc3_2020を付けてツイートし てください。(Zoomのチャットでも良いです)
Slide 5
Slide 5 text
お品書き ● Kotlin入門 ○ IntelliJ IDEAでのプロジェクト作成 ○ Kotlin文法 ● サーバーサイドKotlin ○ フレームワーク・ライブラリ等 ○ 簡単なプロジェクトを作ってみる
Slide 6
Slide 6 text
Kotlin 入門
Slide 7
Slide 7 text
IntelliJ IDEAでのプロジェクト作成
Slide 8
Slide 8 text
Kotlin文法 お品書き ● 基本構文 ○ 関数・変数 ○ 制御構文 ○ クラス ● 応用構文 ○ ラムダ式 ○ 拡張関数 ○ コルーチン
Slide 9
Slide 9 text
Kotlin 基本文法 – Hello World!
Slide 10
Slide 10 text
Kotlin 基本文法 – Hello World!
Slide 11
Slide 11 text
Kotlin 基本文法 – Hello World!
Slide 12
Slide 12 text
Kotlin 基本文法 – Hello World!
Slide 13
Slide 13 text
Kotlin 基本文法 – 関数 ● Kotlinはクラス外(パッケージレベル、トップレベル)に変数・関数を 記述可能。 ● Kotlinの関数は fun 名前(引数): 返り値の型 {} という形で記述する ○ Kotlinにおいて、型定義は全て後置 ● 何も返さない場合、返り値にはUnitという型を用いる ○ Javaのvoid相当 ○ 返り値の型がUnitの場合、省略可能
Slide 14
Slide 14 text
Kotlin 基本文法 – 関数 例1
Slide 15
Slide 15 text
Kotlin 基本文法 – 関数 ● 1行で終わる関数(return文のみの関数)は{}とreturnを省略して=を用 いて記述できる。 ● =を用いる場合は型推論が働くので返り値の型は省略可能 ● Javaのvoidと違い、Unitは値なので=の後にUnitを返す関数を利用 可能
Slide 16
Slide 16 text
Kotlin 基本文法 – 関数 例2
Slide 17
Slide 17 text
Kotlin 基本文法 – 関数 ● Kotlinの関数では、デフォルト引数という物が指定できる。 ● デフォルト引数が存在する場合、呼び出し側はその引数を省略する 事ができる。 ● デフォルト引数は引数の型の後に= 値 という形で記述する
Slide 18
Slide 18 text
Kotlin 基本文法 – 関数 例3
Slide 19
Slide 19 text
Kotlin 基本文法 – 変数 ● 変数の宣言には、valとvarを用いる。 ○ valは再代入不可、varは再代入可。 ● val 変数名: 型 = 初期化式 の様に記述する。 ○ 特別な場合を除き、変数は必ず宣言時に初期化しなければなら ない。 ● 多くの場合、変数の型宣言は省略する事ができる。
Slide 20
Slide 20 text
Kotlin 基本文法 – 変数 例
Slide 21
Slide 21 text
Kotlin 基本文法 – 制御構文 ● Kotlinに存在する制御構文はif式, when式, for文, while文の4つ。 ● forは少し特殊で、CやJavaスタイルのforは存在しない。 ○ JavaやC#におけるfor-each構文に相当する物のみ。 ● Ifとwhenは式なので、値を返す事ができる。
Slide 22
Slide 22 text
Kotlin 基本文法 – 制御構文 例1
Slide 23
Slide 23 text
Kotlin 基本文法 – 制御構文 例2
Slide 24
Slide 24 text
Kotlin 基本文法 – クラス ● 基本的にはJavaと似ているが、コンストラクター周りが特殊 ● プライマリコンストラクターはinit {}という形で宣言する ● セカンダリーコンストラクターは constructor(引数): 別のコンスト ラクター() という形で書ける。 ● なお、Kotlinでコンストラクタを書くことは稀である。 ● Kotlinにおいて、クラスのフィールドをプロパティと呼ぶ。 ○ プロパティはJavaのフィールドと異なる性質を持つ。
Slide 25
Slide 25 text
Kotlin 基本文法 – クラス - プロパティ ● Kotlinにおけるプロパティは、Javaのフィールド + Setter/Getter の組み合わせである。 ○ C#のプロパティに近い。 ● カスタムSetter/Getter, プロパティの委譲, 委譲を用いての遅延初 期化等ができる。 ● クラスのプライマリーコンストラクタでプロパティを宣言できる。
Slide 26
Slide 26 text
Kotlin 基本文法 – クラス 例
Slide 27
Slide 27 text
Kotlin 応用構文 – ラムダ式 ● Kotlinにおいて、関数は第一級オブジェクとして扱われる。 ○ つまり、Int等のプリミティブ(っぽい)型や、ユーザー定義型の オブジェクトと同等に扱える。 ○ 具体的には、関数に対する関数呼び出しや、関数を引数に取る 関数、関数を返す関数、関数のプロパティ等を作れる。 ● 「関数オブジェクト」を作成する構文がラムダ式。
Slide 28
Slide 28 text
Kotlinの応用構文 – ラムダ式 ● 関数もオブジェクトとして扱えるから、当然型が必要である。 ● 関数を表すインターフェースとして、Kfunctionという物が存在す る ○ 主な用途はリフレクション ● 関数の型は (引数リスト) -> 返り値の型 という形で記述できる。 ○ 引数部分の名前の指定の有無は自由
Slide 29
Slide 29 text
Kotlinの応用構文 – ラムダ式 ● ラムダ式自体は、 { 引数リスト -> 中身 } という形で記述する。 ● ラムダ式においては、関数とは異なり最後の式の値が返り値として 扱われる ○ returnは不要。微妙に分かりづらい事がある。 ● 引数が1つの場合、引数リストは省略可能 ○ その場合、引数の名前はitとなる。
Slide 30
Slide 30 text
Kotlinの応用構文 – ラムダ式 ● 関数を引数に取る関数を呼び出す場合、主にラムダ式を用いて引数 を与える。 ○ 別な関数や関数型のプロパティに対する参照を渡す事もできる。 ● 関数の引数にラムダ式を用いる場合、その引数が最後の引数なら、 関数の引数リスト()の後ろにラムダ式を記述する事ができる。 ○ 文字で説明しても分かりにくいので例を参照
Slide 31
Slide 31 text
Kotlinの応用構文 – ラムダ式 例
Slide 32
Slide 32 text
Kotlinの応用構文 – 拡張関数 ● Kotlinには、拡張関数という、クラスに対して外部から関数を生や す機能がある。 ● 生やされたクラスのオブジェクトをレシーバーと呼ぶ。 ● 拡張関数はコンパイルされるとレシーバーを第一引数にとる関数に 変換される。 ○ そのため、privateなプロパティ等にはアクセスできない。 ● 頑張れば拡張プロパティも生やせる。
Slide 33
Slide 33 text
Kotlinの応用構文 – 拡張関数 ● 拡張関数は fun レシーバーの型.名前(引数リスト): 返り値の型 とい う形で記述できる。 ● 拡張関数にも当然型は存在する。 ○ レシーバーの型.(引数リスト) -> 返り値の型 という形で記述 ● 拡張関数の拡張関数の拡張関数の拡張関数なんていうアホな物も作 れる
Slide 34
Slide 34 text
Kotlinの応用構文 – 拡張関数
Slide 35
Slide 35 text
Kotlinの応用構文 – コルーチン ● 非同期処理を軽量に行うための仕組み ○ 言語仕様として導入されているのはsuspend関数のみで、ほと んどの実装はkotlinx.coroutinesというライブラリに存在。 ● 簡単な仕組みとしては、中断可能な関数を作り、スレッドプール内 で順番に動かしてる感じ。 ● JVM実装の場合は、JSの非同期処理とは異なりちゃんとマルチスレ ッドで動く。
Slide 36
Slide 36 text
Kotlinの応用構文 – コルーチン ● コルーチンの詳細説明は長くなるので割愛します。 ● 非同期処理である事と、以下の事のみ覚えてくれれば大丈夫 ● コルーチンで非同期処理をする関数は、suspend修飾子を付けなけ ればならない。 ● Suspend修飾子が付いた関数をsuspend関数と呼ぶ。 ● 通常の関数内でsuspend関数は呼べない。 ● Suspend関数内で通常の関数とsuspend関数は両方呼べる。 ● Suspendのラムダ式も作れる(引数リストの前にsuspendと書く)
Slide 37
Slide 37 text
サーバーサイドKotlin
Slide 38
Slide 38 text
サーバーサイドKotlin ● フレームワーク・ライブラリ等 ○ サーバーサイドのフレームワークについて ○ Kotlinのサーバーサイドフレームワーク ○ その他のライブラリ ● 簡単なプロジェクトの作成 ○ セットアップ ○ 簡単なHttpリクエストを処理する
Slide 39
Slide 39 text
サーバーサイドのフレームワークについて ● Httpの処理は面倒くさい。 ○ TCP通信とか面倒だし、非同期にやろうとするとかなり難しい ● そのため、Http通信部分やルーティング、パラメーターのパース等 を行うフレームワークが色々生まれる。 ● JavaのServletも一種のフレームワークだし、Http通信のみを行う 低レベルのフレームワークやそれをラップした高レベルなフレーム ワークなんかも存在する
Slide 40
Slide 40 text
Kotlinのサーバーサイドフレームワーク ● Spring/Spring Boot ○ Javaでも有名で人気なフレームワーク。Kotlin用の拡張モジュ ールが存在。 ● Ktor ○ 実質Kotlin公式のフレームワーク。 ● Http4K ○ Ktorの対抗馬っぽいサードパーティーのフレームワーク。某ベ ンチマークの性能ではKtorより上。
Slide 41
Slide 41 text
Kotlinのサーバーサイドフレームワーク ● 今回はKtorを採用 ● Kotlin公式のフレームワークである ● 一番書きやすく読みやすい(主観) ● バイト先で使ってるので慣れ親しんでる
Slide 42
Slide 42 text
その他のライブラリ ● kotlinx.serialization ○ Kotlin公式の汎用データシリアライズライブラリ。Jsonは標準 対応。
Slide 43
Slide 43 text
プロジェクトのセットアップ ● build.gradle.ktsを編集してリロードしてしばらく待てばGradleと IntelliJが勝手にやってくれます。
Slide 44
Slide 44 text
build.gradle.kts
Slide 45
Slide 45 text
Ktorの使い方 ● Ktorはマイクロフレームワークで、基礎では最小限の機能しか無い。 ● 様々なFeatureをinstall()する事で機能を追加していく。 ● src/main/resourcesにapplication.confという設定ファイルが必要 ○ 主にKtorのエンジンに関する設定を行う ● 主要なWebフレームワークとしての機能は組み込みでFeatureが存 在したり、Ktor公式でモジュールが存在してたりする
Slide 46
Slide 46 text
application.conf
Slide 47
Slide 47 text
Main.kt
Slide 48
Slide 48 text
単純なテキストを返してみる
Slide 49
Slide 49 text
単純なテキストを返してみる ● ルーティングはHttpメソッド名の関数を用いる ● ApplicationCallというインターフェースがClientからのリクエスト やServerからのレスポンスを司る ● call.respond○○系の関数でレスポンスを返す
Slide 50
Slide 50 text
単純なテキストを返してみる
Slide 51
Slide 51 text
単純なテキストを返してみる
Slide 52
Slide 52 text
簡単なHTMLを返してみる
Slide 53
Slide 53 text
簡単なHTMLを返してみる ● call.respondHTML: KotlinでHTMLを記述し、その結果を返す関数 ● Kotlinx.htmlというライブラリがあり、HTMLのタグに相当する関 数を呼び出す事でHTMLを記述する事ができる。 ● 型安全でかつ補完が効くので、HTML初心者にもやさしい!
Slide 54
Slide 54 text
簡単なHTMLを返してみる
Slide 55
Slide 55 text
Jsonの入力を受けてJsonを返してみる
Slide 56
Slide 56 text
Jsonの入力を受けてJsonを返してみる ● call.receive()を用いて、入力を様々な形で受け取る事ができる。 ○ 今回はContentNegotiation Featureをinstallしているので、そ れを用いてjsonをオブジェクトのデコードしている。 ● call.respondText()でjsonのContentTypeを指定し、返す値は kotlinx.serializationsを用いてjsonにエンコードする。
Slide 57
Slide 57 text
Jsonの入力を受けてJsonを返してみる
Slide 58
Slide 58 text
Jsonの入力を受けてJsonを返してみる
Slide 59
Slide 59 text
Ktor.io
Slide 60
Slide 60 text
Kotlin & Ktor最高! みんなでサーバーサイドで 遊ぼう
Slide 61
Slide 61 text
ご清聴ありがとうございました
Slide 62
Slide 62 text
おまけ ● FPS(R6S, Apex)やる人募集してます。 ○ https://discord.gg/NaXA2tS ● Factorio, Craftopia等やる人とKotlinプログラマー募集してます。 ○ https://discord.gg/TGXYqA4