「[秋葉原][とらのあな] Kotlin勉強会 2/20 火」での発表資料です。 https://yumenosora.connpass.com/event/76859/
Kotlinを使ったWEBアプリケーション開発の始め方@author セリ
View Slide
“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.2WEBFrameworkSpring Boot 2(WebFlux)OR Mapper JOOQテンプレートエンジンThymeleafJSONパーサ Jacksonビルドツール Gradle要素 技術名テストFW JUnit 4モックFW MockitoLint ktlintカバレッジ取得 JaCoCoDBマイグレーションツールMyBatisMigrations
アプリケーションを構成する要素要素 技術名言語 Kotlin 1.2WEBFrameworkSpring Boot 2(WebFlux)OR Mapper JOOQテンプレートエンジンThymeleafJSONパーサ Jacksonビルドツール Gradle要素 技術名テストFW JUnit 4モックFW MockitoLint ktlintカバレッジ取得 JaCoCoDBマイグレーションツールMyBatisMigrations:Javaの資産
プロジェクトの作り方▪ ビルドツールのGradleを使って作る▫ https://gradle.org/▪ ベースとなるbuild.gradleはSpring Initializrを使って作成する▫ https://start.spring.io/
▪ ここから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/scheduler/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