Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
KC3「Re: ゼロから始めるサーバーサイドKotlin」
Search
トリナー
September 06, 2020
Programming
200
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
KC3「Re: ゼロから始めるサーバーサイドKotlin」
KC3 2020で発表した「Re: ゼロから始めるサーバーサイドKotlin」のスライドです。
トリナー
September 06, 2020
More Decks by トリナー
See All by トリナー
AWS CDKのKotlinラッパーを作った話
toliner
1
640
Other Decks in Programming
See All in Programming
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
200
Family mrubyの進捗
kishima
1
130
setup-vp GitLab対応の裏側
naokihaba
0
120
iOSDC Japan 2026 - Swiftで作って学ぼう!データベース自作入門
kaseken
2
340
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
3.4k
SREの越境 / SRE Collaboration
y0hgi
2
280
巨大モノリシックアプリ モダン化大作戦
ktcryomm
1
1.1k
新卒PdEのリアル
ryu1013
1
510
Snowflakeで業務アプリを作ろう。 Snowflakeのアプリ機能解説&実践ガイド
ayumu_yamaguchi
2
300
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
210
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
5
4.5k
SONY CISC-NEWS NWS-1750 + NWB-225 フレームバッファの NetBSD/news68k ドライバ実装 / OSC2026Hiroshima
tsutsui
0
150
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
290
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
340
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
260
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
880
Prompt Engineering for Job Search
mfonobong
0
460
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Designing for humans not robots
tammielis
254
26k
Automating Front-end Workflow
addyosmani
1369
210k
Transcript
Re: ゼロから始めるサーバー サイドKotlin • toliner
About me • トリナー @toliner_ (Twitter), @toliner (GitHub) • justInCase(@justInCaseHoken)でKotlin書くバイトやってます
• ♥ Windows 10, JetBrains IDE, Kotlin, ASUS, Firefox • ゲーム: R6S, Apex, Factorio, Arknights, SINoALICE, etc…
About me
質問等について • 質問 -> ZoomのQ&A機能を使って質問して下さい • 感想・意見等 -> できればTwitterで#kc3_2020を付けてツイートし てください。(Zoomのチャットでも良いです)
お品書き • Kotlin入門 ◦ IntelliJ IDEAでのプロジェクト作成 ◦ Kotlin文法 • サーバーサイドKotlin
◦ フレームワーク・ライブラリ等 ◦ 簡単なプロジェクトを作ってみる
Kotlin 入門
IntelliJ IDEAでのプロジェクト作成
Kotlin文法 お品書き • 基本構文 ◦ 関数・変数 ◦ 制御構文 ◦ クラス
• 応用構文 ◦ ラムダ式 ◦ 拡張関数 ◦ コルーチン
Kotlin 基本文法 – Hello World!
Kotlin 基本文法 – Hello World!
Kotlin 基本文法 – Hello World!
Kotlin 基本文法 – Hello World!
Kotlin 基本文法 – 関数 • Kotlinはクラス外(パッケージレベル、トップレベル)に変数・関数を 記述可能。 • Kotlinの関数は fun
名前(引数): 返り値の型 {} という形で記述する ◦ Kotlinにおいて、型定義は全て後置 • 何も返さない場合、返り値にはUnitという型を用いる ◦ Javaのvoid相当 ◦ 返り値の型がUnitの場合、省略可能
Kotlin 基本文法 – 関数 例1
Kotlin 基本文法 – 関数 • 1行で終わる関数(return文のみの関数)は{}とreturnを省略して=を用 いて記述できる。 • =を用いる場合は型推論が働くので返り値の型は省略可能 •
Javaのvoidと違い、Unitは値なので=の後にUnitを返す関数を利用 可能
Kotlin 基本文法 – 関数 例2
Kotlin 基本文法 – 関数 • Kotlinの関数では、デフォルト引数という物が指定できる。 • デフォルト引数が存在する場合、呼び出し側はその引数を省略する 事ができる。 •
デフォルト引数は引数の型の後に= 値 という形で記述する
Kotlin 基本文法 – 関数 例3
Kotlin 基本文法 – 変数 • 変数の宣言には、valとvarを用いる。 ◦ valは再代入不可、varは再代入可。 • val
変数名: 型 = 初期化式 の様に記述する。 ◦ 特別な場合を除き、変数は必ず宣言時に初期化しなければなら ない。 • 多くの場合、変数の型宣言は省略する事ができる。
Kotlin 基本文法 – 変数 例
Kotlin 基本文法 – 制御構文 • Kotlinに存在する制御構文はif式, when式, for文, while文の4つ。 •
forは少し特殊で、CやJavaスタイルのforは存在しない。 ◦ JavaやC#におけるfor-each構文に相当する物のみ。 • Ifとwhenは式なので、値を返す事ができる。
Kotlin 基本文法 – 制御構文 例1
Kotlin 基本文法 – 制御構文 例2
Kotlin 基本文法 – クラス • 基本的にはJavaと似ているが、コンストラクター周りが特殊 • プライマリコンストラクターはinit {}という形で宣言する •
セカンダリーコンストラクターは constructor(引数): 別のコンスト ラクター() という形で書ける。 • なお、Kotlinでコンストラクタを書くことは稀である。 • Kotlinにおいて、クラスのフィールドをプロパティと呼ぶ。 ◦ プロパティはJavaのフィールドと異なる性質を持つ。
Kotlin 基本文法 – クラス - プロパティ • Kotlinにおけるプロパティは、Javaのフィールド + Setter/Getter
の組み合わせである。 ◦ C#のプロパティに近い。 • カスタムSetter/Getter, プロパティの委譲, 委譲を用いての遅延初 期化等ができる。 • クラスのプライマリーコンストラクタでプロパティを宣言できる。
Kotlin 基本文法 – クラス 例
Kotlin 応用構文 – ラムダ式 • Kotlinにおいて、関数は第一級オブジェクとして扱われる。 ◦ つまり、Int等のプリミティブ(っぽい)型や、ユーザー定義型の オブジェクトと同等に扱える。 ◦
具体的には、関数に対する関数呼び出しや、関数を引数に取る 関数、関数を返す関数、関数のプロパティ等を作れる。 • 「関数オブジェクト」を作成する構文がラムダ式。
Kotlinの応用構文 – ラムダ式 • 関数もオブジェクトとして扱えるから、当然型が必要である。 • 関数を表すインターフェースとして、Kfunctionという物が存在す る ◦ 主な用途はリフレクション
• 関数の型は (引数リスト) -> 返り値の型 という形で記述できる。 ◦ 引数部分の名前の指定の有無は自由
Kotlinの応用構文 – ラムダ式 • ラムダ式自体は、 { 引数リスト -> 中身 }
という形で記述する。 • ラムダ式においては、関数とは異なり最後の式の値が返り値として 扱われる ◦ returnは不要。微妙に分かりづらい事がある。 • 引数が1つの場合、引数リストは省略可能 ◦ その場合、引数の名前はitとなる。
Kotlinの応用構文 – ラムダ式 • 関数を引数に取る関数を呼び出す場合、主にラムダ式を用いて引数 を与える。 ◦ 別な関数や関数型のプロパティに対する参照を渡す事もできる。 • 関数の引数にラムダ式を用いる場合、その引数が最後の引数なら、
関数の引数リスト()の後ろにラムダ式を記述する事ができる。 ◦ 文字で説明しても分かりにくいので例を参照
Kotlinの応用構文 – ラムダ式 例
Kotlinの応用構文 – 拡張関数 • Kotlinには、拡張関数という、クラスに対して外部から関数を生や す機能がある。 • 生やされたクラスのオブジェクトをレシーバーと呼ぶ。 • 拡張関数はコンパイルされるとレシーバーを第一引数にとる関数に
変換される。 ◦ そのため、privateなプロパティ等にはアクセスできない。 • 頑張れば拡張プロパティも生やせる。
Kotlinの応用構文 – 拡張関数 • 拡張関数は fun レシーバーの型.名前(引数リスト): 返り値の型 とい う形で記述できる。
• 拡張関数にも当然型は存在する。 ◦ レシーバーの型.(引数リスト) -> 返り値の型 という形で記述 • 拡張関数の拡張関数の拡張関数の拡張関数なんていうアホな物も作 れる
Kotlinの応用構文 – 拡張関数
Kotlinの応用構文 – コルーチン • 非同期処理を軽量に行うための仕組み ◦ 言語仕様として導入されているのはsuspend関数のみで、ほと んどの実装はkotlinx.coroutinesというライブラリに存在。 • 簡単な仕組みとしては、中断可能な関数を作り、スレッドプール内
で順番に動かしてる感じ。 • JVM実装の場合は、JSの非同期処理とは異なりちゃんとマルチスレ ッドで動く。
Kotlinの応用構文 – コルーチン • コルーチンの詳細説明は長くなるので割愛します。 • 非同期処理である事と、以下の事のみ覚えてくれれば大丈夫 • コルーチンで非同期処理をする関数は、suspend修飾子を付けなけ ればならない。
• Suspend修飾子が付いた関数をsuspend関数と呼ぶ。 • 通常の関数内でsuspend関数は呼べない。 • Suspend関数内で通常の関数とsuspend関数は両方呼べる。 • Suspendのラムダ式も作れる(引数リストの前にsuspendと書く)
サーバーサイドKotlin
サーバーサイドKotlin • フレームワーク・ライブラリ等 ◦ サーバーサイドのフレームワークについて ◦ Kotlinのサーバーサイドフレームワーク ◦ その他のライブラリ •
簡単なプロジェクトの作成 ◦ セットアップ ◦ 簡単なHttpリクエストを処理する
サーバーサイドのフレームワークについて • Httpの処理は面倒くさい。 ◦ TCP通信とか面倒だし、非同期にやろうとするとかなり難しい • そのため、Http通信部分やルーティング、パラメーターのパース等 を行うフレームワークが色々生まれる。 • JavaのServletも一種のフレームワークだし、Http通信のみを行う
低レベルのフレームワークやそれをラップした高レベルなフレーム ワークなんかも存在する
Kotlinのサーバーサイドフレームワーク • Spring/Spring Boot ◦ Javaでも有名で人気なフレームワーク。Kotlin用の拡張モジュ ールが存在。 • Ktor ◦
実質Kotlin公式のフレームワーク。 • Http4K ◦ Ktorの対抗馬っぽいサードパーティーのフレームワーク。某ベ ンチマークの性能ではKtorより上。
Kotlinのサーバーサイドフレームワーク • 今回はKtorを採用 • Kotlin公式のフレームワークである • 一番書きやすく読みやすい(主観) • バイト先で使ってるので慣れ親しんでる
その他のライブラリ • kotlinx.serialization ◦ Kotlin公式の汎用データシリアライズライブラリ。Jsonは標準 対応。
プロジェクトのセットアップ • build.gradle.ktsを編集してリロードしてしばらく待てばGradleと IntelliJが勝手にやってくれます。
build.gradle.kts
Ktorの使い方 • Ktorはマイクロフレームワークで、基礎では最小限の機能しか無い。 • 様々なFeatureをinstall()する事で機能を追加していく。 • src/main/resourcesにapplication.confという設定ファイルが必要 ◦ 主にKtorのエンジンに関する設定を行う •
主要なWebフレームワークとしての機能は組み込みでFeatureが存 在したり、Ktor公式でモジュールが存在してたりする
application.conf
Main.kt
単純なテキストを返してみる
単純なテキストを返してみる • ルーティングはHttpメソッド名の関数を用いる • ApplicationCallというインターフェースがClientからのリクエスト やServerからのレスポンスを司る • call.respond◦◦系の関数でレスポンスを返す
単純なテキストを返してみる
単純なテキストを返してみる
簡単なHTMLを返してみる
簡単なHTMLを返してみる • call.respondHTML: KotlinでHTMLを記述し、その結果を返す関数 • Kotlinx.htmlというライブラリがあり、HTMLのタグに相当する関 数を呼び出す事でHTMLを記述する事ができる。 • 型安全でかつ補完が効くので、HTML初心者にもやさしい!
簡単なHTMLを返してみる
Jsonの入力を受けてJsonを返してみる
Jsonの入力を受けてJsonを返してみる • call.receive()を用いて、入力を様々な形で受け取る事ができる。 ◦ 今回はContentNegotiation Featureをinstallしているので、そ れを用いてjsonをオブジェクトのデコードしている。 • call.respondText()でjsonのContentTypeを指定し、返す値は kotlinx.serializationsを用いてjsonにエンコードする。
Jsonの入力を受けてJsonを返してみる
Jsonの入力を受けてJsonを返してみる
Ktor.io
Kotlin & Ktor最高! みんなでサーバーサイドで 遊ぼう
ご清聴ありがとうございました
おまけ • FPS(R6S, Apex)やる人募集してます。 ◦ https://discord.gg/NaXA2tS • Factorio, Craftopia等やる人とKotlinプログラマー募集してます。 ◦
https://discord.gg/TGXYqA4