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
サーバーサイドKotlin/JSのフレームワークを作った話
Search
Yuta Tomiyama
October 31, 2020
Programming
0
140
サーバーサイドKotlin/JSのフレームワークを作った話
CISTLT-Zli 合同LT会2020 with Halloween にて発表
https://github.com/yt8492/indikate
Yuta Tomiyama
October 31, 2020
Tweet
Share
More Decks by Yuta Tomiyama
See All by Yuta Tomiyama
モバイルアプリ開発を始めよう!
yt8492
0
56
Git勉強会
yt8492
0
120
なんでもやってみる勇気
yt8492
0
91
Android Autoが思ったよりしんどい話
yt8492
0
210
apollo-kotlinにcontributeした話
yt8492
0
140
DMM TVのSDカードダウンロード機能を実装した話
yt8492
1
850
今だからこそ知りたいKotlin Multiplatform
yt8492
0
300
State management and API calls in Jetpack Compose: Learning Apollo + Jetpack Compose through React Hooks
yt8492
0
1.3k
サーバーフレームワークの仕組みが気になったので車輪の再発明をしてみた
yt8492
0
200
Other Decks in Programming
See All in Programming
Namespace and Its Future
tagomoris
6
710
テストカバレッジ100%を10年続けて得られた学びと品質
mottyzzz
2
610
アルテニア コンサル/ITエンジニア向け 採用ピッチ資料
altenir
0
110
API Platform 4.2: Redefining API Development
soyuka
0
180
機能追加とリーダー業務の類似性
rinchoku
2
1.3k
Platformに“ちょうどいい”責務ってどこ? 関心の熱さにあわせて考える、責務分担のプラクティス
estie
1
140
意外と簡単!?フロントエンドでパスキー認証を実現する WebAuthn
teamlab
PRO
2
780
AI Coding Agentのセキュリティリスク:PRの自己承認とメルカリの対策
s3h
0
240
Testing Trophyは叫ばない
toms74209200
0
890
プロポーザル駆動学習 / Proposal-Driven Learning
mackey0225
2
1.3k
個人開発で徳島大学生60%以上の心を掴んだアプリ、そして手放した話
akidon0000
1
150
詳解!defer panic recover のしくみ / Understanding defer, panic, and recover
convto
0
250
Featured
See All Featured
Music & Morning Musume
bryan
46
6.8k
Building Better People: How to give real-time feedback that sticks.
wjessup
368
19k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Fireside Chat
paigeccino
39
3.6k
Done Done
chrislema
185
16k
Context Engineering - Making Every Token Count
addyosmani
3
62
How to Ace a Technical Interview
jacobian
279
23k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
530
Unsuck your backbone
ammeep
671
58k
Facilitating Awesome Meetings
lara
55
6.5k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
Transcript
サーバーサイドKotlin/JSの フレームワークを作った話 CISTLT-Zli 合同LT会2020 with Halloween
自己紹介 HN: マヤミト 会津大学26期 (学部3年) Zli 現代表 GitHub: https://github.com/yt8492 好きな言語:
Kotlin, Java, Scala 趣味: Kotlin, 同人音声, VTuber Twitter: yt8492
前回のあらすじ
Kotlin/JS - KotlinをJSにトランスパイルする技術 - JSのライブラリも利用可能 - Kotlinで型定義を書けばJSのコードに型を付けられる - Webフロントエンドの開発もNode.jsでサーバーサイドの開発もできる トランスパイル
kotlinx-nodejs Kotlin公式が提供しているKotlin向けNode.jsラッパーライブラリ https://github.com/Kotlin/kotlinx-nodejs NodeのAPIのKotlinの型定義を提供している(が、まだexperimentalなため不完全な模 様) TypeScriptの型定義をKotlinの型定義に変換するDukatというツールで生成されている
簡単なサーバーを書いてみた
問題点 - http.createServerの引数のラムダ式の中に全てを書く必要がある(多分) - Nodeのhttpパッケージだけで本格的にサーバーサイド開発するのはキツい - get("/hoge") { ... }
みたいに書けたほうがよさそう(expressみたいに)
じゃあ自分でフレームワーク作るか!w
要件 - フルスタックというよりはシンプルで軽量なフレームワーク - イメージ的にはexpressやKtor - ルーティング、リクエスト、レスポンスなどが簡単に扱える - JSONのシリアライズとかまではやらない -
kotlinx.serializationとかでユーザーにやってもらう
ルーティングの実装 - pathとmethodを簡単に指定できて、ラムダ式でhandlerを書きたい - expressの app.get("/hoge", (req, res) => {})
みたいに - path, method, handlerを持つ構造体(data class)のリストを内部で保持するように して、get("/hoge") {} などのメソッドを呼び出すとその内部のリストに構造体がadd されるようにする - http.createServerのラムダ式の引数のrequestからpathとmethodを取得し、 一致するhandlerがあればそれに処理をさせる
ルーティングの実装
リクエストを扱いやすくする - http.createServerのラムダ式の引数のrequestには各種パラメータなどが扱いや すい状態で入っていない - pathやquery parameterはurlからパースして取得する必要がある - bodyはrequest.on("data")のコールバックからとる必要がある -
headerは扱えるがKotlinのIterableではないのでforEachなどの便利メソッドが使えない - 自作のRequest構造体(data class)を作成し、各種パラメータなどを扱いやすくフ レームワーク側で加工する
リクエストを扱いやすくする
レスポンスを扱いやすくする - status codeやmessageを構造体の変数にして、簡単に設定できるようにする - http.createServerの実装では同じ名前のヘッダを複数回setすると最後にsetした 値しか反映されないので、フレームワーク側で複数回setしても全て反映されるよう に吸収する - response.end()を必ず呼び出す必要があるが、それもフレームワーク側で
やりたい
レスポンスを扱いやすくする
今後の課題 - Path Parameterが扱えない - get("/hoge/:id") みたいに扱えるようにしたいが、ルーティング周りの実装を大きく書き換えないとい けない - CORS対応くらいは簡単にできるようにしてもいいかもしれない
- DBを扱うKotlin/JSのライブラリがない
リンク集 前回のLT サーバーサイドKotlin/JS https://speakerdeck.com/yt8492/js 開発中のフレームワーク indikate https://github.com/yt8492/indikate