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
KotlinでAPIを型安全にした話
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
noripi
December 19, 2017
Technology
1.8k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
KotlinでAPIを型安全にした話
2017.12.19 R.kt#2の発表で使用したスライドです。
noripi
December 19, 2017
More Decks by noripi
See All by noripi
Kotlinで型安全なSQLを書こう
noripi
0
940
バックエンドが異なるサービスの差分を APIで吸収してみた話
noripi
1
1.9k
サーバサイドKotlinのすすめ
noripi
0
12k
サーバーサイドKotlinのすすめ(仮)
noripi
0
800
Other Decks in Technology
See All in Technology
組み立てて楽しむ AWS Blocks 入門
kmiya84377
0
220
生成AIと進める探索的データ分析(2026.10.03 第122回Tokyo.R勉強会)
tatamiya
2
1.5k
Incremental HTTP
kazuho
5
2.1k
AI 時代の Azure エンジニアリング ~ 私たちは何を磨き、何を任せるのか ~
chack411
1
550
自律型 AI をセキュアに実装!Gemini と MIG で作る動的コード実行環境
recruitengineers
PRO
1
230
AI時代だからこそ推したい!Gitコマンド再入門
munakata
0
160
LLM機能を自作して分かるSnowflake Cortex AIの強み
nayuts
0
340
AI時代に必要な脅威モデリング― 変化の速度に負けない理解とリスク判断
masakane55
5
1.2k
プロダクト価値を、 チームが使える判断軸に変える
vivion
0
140
"優秀な誰か"の下位互換にならないために
yut0naga1_fa
0
1k
UniFi(ユニファイ)AIカメラの現場活用
ludicmind
1
380
go-sqletch
moznion
0
120
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
Marketing to machines
jonoalderson
1
5.9k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Faster Mobile Websites
deanohume
310
32k
From π to Pie charts
rasagy
1
390
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
sira's awesome portfolio website redesign presentation
elsirapls
0
450
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
300
Why Our Code Smells
bkeepers
PRO
340
58k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
930
Transcript
,PUMJOͰ"1*Λܕ҆શʹͨ͠ 3LU /PSJZVLJ*TIJEB
͍͋ͭࣗ͝͞ݾհ ɾ໊લ/PSJZVLJ*TIJEB ɾαʔόαΠυʢ,PUMJO+BWB1)11ZUIPO ɾΤϯδχΞ!3FUUZ ɾJ04 4XJGU0CKFDUJWF$ ɾ"84ͦͦ͜͜৮Δ ɾ,PUMJOྺϲ݄͘Β͍
ɾ,PUMJO͔Θ͍͍ ɾ࠷ۙ,PUMJO͗ͯ͢͠+BWBΛΕ͖ͯͨ ɾ,PUMJO/BUJWFʹظ͍ͯ͠Δ IUUQTRJJUBDPNOPSJQJJUFNTFFDCEBDBGCE
ຊͷ͓ ɾ,PUMJOΛಋೖͨ͠ܦҢ ɾ,PUMJOʹͯ͠Έͯײͨ͜͡ͱ
ࠃ/P໊࣮άϧϝαʔϏε3FUUZͷӡӦ ઃཱ XFCͱΞϓϦͰαʔϏεల։ γϯάϧυϝΠϯ εϚϗϑΝʔετ ݄ؒར༻ऀສ
3FUUZ ɾ8FC ɾΞϓϦ
ฐࣾʹ͓͚Δ,PUMJO ɾΞϓϦ༻"1*ʹ,PUMJOΛ͍ͬͯ·͢ ϒϥβ ΞϓϦ 8FCΞϓϦέʔγϣϯαʔό "1*αʔό %#
,PUMJOΛಋೖͨ͠ܦҢ
1)1Ͱ࡞ΒΕ͍ͯͨ"1* ɾ8FCΞϓϦέʔγϣϯʹ"1*Λੜ͍ͯͨ͠ ϒϥβ ΞϓϦ 8FCΞϓϦέʔγϣϯαʔό "1*αʔό %# ɾࣾʹ1)1Λॻ͚Δਓ͕ଟ͘։ൃεϐʔυ͍
1)1Ͱ࡞ΒΕ͍ͯͨ"1* ɾ࣌ͷ"1*ͷಛ ɾฦΓ΄΅+40/ܗ͕ࣜͩҧ͏͜ͱ͋Δ ɾ+40/ͷLFZʹೖΔͷܕ͕Ұҙʹఆ·Βͳ͍ ɾͲͷLFZʹͲΜͳ͕ೖͬͯ͘Δ͔ɺιʔείʔυΛݟͳ͍ͱ͔Βͳ͍ ɾ͍ͭͰͲ͜Ͱ0, ΞϓϦ 8FCΞϓϦέʔγϣϯαʔό
˓˓ͷҰཡ͍ͩ͘͞ʂʢ͖ͬͱ"SSBZʣ GBMTF ɾฦΓͷόϦσʔγϣϯʢͦΕ͕ࣦഊ͔Ͳ͏ؚ͔ΊʣΫϥΠΞϯτଆͷ
1)1͔Β+BWB ɾ8FCΞϓϦέʔγϣϯͱͯ͠+BWB ɾαʔόαΠυݴޠͱ࣮͕ͯ͋͠Γɺ'8๛ ɾΞϊςʔγϣϯͰ"1*ΛγϯϓϧʹఆٛͰ͖Δ+"934ͱ͍͏༷͕͋Δ ΞϓϦ "1*αʔό ˓˓ͷҰཡ͍ͩ͘͞ʂʢ͖ͬͱ"SSBZʣ <\^ \^>
ɾฦΓͷܕΛ10+0 ී௨ͷ+BWBΦϒδΣΫτ Ͱࣄલʹఆٛ ˠܕ҆શͳ"1*ͰΞϓϦΤϯδχΞʹฏͳੈքΛ ɾࣦഊͨ͠ΒYYYYΛฦ͢
ɾ+BWBͩͬͨͷͰ݁ߏϞμϯͳॻ͖ํ͕Ͱ͖͍ͯͨ +BWB͔Β,PUMJOͷҠߦ ɾ࣮Ҡߦ͢ΔͭΓͳ͔ͬͨ ɾ1)1ͷࠒͱൺͯ"1*͕֨ஈʹྑ͘ͳͬͯɺຬ͍ͯͨ͠
+BWB͔Β,PUMJOͷҠߦ ɾҠߦͨ͠ཧ༝ ɾ͋Δಥવ͜Μͳͷ͕ ˠ͓ΉΖʹ,PUMJO͕ಋೖ͞Εͨ
"1*ͷݱࡏ ΏΔ͔ʹ,PUMJOԽΛਐߦத
,PUMJOʹͯ͠Έͯײͨ͜͡ͱ
ɾ͢ΜͳΓಋೖͰ͖Δ ɾطʹ+BWBͷϓϩμΫτ͕͋Δ߹ɺͦ͜ʹ,PUMJOΛೖΕΔͷͱͯ؆୯ ɾ+BWBͩͱಈ͍ͨͷʹॻ͖͑ͨΒಈ͔ͳ͘ͳͬͨɺͱ͍͏͜ͱ·ͣͳ͍ ,PUMJOʹͯ͠Έͯ ɾ͋Δ6UJMJUZ͚ͩॻ͖͑ͱ͍͏͜ͱ؆୯ ɾ,PUMJO͔Θ͍͍ ɾ/6--ڐ༰ܕܕਪϥϜμͳͲϞμϯͳݴޠͷػೳΛҰ௨Γඋ͑Δ ɾ+BWB͔ΒͪΌΜͱίʔϧͰ͖ΔͷͰ+BWB͔͠ॻ͔ͳ͍ਓ͕͍ͯ҆৺ ɾൺֱతετϨεগͳ͘ॻ͚Δݴޠͷͭ
ɾ͑͏΄ͲΑΓྑ͍ॻ͖ํ͕ݟ͔ͭͬͯ͘Δ
Ҡߦͯ͠ؾ͍ͮͨ,PUMJOͷϝϦοτ ɾ/VMMBCJMJUZΛίϯύΠϥϨϕϧͰఆٛͰ͖Δ ɾͦͦ1)1͔ΒҠߦͨ͠తɺฦΓͷܕΛݫີʹఆٛ͢Δ͜ͱ ɾ+BWB࣌ʹ!/VMMBCMFΞϊςʔγϣϯͰදݱ͍͕ͯͨ͠ɺίϯύΠϥ ɹνΣοΫ͕ͳ͍ͨΊ࣮ଶͱҟͳ͍ͬͯͨ ɾΫϥΠΞϯτଆ͕0QUJPOBMͷػߏΛ࣋ͭݴޠͰॻ͔ΕΔ͜ͱ͕૿͖͍͑ͯͯΔ ˠ/6--ڐ༰͔Ͳ͏͔Λهड़͢Δ͜ͱɺܕΛهड़͢Δ ɹ͜ͱͱಉ͘͡Β͍ॏཁ
Ҡߦͯ͠ؾ͍ͮͨ,PUMJOͷϝϦοτ ɾσʔλϗϧμΫϥεͷఆٛ ɾฦΓͷܕΛ10+0 ී௨ͷ+BWBΦϒδΣΫτ Ͱࣄલʹఆٛ͢Δඞཁ͕͋Δ ɾ+BWBͩͱఆٛ͢Δͷ͕ͪΐͬͱΊΜͲ͍͘͞ public class
GetRestaurantResponse { private long restaurantId; private String restaurantName; public long getRestaurantId() { return this.restaurantId; } public String getRestaurantName() { return this.restaurantName; } }
Ҡߦͯ͠ؾ͍ͮͨ,PUMJOͷϝϦοτ ɾσʔλϗϧμΫϥεͷఆٛ ɾ,PUMJOͷ߹ɺEBUBDMBTTΛ͑γϯϓϧʹهड़Ͱ͖Δ data class GetRestaurantResponse( val restaurantId:
Long, val restaurantName: String )
Ҡߦͯ͠ؾ͍ͮͨ,PUMJOͷϝϦοτ ɾ$MBTT%FMFHBUJPO ɾجຊతͳܕΛΈ߹ΘͤͯฦΓΛ࡞Γ͍ͨέʔεׂͱΑ͋͘Δ ɾ+BWBͩͱఆٛ͢Δͷ͕͍ͩͿΊΜͲ͍͘͞ public class GetReviewResponse implements
IReview, IRestaurant, IUser { private IReview review; private IRestaurant restaurant; private IUser user; public long getReviewId() { return this.review.getReviewId(); } public String getUserName() { return this.user.getUserName(); } public String getRestaurantName() { return this.restaurant.getRestaurantName(); } ... }
Ҡߦͯ͠ؾ͍ͮͨ,PUMJOͷϝϦοτ ɾ$MBTT%FMFHBUJPO ɾΠϯλϑΣʔεͷ࣮ΛଞͷΫϥεʹҠৡͰ͖Δ ɾQSPQFSUZΛࡉ͔͘JOUFSGBDFԽ͓͚ͯ͠ɺฦΓΫϥεΛࡉ͔͘ఆٛՄೳʹ data class GetReviewResponse( private
val review: IReview, private val restaurant: IRestaurant, private val user: IUser ) : IReview by review, IRestaurant by restaurant, IUser by user { // ෳͷinterfaceͰఆ͕͔ٛͿͬͯΔͱ͖͚ͩ໌ࣔతʹࢦఆ override val userId: Int = this.user.userId }
·ͱΊ ɾ,PUMJO͢ΜͳΓಋೖͰ͖Δʂ ɾฐࣾͰɺ͋Δ͓ΉΖʹ,PUMJO͕Ճ͞Ε͔ͯͦ͜ΒঃʑʹҠߦ͍ͯ͠·͢ ɾ,PUMJOͷ͍͍ͱ͜Ζ ɾطʹ+BWBͷϓϩμΫτ͕͋Δ߹ɺͦ͜ʹ,PUMJOΛೖΕΔͷͱͯ؆୯ ɾ/VMMڐ༰ܕͰ֎෦ΠϯλϑΣʔεΛΑΓݫີʹఆٛͰ͖Δ ɾEBUBDMBTTΛͬͯσʔλϗϧμΛγϯϓϧʹఆٛͰ͖Δ ɾ$MBTT%FMFHBUJPO ɾଞʹ͍Ζ͍Ζ