Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Ktorコトハジメ
Search
Takehata Naoto
November 29, 2018
Technology
0
1.3k
Ktorコトハジメ
2018年11月29日(木) 筋肉.ktの発表資料です。
Takehata Naoto
November 29, 2018
Tweet
Share
More Decks by Takehata Naoto
See All by Takehata Naoto
KotlinConf 2025で発表された言語のアップデートと現地参加レポート
n_takehata
2
88
KotlinConf 2025 現地で感じたServer-Side Kotlin
n_takehata
2
330
KotlinConf 2025 現地参加の土産話
n_takehata
0
150
組織貢献をするフリーランスエンジニアという生き方
n_takehata
1
4.3k
「2024年版 Kotlin サーバーサイドプログラミング実践開発」の補講 〜O/Rマッパー編〜
n_takehata
2
720
2024年版 Kotlin サーバーサイドプログラミング実践開発
n_takehata
8
6.3k
Server-Side目線で見る、Kotlin Festの楽しみ方
n_takehata
0
500
KotlinとCloud Vision APIで領収書の電子帳簿保存法対応をする
n_takehata
1
1.7k
KotlinConf 2023 現地参加レポート
n_takehata
1
370
Other Decks in Technology
See All in Technology
開発者を支える Internal Developer Portal のイマとコレカラ / To-day and To-morrow of Internal Developer Portals: Supporting Developers
aoto
PRO
1
480
MagicPod導入から半年、オープンロジQAチームで実際にやったこと
tjoko
0
110
複数サービスを支えるマルチテナント型Batch MLプラットフォーム
lycorptech_jp
PRO
1
980
LLMを搭載したプロダクトの品質保証の模索と学び
qa
1
1.1k
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
10
75k
職種の壁を溶かして開発サイクルを高速に回す~情報透明性と職種越境から考えるAIフレンドリーな職種間連携~
daitasu
0
190
OCI Oracle Database Services新機能アップデート(2025/06-2025/08)
oracle4engineer
PRO
0
180
サラリーマンの小遣いで作るtoCサービス - Cloudflare Workersでスケールする開発戦略
shinaps
2
470
Apache Spark もくもく会
taka_aki
0
140
【NoMapsTECH 2025】AI Edge Computing Workshop
akit37
0
230
AI時代を生き抜くエンジニアキャリアの築き方 (AI-Native 時代、エンジニアという道は 「最大の挑戦の場」となる) / Building an Engineering Career to Thrive in the Age of AI (In the AI-Native Era, the Path of Engineering Becomes the Ultimate Arena of Challenge)
jeongjaesoon
0
260
KotlinConf 2025_イベントレポート
sony
1
140
Featured
See All Featured
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
The Language of Interfaces
destraynor
161
25k
The Art of Programming - Codeland 2020
erikaheidi
56
13k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
3k
Practical Orchestrator
shlominoach
190
11k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Making the Leap to Tech Lead
cromwellryan
135
9.5k
RailsConf 2023
tenderlove
30
1.2k
Agile that works and the tools we love
rasmusluckow
330
21k
Building Applications with DynamoDB
mza
96
6.6k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
810
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製フレームワーク触るの楽しい(気持ちの問題)
今後選択肢に入れていきたい
ご清聴ありがとうございました