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
46
Git勉強会
yt8492
0
100
なんでもやってみる勇気
yt8492
0
81
Android Autoが思ったよりしんどい話
yt8492
0
190
apollo-kotlinにcontributeした話
yt8492
0
120
DMM TVのSDカードダウンロード機能を実装した話
yt8492
1
830
今だからこそ知りたいKotlin Multiplatform
yt8492
0
290
State management and API calls in Jetpack Compose: Learning Apollo + Jetpack Compose through React Hooks
yt8492
0
1.2k
サーバーフレームワークの仕組みが気になったので車輪の再発明をしてみた
yt8492
0
200
Other Decks in Programming
See All in Programming
CursorはMCPを使った方が良いぞ
taigakono
0
150
Cline指示通りに動かない? AI小説エージェントで学ぶ指示書の書き方と自動アップデートの仕組み
kamomeashizawa
1
560
AIエージェントはこう育てる - GitHub Copilot Agentとチームの共進化サイクル
koboriakira
0
230
Perplexity Slack Botを作ってAI活用を進めた話 / AI Engineering Summit プレイベント
n3xem
0
670
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
130
イベントストーミングから始めるドメイン駆動設計
jgeem
4
870
イベントストーミング図からコードへの変換手順 / Procedure for Converting Event Storming Diagrams to Code
nrslib
1
200
なぜ「共通化」を考え、失敗を繰り返すのか
rinchoku
1
420
Bytecode Manipulation 으로 생산성 높이기
bigstark
2
360
XSLTで作るBrainfuck処理系
makki_d
0
210
なんとなくわかった気になるブロックテーマ入門/contents.nagoya 2025 6.28
chiilog
1
160
都市をデータで見るってこういうこと PLATEAU属性情報入門
nokonoko1203
1
550
Featured
See All Featured
BBQ
matthewcrist
89
9.7k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Being A Developer After 40
akosma
90
590k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.5k
Visualization
eitanlees
146
16k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
4
200
The Pragmatic Product Professional
lauravandoore
35
6.7k
Automating Front-end Workflow
addyosmani
1370
200k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
48
5.4k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
A Modern Web Designer's Workflow
chriscoyier
693
190k
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