Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

IntelliJ IDEAとKotlinで作るSpring 5アプリケーション

1,658 views

Published on

2017年12月21日にカサレアルにて開催したフリーセミナー用の発表資料です。
以下、告知時の文章です。

本セミナーは、JetBrains製品の公式代理店である株式会社サムライズム様との共催セミナーです。
サーバー・サイドJavaのフレームワークとして定評のあるSpring。先日、最新バージョンのSpring 5がリリースされました。

今回のバージョンアップでは、JetBrains社がJavaとの100%相互運用性を目指して開発したプログラミング言語Kotlinのサポートや、Reactive Webと呼ばれる新しい開発スタイルが導入され、より簡潔で安全にWebアプリケーションを記述できるようになりました。

本セミナーでは、高機能かつ高い生産性を実現できると定評のIntelliJ IDEAを利用して、KotlinとSpring 5による新しいスタイルでWebアプリケーションを構築する方法をご紹介します。

また、開発に役立つIntelliJ IDEA以外のさまざまなJetBrains製品群についても、サムライズムの山本様より直接ご紹介していただきます。
まったく新しいWebアプリケーションの開発方法を体験できる良い機会なので、ぜひご参加ください。
タイムスケジュール
 13:30-14:00 開場・受付
 14:05-14:50 『JetBrains最新ワークフロー』(サムライズム 山本 裕介様)
  コーディング、継続インテグレーション、コードレビュー、課題追跡といった開発ワークフロー全てをカバーする
  JetBrainsのソリューションをデモを交えてご紹介いたします。
  「IDEだけではない」、JetBrainsの魅力を堪能していただければと思います。
 15:00-16:00 『Kotlin + Spring 5ハンズオン』 (カサレアル 山本 薫)
  このハンズオンでは、KotlinとSpring 5による新しいWebアプリケーションの作り方を、
  有償版のIntelliJ IDEA Ultimateを使いながら体験していただきます。
  どのくらい簡単に作れるのか、ぜひご自身の手でご確認ください。
 16:00-16:30 名刺交換会

Published in: Technology
  • Be the first to comment

IntelliJ IDEAとKotlinで作るSpring 5アプリケーション

  1. 1. IntelliJ IDEAとKotlinで作る Spring 5アプリケーション
  2. 2. はじめに
  3. 3. 今回ご紹介すること IntelliJ IDEAを使った簡単なWebAPIの開発 開発言語:Kotlin 1.1 フレームワーク:Spring 5 Boot + WebFlux + Reactive MongoDB ビルド・ツール:Gradle 4.4 TODO管理サービス
  4. 4. アジェンダ Kotlin & Spring 5概要 Kotlinについて Spring 5について IntelliJ IDEAでWebAPI開発 Spring Initializrを利用したプロジェクトの作成 WebFluxに触れてみる Reactive MongoDBに触れてみる
  5. 5. Kotlin & Spring 5概要
  6. 6. Kotlinについて
  7. 7. Kotlinとは? Javaの代替言語としてJetBrains社が開発した マルチプラットフォームの静的型付け言語 https://kotlinlang.org/
  8. 8. Kotlinの特徴 Javaと100%の相互運用性 マルチ・パラダイムでモダンな言語仕様 OSSライセンスのもとに公開
  9. 9. 特徴1 Javaと100%の相互運用性 Kotlin ソース・コード (*.kt) Java バイト・コード (*.class)コンパイル Android バイト・コード (*.dex) 変換 Java SE Java EE実行 Android 実行 JavaScript ソース・コード (*.js) ネイティブ バイナリ・コード
  10. 10. 特徴2 マルチ・パラダイムでモダンな言語仕様 オブジェクト指向&関数型プログラミング カプセル化、継承、高階関数、ラムダ式 効率と安全性の両立 型推論、スマートキャスト、Null安全 柔軟で強力な言語機能とライブラリ レンジ、拡張関数、演算子オーバーロード、 デリゲート、etc.
  11. 11. 特徴3 OSSライセンスのもとに公開 https://github.com/JetBrains/kotlin Apache License 2.0
  12. 12. Spring 5について
  13. 13. Spring 5の新機能 Reactive Stackの導入 WebFlux、Reactive Repositories、Reactor Kotlinサポート DSL(WebFlux、Bean定義) 、Null安全、 Kotlin Script Templates その他、盛りだくさん Java SE 8+、HTTP2、etc.
  14. 14. Reactive Stackとは? スケーラビリティを重視した新しいフレームワーク 大規模ユーザーによる同時アクセス モバイル・デバイスのサポート マイクロ・サービス・アーキテクチャーでの利用 非同期処理をベースとしたアーキテクチャー ノンブロッキングI/O、イベント・ストリーム、バック プレッシャー、etc.
  15. 15. 従来型(同時アクセスのサポート) サーバー クライアント1 クライアントn クライアントn-1 クライアント2 クライアント3 クライアントn-2 ・ ・ ・ スレッド1 スレッド2 スレッド3 スレッドn-2 スレッドn-1 スレッドn 1万 クライアント 以上! ・ ・ ・ メモリー不足 スイッチング コストの増大
  16. 16. :Controller :Service :Repository :DB:Client 従来型(処理モデル) スレッドがメモリーを 占有している データの受け渡しが 一括で行われる 送り側と受け取り側の 処理速度のギャップがある
  17. 17. Reactive Stack(同時アクセスのサポート) サーバー Reactive Stack クライアント1 クライアントn クライアントn-1 クライアント2 クライアント3 クライアントn-2 1万 クライアント 以上! ・ ・ ・ イベント イベント イベント イベント スレッド1 イベント・ループ 最小限の スイッチングコスト
  18. 18. Reactive Stack(処理モデル) :Controller :Service :Repository :DB:Client 受け取り側の速度に合わせて 処理が行われる (バックプレッシャー) 1件単位で 処理が実行される 必要最小限の スレッド数に固定
  19. 19. IntelliJ IDEAでWebAPI開発
  20. 20. Spring Initializrを利用した プロジェクトの作成
  21. 21. Project Metadataの指定 Type: Gradle Project Language: Kotlin
  22. 22. Dependenciesの指定 Spring Boot: 2.0.0 M7下記項目にチェック [Web]-[Reactive Web] [NoSQL]-[Reactive MongoDB]
  23. 23. Import Module from Gradleの指定 Use auto-importにチェック
  24. 24. Gradleのバージョンを書き替える #Fri Jul 28 13:37:07 BST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https¥://services.gradle.org/distributions/gradle-4.4-bin.zip 4.2 → 4.4に書き替える Java 9のサポートは Gradle 4.2.1から
  25. 25. DemoApplication.kt package com.example.demo import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.runApplication @SpringBootApplication class DemoApplication fun main(args: Array<String>) { runApplication<DemoApplication>(*args) } Kotlinアプリケーションの エントリー・ポイント (メイン関数) Spring Bootアプリケーションのメインクラス
  26. 26. WebFluxに触れてみる
  27. 27. WebFluxの構成要素 Router Handler A Handler B Handler Z ・・・ GET /todos HTTP/1.1 Host: localhost ・・・ HTTP/1.1 200 OK Content-Type: application/json ・・・
  28. 28. データの入れ物(エンティティ・クラス)を作る package com.example.demo.entity import java.time.LocalDate data class TodoItem( val id: String? = null, val done: Boolean = false, val subject: String = "無題", val deadline: LocalDate? = null )
  29. 29. Handlerを作る package com.example.demo.web // import省略(次ページを参照) val todoItems = Flux.just( TodoItem(subject = "あああああ"), TodoItem(subject = "いいいいい", deadline = LocalDate.now()), TodoItem(subject = "ううううう", done = true) ) class TodoHandler { fun findAll(request: ServerRequest): Mono<ServerResponse> = ok().contentType(APPLICATION_JSON_UTF8).body(todoItems) } ダミー・データ
  30. 30. (参考)Handlerのimport import com.example.demo.entity.TodoItem import org.springframework.http.MediaType.APPLICATION_JSON_UTF8 import org.springframework.web.reactive.function.server.ServerRequest import org.springframework.web.reactive.function.server.ServerResponse import org.springframework.web.reactive.function.server.ServerResponse.ok import org.springframework.web.reactive.function.server.body import reactor.core.publisher.Flux import reactor.core.publisher.Mono import java.time.LocalDate
  31. 31. MonoとFluxについて Reactorにおけるイベント・ソース・オブジェクト Mono 0または1個のイベントを生成 Flux 0個以上のイベントを生成 参考: https://projectreactor.io/
  32. 32. Routerを作る package com.example.demo.web import org.springframework.web.reactive.function.server.router fun router(todoHandler: TodoHandler) = router { "/todos".nest { GET("/", todoHandler::findAll) } }
  33. 33. コンポーネントを登録する fun main(args: Array<String>) { runApplication<DemoApplication>(*args) { addInitializers(beans { bean<TodoHandler>() bean { router(ref<TodoHandler>()) } }) } }
  34. 34. (参考)DemoApplicationのimport import com.example.demo.web.TodoHandler import com.example.demo.web.router import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.runApplication import org.springframework.context.support.beans
  35. 35. 実行してみよう! . ____ _ __ _ _ /¥¥ / ___'_ __ _ _(_)_ __ __ _ ¥ ¥ ¥ ¥ ( ( )¥___ | '_ | '_| | '_ ¥/ _` | ¥ ¥ ¥ ¥ ¥¥/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_¥__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.0.0.M7)
  36. 36. Reactive MongoDB に触れてみる
  37. 37. リポジトリー・インターフェイスを定義する package com.example.demo.repositories import com.example.demo.entity.TodoItem import org.springframework.data.repository.reactive.ReactiveCrudRepository interface TodoItemRepository: ReactiveCrudRepository<TodoItem, String>
  38. 38. リポジトリを利用してデータを取得する package com.example.demo.web // import省略(次ページを参照) class TodoHandler(private val todoItemRepository: TodoItemRepository) { fun findAll(request: ServerRequest): Mono<ServerResponse> = ok().contentType(APPLICATION_JSON_UTF8) .body(todoItemRepository.findAll()) } ここの部分を書き替える
  39. 39. (参考)Handlerのimport import com.example.demo.repositories.TodoItemRepository import org.springframework.http.MediaType.APPLICATION_JSON_UTF8 import org.springframework.web.reactive.function.server.ServerRequest import org.springframework.web.reactive.function.server.ServerResponse import org.springframework.web.reactive.function.server.ServerResponse.ok import org.springframework.web.reactive.function.server.body import reactor.core.publisher.Mono
  40. 40. データベース接続の設定を行う package com.example.demo // import省略(次ページを参照) @SpringBootApplication class DemoApplication: AbstractReactiveMongoConfiguration() { override fun reactiveMongoClient(): MongoClient = MongoClients.create() override fun getDatabaseName(): String = "todo" }
  41. 41. (参考)DemoApplicationのimport import com.example.demo.web.TodoHandler import com.example.demo.web.router import com.mongodb.reactivestreams.client.MongoClient import com.mongodb.reactivestreams.client.MongoClients import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.runApplication import org.springframework.context.support.beans import org.springframework.data.mongodb.config .AbstractReactiveMongoConfiguration
  42. 42. 実行してみよう! . ____ _ __ _ _ /¥¥ / ___'_ __ _ _(_)_ __ __ _ ¥ ¥ ¥ ¥ ( ( )¥___ | '_ | '_| | '_ ¥/ _` | ¥ ¥ ¥ ¥ ¥¥/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_¥__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.0.0.M7)
  43. 43. まとめ
  44. 44. KotlinとSpring 5 Reactive Stack Reactive Stack スケーラビリティーを重視したフレームワーク WebFlux、Reactive Repositories、Reactor Kotlin シンプル、柔軟かつ安全な言語 Spring 5 Reactive Stackとの相性は抜群
  45. 45. 【広告】関連コースのご案内 (仮称) KotlinによるAndroidアプリケーション開発 応用編 Spring (仮称) KotlinとWebFluxによる Spring 5 Webアプリケーション開発 準備中 準備中
  46. 46. 【広告】関連コースのご案内

×