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
Server-Side Kotlinで必要なJavaの知識
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Takehata Naoto
May 12, 2021
Programming
1
550
Server-Side Kotlinで必要なJavaの知識
2021年5月12日(水) 「Server-Side Kotlin Study #1」の登壇資料です。
Takehata Naoto
May 12, 2021
Tweet
Share
More Decks by Takehata Naoto
See All by Takehata Naoto
AI時代でも変わらない技術コミュニティの力~10年続く“ゆるい”つながりが生み出す価値
n_takehata
2
720
KotlinConf 2025で発表された言語のアップデートと現地参加レポート
n_takehata
2
360
KotlinConf 2025 現地で感じたServer-Side Kotlin
n_takehata
2
430
KotlinConf 2025 現地参加の土産話
n_takehata
0
190
組織貢献をするフリーランスエンジニアという生き方
n_takehata
1
5.8k
「2024年版 Kotlin サーバーサイドプログラミング実践開発」の補講 〜O/Rマッパー編〜
n_takehata
2
790
2024年版 Kotlin サーバーサイドプログラミング実践開発
n_takehata
9
8.6k
Server-Side目線で見る、Kotlin Festの楽しみ方
n_takehata
0
590
KotlinとCloud Vision APIで領収書の電子帳簿保存法対応をする
n_takehata
1
1.9k
Other Decks in Programming
See All in Programming
Windows on Ryzen and I
seosoft
0
260
Go1.26 go fixをプロダクトに適用して困ったこと
kurakura0916
0
360
GC言語のWasm化とComponent Modelサポートの実践と課題 - Scalaの場合
tanishiking
0
110
「やめとこ」がなくなった — 1月にZennを始めて22本書いた AI共創開発のリアル
atani14
0
370
Swift ConcurrencyでよりSwiftyに
yuukiw00w
0
260
Rで始めるML・LLM活用入門
wakamatsu_takumu
0
170
技術検証結果の整理と解析をAIに任せよう!
keisukeikeda
0
110
encoding/json/v2のUnmarshalはこう変わった:内部実装で見る設計改善
kurakura0916
0
400
AHC061解説
shun_pi
0
360
AIとペアプロして処理時間を97%削減した話 #pyconshizu
kashewnuts
1
220
AIに任せる範囲を安全に広げるためにやっていること
fukucheee
0
130
New in Go 1.26 Implementing go fix in product development
sunecosuri
0
420
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
How to Think Like a Performance Engineer
csswizardry
28
2.5k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.4k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
220
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
9.8k
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
A Soul's Torment
seathinner
5
2.4k
Navigating Team Friction
lara
192
16k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.2k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
240
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
970
Transcript
Server-Side Kotlin で必要なJava の知識 2021 年5 月12 日 竹端 尚人
Server-Side Kotlin で必要なJava の知識 2021 年5 月12 日 竹端 尚人
自己紹介
概要 竹端 尚人 フリーランスエンジニア Twitter: @n_takehata 職種: バックエンドエンジニア 好きな言語:Kotlin Server-Side
Kotlin 、Java 、etc… ( 少し前まで) スマートフォンゲーム開発 昨年12 月からフリーランスに
登壇、執筆など CEDEC2018 、2019 登壇 Software Design 2019 年2 〜4 月号で短期連
載 書籍「 Kotlin サーバーサイドプログラミング 実践開発」を2021 年4 月に発売
書籍の一節 またJava との相互互換という特徴があり、世の中にすでに多くあるJava の資産を活用するこ ともでき、モダンかつ資産も豊富にあると いう素晴らしい言語です。 しかし、その特徴ゆえ「Java がわかる人じゃないと難しいんじゃないか」と思われてしまうことも多い です。
Kotlin を学ぶのにJava の知識はどれだけ必要なのか?
アジェンダ 1.Java の知識は絶対必要なのか? 2. よく使う知識 3. まとめ
アジェンダ 1.Java の知識は絶対必要なのか? 2. よく使う知識 3. まとめ
1.Java の知識は絶対必要なのか?
結論 Java 自体の知識はなくても学べる
書籍では「Java との相互互換」について書いた3 章以外は、Java のコードは出てきません
Java の知識があることを前提としなくても、Kotlin を学ぶことに問題はない Java 経験がない場合の学習コストは、他の言語に比べて特別高いということはない ただし、知っていると学ぶのが圧倒的に楽になる
知っていると有利な点 構文や機能で似たものを有している フレームワークやライブラリはJava 製のものを活用することも多い 世の中にある既存のJava の資産を活用できる
Java を知っていると楽だが、なくても大丈夫 (Kotlin やるためにJava を先に学ばなくては・・・ということはない)
アジェンダ 1.Java の知識は絶対必要なのか? 2. よく使う知識 3. まとめ
2. よく使う知識
オブジェクト思考の知識 フレームワーク、ライブラリの知識 Java の言語自体の知識
オブジェクト思考の知識 クラス、インターフェースなどの基本的なオブジェクト思考の知識はあった方が学びやすい C# など他のオブジェクト思考言語をやっていると理解はしやすい ( 似たような話で関数型の知識なども)
広義の意味で Java の知識
フレームワーク、ライブラリの知識 Spring Boot が無難な選択肢として上がる 各種ORM もJava 製が使われることが多い(Exposed がなかなか正式版にならないので) テスティングフレームワークはJUnit が多い
例えば Spring Boot を知っていた場合
以下のようなメリットがある Java と同じようなアーキテクチャのアプリケーションなので実装が理解しやすい フレームワークの機能を把握している 運用ノウハウがある
コード例
Spring Boot のアノテーション @RestController @RequestMapping("greeter") class GreeterController( private val greeter:
Greeter ) { @GetMapping("/hello") fun hello(@RequestParam("name") name: String): HelloResponse { return HelloResponse("Hello ${name}") } }
Spring Security のインターフェース実装 class MyAuthenticationFailureHandler : AuthenticationFailureHandler { override fun
onAuthenticationFailure( request: HttpServletRequest, response: HttpServletResponse, exception: AuthenticationException ) { response.status = HttpServletResponse.SC_UNAUTHORIZED } }
Java のライブラリを使う場合
Kotlin からJava のライブラリ呼び出し fun main() { val uuid = UUID.randomUUID()
println(uuid.toString()) val now = LocalDateTime.now() println(now) }
いずれも Java の知識は使うが、 Java のコードは書かない
Java の言語自体の知識 フレームワークでJava のコードを生成する部分 Java との互換のための機能を使う時 既存のJava の資産を活用したい場合
フレームワークでJava のコードを生成する部分 gRPC 、各種ORM などで自動生成するコードでKotlin 対応してないもの 初めて扱う際などは読んでみた方が良い
gRPC の実装 @RestController class GreeterClientController { @GetMapping("/greeter/hello/{name}") fun hello(@PathVariable name:
String): String = runBlocking { val channel = ManagedChannelBuilder.forAddress(HOST, PORT) .usePlaintext() .build() val request = HelloRequest.newBuilder().setName(name).build() val stub = GreeterGrpcKt.GreeterCoroutineStub(channel) val response = async { stub.hello(request) } response.await().text } }
生成されたコード public final class HelloRequest extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:example.greeter.HelloRequest)
HelloRequestOrBuilder { // ・・・ public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } // ・・・ public Builder setName( java.lang.String value) { if (value == null) { throw new NullPointerException(); // ・・・
自動生成なので書くことはないが、 必要に応じて読むことはある
Java との互換のための機能を使う時 @JvmStatic などの各種アノテーション SAM 変換 etc…
@JvmStatic class CompanyConstants { companion object { @JvmStatic val maxEmployeeCount
= 100 } }
アノテーションがなかった場合 public static void main(String[] args) { System.out.println(CompanyConstants.Companion.getMaxEmployeeCount()); } Java
からどう呼ばれるかの理解が必要
SAM 変換 fun main() { val function = CalcJava {
num1, num2 -> num1 + num2 } println(function.calc(1, 3)) } @FunctionalInterface public interface CalcJava { Integer calc(Integer num1, Integer num2); } Java の何を呼んでいるかの理解が必要 ( 今はKotlin 同士でも使えるようになったのでJava 独自のものではないが)
Java からどう呼ばれているか、 Java をどう呼んでいるかを 理解する必要はある
既存のJava の資産を活用したい場合 Java にしかないOSS を使いたい場合 組織でJava の資産を持っていて活用したい場合
この場合は多分組織内に有識者がいるので問題ない
アジェンダ 1.Java の知識は絶対必要なのか? 2. よく使う知識 3. まとめ
3. まとめ
Java を知らなくてもServer-Side Kotlin は始められる ただし、Java を知っていると学習コストは圧倒的に下がる Java を書く必要はないが、多少読んだり理解する必要がある場面は存在する( でもそんなに怖がらなくてい いレベル)