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を使ったWEBアプリケーション開発の始め方
Search
seri
February 20, 2018
Programming
2
2.6k
Kotlinを使ったWEBアプリケーション開発の始め方
「[秋葉原][とらのあな] Kotlin勉強会 2/20 火」での発表資料です。
https://yumenosora.connpass.com/event/76859/
seri
February 20, 2018
Tweet
Share
More Decks by seri
See All by seri
共通言語「Ansible」
seriwb
8
4.6k
Other Decks in Programming
See All in Programming
DatadogのArchived LogsをSnowflakeで高速に検索する方法(Archive Searchでオワコンにならないことを祈って) / How to search Datadog Archived Logs quickly with Snowflake (hoping Datadog Archive Search doesn’t make this obsolete)
civitaspo
0
110
プロダクトという一杯を作る - プロダクトチームが味の責任を持つまでの煮込み奮闘記
hiliteeternal
0
370
decksh - a little language for decks
ajstarks
4
21k
AI Ramen Fight
yusukebe
0
120
[SRE NEXT] 複雑なシステムにおけるUser Journey SLOの導入
yakenji
1
900
CLI ツールを Go ライブラリ として再実装する理由 / Why reimplement a CLI tool as a Go library
ktr_0731
3
940
リッチエディターを安全に開発・運用するために
unachang113
1
350
バイブスあるコーディングで ~PHP~ 便利ツールをつくるプラクティス
uzulla
1
320
新世界の理解
koriym
0
130
リバースエンジニアリング新時代へ! GhidraとClaude DesktopをMCPで繋ぐ/findy202507
tkmru
7
1.7k
DataformでPythonする / dataform-de-python
snhryt
0
150
PHPカンファレンス関西2025 基調講演
sugimotokei
6
1.1k
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
Thoughts on Productivity
jonyablonski
69
4.8k
Unsuck your backbone
ammeep
671
58k
GitHub's CSS Performance
jonrohan
1031
460k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.6k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
50
5.5k
Code Review Best Practice
trishagee
69
19k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
How GitHub (no longer) Works
holman
314
140k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
Building Applications with DynamoDB
mza
95
6.5k
Transcript
Kotlinを使った WEBアプリケーション 開発の始め方 @author セリ
“Kotlinの良さは何となく わかった。 じゃあ実際に何を変えれば サーバサイドで使えるのか?
なぜサーバサイド Kotlinなのか? 何を実現したいのか?
サーバサイドKotlinで何がしたいか ▪ WEBアプリケーションを開発したい ▪ つまり本当にやりたいことは サーバサイド開発だけではない
WEBアプリケーションの開発方法 ▪ 様々な言語での実現が可能 ▪ 様々のものを考慮して選定する ▫ 言語自体の特性 ▫ コミュニティ ▫
自分やチームの知識 ▫ 静的型付け・動的型付け ▫ 連携先システムとの相性の良さ
Kotlinで開発する利点 ▪ 豊富なJavaの資産を使いながら、 スマートでモダンな言語仕様で開発ができる ▫ 知識の再利用 ▫ コーディングの省力化 ▫ 機能豊富なフレームワークとライブラリ
▪ 新しいことへのモチベーション ▪ コンパイルによる堅牢性の担保
Javaの現状 ▪ Java9がリリースされ、Java10も目前 ▫ 新しいリリース方針の賜物 ▪ Lambdaによる流れるような実装を実現 ▪ Jigsawによるアクセス制御とモジュール化 ▪
J2EEの策定がOracleから Eclipse Foundationに移管
Javaの懸念 ▪ 既存のライブラリは新しいリリース ペースについてこれるのだろうか? ▫ 新しいJavaで動くライブラリを作る必要が あるかもしれない ▪ 9以降のJavaは別物と考えていいのでは ないだろうか?
▫ であればJavaにこだわらなくてもいいではないか
WEB アプリケーション を開発する Kotlin + Java資産
アプリケーションを構成する要素 要素 技術名 言語 Kotlin 1.2 WEB Framework Spring Boot
2 (WebFlux) OR Mapper JOOQ テンプレート エンジン Thymeleaf JSONパーサ Jackson ビルドツール Gradle 要素 技術名 テストFW JUnit 4 モックFW Mockito Lint ktlint カバレッジ取得 JaCoCo DBマイグレー ションツール MyBatis Migrations
アプリケーションを構成する要素 要素 技術名 言語 Kotlin 1.2 WEB Framework Spring Boot
2 (WebFlux) OR Mapper JOOQ テンプレート エンジン Thymeleaf JSONパーサ Jackson ビルドツール Gradle 要素 技術名 テストFW JUnit 4 モックFW Mockito Lint ktlint カバレッジ取得 JaCoCo DBマイグレー ションツール MyBatis Migrations :Javaの資産
プロジェクトの作り方 ▪ ビルドツールのGradleを使って作る ▫ https://gradle.org/ ▪ ベースとなるbuild.gradleは Spring Initializrを使って作成する ▫
https://start.spring.io/
None
▪ ここからGradleの構成ファイルを作成できる ▪ 使用できるライブラリも俯瞰的に確認できる
Kotlinを採用してよかったこと ▪ コード量が目に見えて少ないので、 全体が把握しやすい ▫ レビューが楽 ▪ ライブラリの選択肢が増えた ▫ Java
+ Kotlin
開発で困ったこと 1
起きた出来事 ▪ WebFluxが単純に難しい(Reactor ▪ ノンブロッキングとブロッキングが混在する ▪ JOOQがOracleだと有料だった
“全部Kotlin関係ないやん! \俺やで/ 俺もや>
対処内容 ▪ WebFluxが単純に難しい(Reactor ➡ WebFluxの教科書を作って、チームで勉強 ▪ ノンブロッキングとブロッキングが混在する ➡ ブロッキング処理は別スレッドで呼び出す ▪
JOOQがOracleだと有料だった ➡ Oracle部分のみExposedを利用
WebFluxでのJOOQ(JDBC)利用方法 ▪ コメント文がブロッキ ングを気にしていない 書き方 ▪ 実コードがノンブロッ キングを考慮して、 別スレッドで実行して 貰いたい処理を渡す
書き方
WebFluxでのJOOQ(JDBC)利用方法 ▪ elasticとして処理を登録して、適時Workerに処理して貰う https://projectreactor.io/docs/core/3.1.4.RELEASE/api/reactor/core/sche duler/Schedulers.html#elastic--
Kotlinだったからこそできた ▪ Reactorの処理が簡潔に書けた ▪ ExposedというORMを使うことができた ▪ コルーチンでの実装も検討できる https://kotlinlang.org/docs/reference/coroutines.html
経験を積む 実際に開発することで目標に近づく
自社システムを取り巻く背景 ▪ Javaで作られた数年来のシステム ▫ メンテコスト大、性能問題多々 ▪ 競合と戦うスタートラインに立てていない ▫ 機能不足、昔ながらの開発スピード ▪
エンジニアの採用・確保が追い付いていない ▫ 会社、組織の未成熟さ
状況を最大限に生かす ▪ Javaのエンジニアが多いなら ▫ Javaに適した技術セットで ▪ 開発手法が古いなら ▫ 新しい手法へのチャレンジをモチベーションに ▪
エンジニアが少ないなら ▫ ゴールの認識を全員で共有して
何を実現したいのか? ▪ 少ない労力で大きな結果を手にしたい ▪ 技術トレンドを負担なく、なるべく簡単に 取り入れたい ▪ あっと言わせるサービスを提供したい
何を実現したいのか? ▪ 少ない労力で大きな結果を手にしたい ▪ 技術トレンドを負担なく、なるべく簡単に 取り入れたい ▪ あっと言わせるサービスを提供したい それならKotlin!
導入時の参考に ▪ Kotlin APIのサンプルコード ▫ https://github.com/seriwb/kotlin-api-sample ▪ JOOQの導入解説 ▫ http://seri.hatenablog.com/entry/2017/12/08
/022503