Slide 1

Slide 1 text

Kotlinを使った WEBアプリケーション 開発の始め方 @author セリ

Slide 2

Slide 2 text

“Kotlinの良さは何となく わかった。 じゃあ実際に何を変えれば サーバサイドで使えるのか?

Slide 3

Slide 3 text

なぜサーバサイド Kotlinなのか? 何を実現したいのか?

Slide 4

Slide 4 text

サーバサイドKotlinで何がしたいか ▪ WEBアプリケーションを開発したい ▪ つまり本当にやりたいことは サーバサイド開発だけではない

Slide 5

Slide 5 text

WEBアプリケーションの開発方法 ▪ 様々な言語での実現が可能 ▪ 様々のものを考慮して選定する ▫ 言語自体の特性 ▫ コミュニティ ▫ 自分やチームの知識 ▫ 静的型付け・動的型付け ▫ 連携先システムとの相性の良さ

Slide 6

Slide 6 text

Kotlinで開発する利点 ▪ 豊富なJavaの資産を使いながら、 スマートでモダンな言語仕様で開発ができる ▫ 知識の再利用 ▫ コーディングの省力化 ▫ 機能豊富なフレームワークとライブラリ ▪ 新しいことへのモチベーション ▪ コンパイルによる堅牢性の担保

Slide 7

Slide 7 text

Javaの現状 ▪ Java9がリリースされ、Java10も目前 ▫ 新しいリリース方針の賜物 ▪ Lambdaによる流れるような実装を実現 ▪ Jigsawによるアクセス制御とモジュール化 ▪ J2EEの策定がOracleから Eclipse Foundationに移管

Slide 8

Slide 8 text

Javaの懸念 ▪ 既存のライブラリは新しいリリース ペースについてこれるのだろうか? ▫ 新しいJavaで動くライブラリを作る必要が あるかもしれない ▪ 9以降のJavaは別物と考えていいのでは ないだろうか? ▫ であればJavaにこだわらなくてもいいではないか

Slide 9

Slide 9 text

WEB アプリケーション を開発する Kotlin + Java資産

Slide 10

Slide 10 text

アプリケーションを構成する要素 要素 技術名 言語 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

Slide 11

Slide 11 text

アプリケーションを構成する要素 要素 技術名 言語 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の資産

Slide 12

Slide 12 text

プロジェクトの作り方 ▪ ビルドツールのGradleを使って作る ▫ https://gradle.org/ ▪ ベースとなるbuild.gradleは Spring Initializrを使って作成する ▫ https://start.spring.io/

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

▪ ここからGradleの構成ファイルを作成できる ▪ 使用できるライブラリも俯瞰的に確認できる

Slide 15

Slide 15 text

Kotlinを採用してよかったこと ▪ コード量が目に見えて少ないので、 全体が把握しやすい ▫ レビューが楽 ▪ ライブラリの選択肢が増えた ▫ Java + Kotlin

Slide 16

Slide 16 text

開発で困ったこと 1

Slide 17

Slide 17 text

起きた出来事 ▪ WebFluxが単純に難しい(Reactor ▪ ノンブロッキングとブロッキングが混在する ▪ JOOQがOracleだと有料だった

Slide 18

Slide 18 text

“全部Kotlin関係ないやん! \俺やで/ 俺もや>

Slide 19

Slide 19 text

対処内容 ▪ WebFluxが単純に難しい(Reactor ➡ WebFluxの教科書を作って、チームで勉強 ▪ ノンブロッキングとブロッキングが混在する ➡ ブロッキング処理は別スレッドで呼び出す ▪ JOOQがOracleだと有料だった ➡ Oracle部分のみExposedを利用

Slide 20

Slide 20 text

WebFluxでのJOOQ(JDBC)利用方法 ▪ コメント文がブロッキ ングを気にしていない 書き方 ▪ 実コードがノンブロッ キングを考慮して、 別スレッドで実行して 貰いたい処理を渡す 書き方

Slide 21

Slide 21 text

WebFluxでのJOOQ(JDBC)利用方法 ▪ elasticとして処理を登録して、適時Workerに処理して貰う https://projectreactor.io/docs/core/3.1.4.RELEASE/api/reactor/core/sche duler/Schedulers.html#elastic--

Slide 22

Slide 22 text

Kotlinだったからこそできた ▪ Reactorの処理が簡潔に書けた ▪ ExposedというORMを使うことができた ▪ コルーチンでの実装も検討できる https://kotlinlang.org/docs/reference/coroutines.html

Slide 23

Slide 23 text

経験を積む 実際に開発することで目標に近づく

Slide 24

Slide 24 text

自社システムを取り巻く背景 ▪ Javaで作られた数年来のシステム ▫ メンテコスト大、性能問題多々 ▪ 競合と戦うスタートラインに立てていない ▫ 機能不足、昔ながらの開発スピード ▪ エンジニアの採用・確保が追い付いていない ▫ 会社、組織の未成熟さ

Slide 25

Slide 25 text

状況を最大限に生かす ▪ Javaのエンジニアが多いなら ▫ Javaに適した技術セットで ▪ 開発手法が古いなら ▫ 新しい手法へのチャレンジをモチベーションに ▪ エンジニアが少ないなら ▫ ゴールの認識を全員で共有して

Slide 26

Slide 26 text

何を実現したいのか? ▪ 少ない労力で大きな結果を手にしたい ▪ 技術トレンドを負担なく、なるべく簡単に 取り入れたい ▪ あっと言わせるサービスを提供したい

Slide 27

Slide 27 text

何を実現したいのか? ▪ 少ない労力で大きな結果を手にしたい ▪ 技術トレンドを負担なく、なるべく簡単に 取り入れたい ▪ あっと言わせるサービスを提供したい それならKotlin!

Slide 28

Slide 28 text

導入時の参考に ▪ Kotlin APIのサンプルコード ▫ https://github.com/seriwb/kotlin-api-sample ▪ JOOQの導入解説 ▫ http://seri.hatenablog.com/entry/2017/12/08 /022503