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.5k
Other Decks in Programming
See All in Programming
Java Webフレームワークの現状 / java web framework at burikaigi
kishida
9
2k
Compose でデザインと実装の差異を減らすための取り組み
oidy
1
240
JavaScriptツール群「UnJS」を5分で一気に駆け巡る!
k1tikurisu
8
1.3k
EC2からECSへ 念願のコンテナ移行と巨大レガシーPHPアプリケーションの再構築
sumiyae
3
630
[JAWS-UG横浜 #80] うわっ…今年のServerless アップデート、少なすぎ…?
maroon1st
0
150
Amazon ECS とマイクロサービスから考えるシステム構成
hiyanger
1
190
ecspresso, ecschedule, lambroll を PipeCDプラグインとして動かしてみた (プロトタイプ) / Running ecspresso, ecschedule, and lambroll as PipeCD Plugins (prototype)
tkikuc
2
2.3k
2024年のkintone API振り返りと2025年 / kintone API look back in 2024
tasshi
0
180
Запуск 1С:УХ в крупном энтерпрайзе: мечта и реальность ПМа
lamodatech
0
990
月刊 競技プログラミングをお仕事に役立てるには
terryu16
1
1.3k
Moscow Python Meetup №97. Константин Крестников (Техлид команды GigaChain (SberDevices)). GigaChain: Новые инструменты для разработки агентов на примере агента техподдержки
moscowdjango
PRO
0
100
Fibonacci Function Gallery - Part 2
philipschwarz
PRO
0
230
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
520
Producing Creativity
orderedlist
PRO
343
39k
Raft: Consensus for Rubyists
vanstee
137
6.7k
Become a Pro
speakerdeck
PRO
26
5.1k
YesSQL, Process and Tooling at Scale
rocio
171
14k
A Philosophy of Restraint
colly
203
16k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Done Done
chrislema
182
16k
Speed Design
sergeychernyshev
25
760
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.2k
VelocityConf: Rendering Performance Case Studies
addyosmani
327
24k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
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