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
Ktorコトハジメ
Search
Takehata Naoto
November 29, 2018
Technology
1.4k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Ktorコトハジメ
2018年11月29日(木) 筋肉.ktの発表資料です。
Takehata Naoto
November 29, 2018
More Decks by Takehata Naoto
See All by Takehata Naoto
Kotlinの15年とServer-Side Kotlin
n_takehata
1
170
AI時代でも変わらない技術コミュニティの力~10年続く“ゆるい”つながりが生み出す価値
n_takehata
2
1.5k
KotlinConf 2025で発表された言語のアップデートと現地参加レポート
n_takehata
2
440
KotlinConf 2025 現地で感じたServer-Side Kotlin
n_takehata
2
530
KotlinConf 2025 現地参加の土産話
n_takehata
0
240
組織貢献をするフリーランスエンジニアという生き方
n_takehata
1
7k
「2024年版 Kotlin サーバーサイドプログラミング実践開発」の補講 〜O/Rマッパー編〜
n_takehata
2
860
2024年版 Kotlin サーバーサイドプログラミング実践開発
n_takehata
9
9.3k
Server-Side目線で見る、Kotlin Festの楽しみ方
n_takehata
0
690
Other Decks in Technology
See All in Technology
クラウドサインを止めずに Nuxt へ 次の10年のために先に決めたこと
bengo4com
1
150
Gemini Intelligence 入門 ― AppFunctions と Gemini Nano
takuroabe
0
370
契約で守るコンパウンドプロダクトのデザインシステム
yug1224
1
1.4k
DevelopersIO 2026 Tokyo 現時点の衛星通信サービスの現状を整理してみる
maroon1st
0
310
QAエンジニアがSoutherを使ってみたの〜10分でわかるSouther〜
mhlyc
0
120
Temporal 最高!でも改めて「日付」について調べたら人類の負債すぎる件
riyaamemiya
0
230
ドメインエキスパートは いかにして AI を使って プロダクト開発をするか
tatsuyashiraishi
1
190
正解のない研修に放り出されて / Being thrown into a training program with no right answers
ohnoeight
1
150
AWSセキュリティで活用するAI機能
cmusudakeisuke
1
300
How we choose session proposals
kawaguti
PRO
0
170
AIで選択肢が広がった組織設計の理想と現実
konifar
12
4.8k
構造で守らせる データ・法務・セキュリティ・開発チームとつくる AI時代のデータガバナンスとデータ基盤のリアル
legalontechnologies
PRO
1
510
Featured
See All Featured
Faster Mobile Websites
deanohume
310
32k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Fireside Chat
paigeccino
43
4.1k
From π to Pie charts
rasagy
1
410
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
740
Visualization
eitanlees
153
17k
Believing is Seeing
oripsolob
1
250
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.1k
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
900
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Transcript
Ktorコトハジメ 2018年11月29日 筋肉.kt 竹端 尚人
自己紹介
概要 氏名:竹端 尚人 Twitter:@n_takehata 株式会社アプリボット所属 ・サーバーサイドKotlin ・スマートフォンゲーム開発 ・エンジニアは11年ほど ・元公務員
筋肉について • 週2でランニング(水曜日は帰宅ラン) • 女の子には「いい体」とよく言われる
アジェンダ 1.Ktorとは? 2.REST APIを作ってみる 3.認証を入れてみる 4.その他のできること 5.まとめと感想
1.Ktorとは?
Kotlin製のWeb?フレームワーク 先日バージョン1.0がリリース
今週も話題に Kotlin用フレームワーク「Ktor 1.0」正式リリース。 非同期処理に対応したWebサーバとマルチプ ラットフォームなクライアントの開発に対応 https://www.publickey1.jp/blog/18/ kotlinktor_10web.html
特徴 ・非同期処理を容易に実装できる ・Netty、Jetty、Tomcatなどのサーブレットエンジ ンに対応 ・JSONシリアライゼーション、ユーザ認証をはじ めとした様々な標準機能を搭載 ・「ケイター」と読む
人の名前みたい けいた
サーバーサイドKotlinのフレームワークといえば • 現状はSpringほぼ一択 • Javaでのシェアが圧倒的に高い上、フレームワーク側もKotlin 対応を始めている • 多機能ですごくいいフレームワーク
でもKotlin製使いたい
ということでKtor触ってみました
2.REST APIを作ってみる
手順はブログに書いてるので参考にしてください Ktorはどう使う? https://www.takehata-engineer.com/entry/how-about-using-ktor
最初のAPI
IntelliJ IDEAのKtorプラグインが楽 Ktorプロジェクトを作ればGradleの設定とか諸々やってくれる
Hello World! fun main(args: Array<String>): Unit = io.ktor.server.netty.EngineMain.main(args) fun Application.module()
{ routing { get("/") { call.respondText("Hello World!") } } } ①メイン関数でNettyサーバーの起動 ① ② ③ ③routingブロックでルーティングしていわゆるController的な処理を書く ②Application.module()が実行されるAPIとかが入る単位
JSONを使う
gradleへの設定追加 dependencies { compile "io.ktor:ktor-jackson:$ktor_version" } KtorのJacksonモジュールの依存関係を追加
install install(ContentNegotiation) { jackson { // ここに設定を書ける } } installブロックで追加するKtorモジュールや設定を記述する
routing routing { get("/json") { call.respond(mapOf("status" to "OK")) } }
call.respondでレスポンスを返却すればJsonになる
• 使いたい機能に応じてinstallブロックを書き、設定を記述する • 機能を使いたい時は、gradleへの依存関係の追加、installで設定等を 追加するのが基本
APIの実装
Request、Response // リクエスト data class SampleRequest(val id: Int) // レスポンス
data class SampleResponse(val id: Int, val name: String) ただのデータクラス(Swaggerとかで作れるやつで問題なし)
routing post("/json") { val request = call.receive<SampleRequest>() val response =
SampleResponse(request.id, "ktor") call.respond(response) } call.receive<リクエストの型>()でJSONのリクエストを受け取る
これだけ
3.認証を入れてみる
Basic認証の実装
install install(Authentication) { basic { validate { if (it.name ==
"user" && it.password == "password") UserIdPrincipal("name") else null } } } ① ①Basic認証を有効化 ② ②validateブロックで認証のチェック、セッション情報のセット(UserIdPrincipalのとこ)
routing authenticate { get("/auth") { call.respondText("Authenticated!!") } } authenticateブロックで囲われたAPIにアクセスすると、Basic認証が走る
セッション情報の利用
module authenticate { get("/auth") { val user = call.authentication.principal<UserIdPrincipal>() call.respondText(user!!.name)
} } Call.authentication.principal<Principalの型>でセッションに保持している ユーザー情報を取得できる
Principal data class User(val id: Int, val name: String) :
Principal io.ktor.auth.Principalを実装していればPrincipalとして使える
4.その他のできること
• OAuth • Http Client • WebSockets • 非同期通信 •
Autoreload • 実行可能Jar • Logging etc… 今回触れなかった機能たち
とりあえず色々できる
5.まとめと感想
• 導入は割と簡単 • 動作が軽量 • 標準機能だけでWebサービス作れそうなくらいの機能はある • Kotlin製フレームワーク触るの楽しい(気持ちの問題)
今後選択肢に入れていきたい
ご清聴ありがとうございました