Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

seri
February 20, 2018

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

「[秋葉原][とらのあな] Kotlin勉強会 2/20 火」での発表資料です。
https://yumenosora.connpass.com/event/76859/

seri

February 20, 2018
Tweet

More Decks by seri

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  13. View Slide

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

    View Slide

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

    View Slide

  16. 開発で困ったこと
    1

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide