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

サーバーサイドKotlinという選択肢とユーザベース

yy_yank
November 05, 2021

 サーバーサイドKotlinという選択肢とユーザベース

Server-Side Kotlin Lounge #1「サーバーサイドKotlinの現在地」 の発表資料です #SSKotlin_Lounge

yy_yank

November 05, 2021
Tweet

More Decks by yy_yank

Other Decks in Technology

Transcript

  1. 9 Kotlinの感触 Kotlinのクラス Java public final class NormalClass { @NotNull private

    final String a; @NotNull public final String getA() { return this .a; } public NormalClass (@NotNull String a) { Intrinsics.checkNotNullParameter (a, "a"); super (); this .a = a; } } Kotlin class NormalClass( val a : String )
  2. Java Kotlin 10 Kotlinの感触 Kotlinのデータクラス public final class DataClass { @NotNull

    private final String a; @NotNull public final String getA() {/*(略)*/} public DataClass(@NotNull String a) {/*(略)*/} @NotNull public final String component1(){/*(略)*/} @NotNull public final DataClass copy(@NotNull String a) {/*(略)*/} @NotNull public String toString() {/*(略)*/} public int hashCode() {/*(略)*/} public boolean equals(@Nullable Object var1) {/*(略)*/} } data class DataClass( val a : String )
  3. 11 Kotlinの感触 KotlinのSealedクラス public abstract class Animal { private Animal() {

    } /*(略)*/ public static final class Dog extends Animal { @NotNull public static final Animal.Dog INSTANCE; private Dog() {/*(略)*/} } public static final class Cat extends Animal { @NotNull public static final Animal.Cat INSTANCE; private Cat(){/*(略)*/} } } sealed class Animal { object Dog: Animal() object Cat: Animal() } Java Kotlin
  4. 12 Kotlinの感触 Javaとの相互運用性 public static void main(String[] args) {} @Override new

    KotlinHoge() public int a; private final transient int b; private volatile int c; public final synchronized void hoge() {} public final strictfp void piyo() {} public final void fuga() throws IOException {) @JvmStatic fun main(args: Array<String>) {} override @file:JvmName ("KotlinHoge" ) @JvmField var a : Int = 0 @Transient val b : Int = 0 @Volatile var c : Int = 0 @Synchronized fun hoge(){} @Strictfp fun piyo(){} @Throws(IOException:: class) fun fuga(){} Java Kotlin
  5. 14 Kotlinの感触 LLのように書ける(?) Ruby [1,2,3].reduce(:+) # => 6 [1,3,5].map{ |a| a+1

    } # => [2, 4, 6] [1, 2, 3, 4, 5, 6, 7, 8].select {|item| item % 2 == 0 } # => [2, 4, 6, 8] Kotlin listOf(1, 2, 3).reduce{ acc, i -> acc + i } //=> 6 listOf(1,3,5).map{ it+1 } // => [2, 4, 6] listOf(1, 2, 3, 4, 5, 6, 7, 8).filter {item -> item % 2 == 0 } // => [2, 4, 6, 8]
  6. 25 ハマりどころがない 過去と現在 過去(2014年ぐらい) ・DIが使いにくい ・Spring AOPやMockitoなどが サクッと使えない ・Annotation Processingが使え ない(Dagger、Doma

    2など) ・DIが普通に使える ・Spring AOPやMockitoなどがサ クッと使える ・Annotation Processingが使える (Dagger、Doma 2など) 現在
  7. 30 ハマりどころがない 例えばSpring Bootを使う Gradle(build.gradle) classpath("org.jetbrains.kotlin:kot lin-allopen:${kotlinVersion}") } apply plugin: 'kotlin-kapt'

    apply plugin: 'kotlin-spring' • allopenプラグイン ◦ 特定のアノテーションのついたクラ スやメソッドをopenする • kaptプラグイン ◦ Annotation Processingが使えるよ うになる • kotlin-springプラグイン ◦ Springの色々なアノテーションが自 然に使えるようになる
  8. 31 ハマりどころがない 例えばSpring Bootを使う Maven(pom.xml) <groupId>org.springframework.boot</groupId> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin>

    <plugin> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-plugin</artifactId> <configuration> <args><arg>-Xjsr305=strict</arg></args> <compilerPlugins><plugin>spring</plugin></compilerPlugins> </configuration> <dependencies> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-allopen</artifactId> <version>${kotlin.version}</version> </dependency> </dependencies> </plugin> </plugins> </build> </project> • kotlin-maven-allopenプラグイン ◦ 特定のアノテーションのついたクラ スやメソッドをopenする • springコンパイラ プラグイン ◦ Springの色々なアノテーションが自 然に使えるようになる
  9. 32 ハマりどころがない 例えばSpring Bootを使う Maven(pom.xml) <execution > <id>kapt</id> <goals> <goal>kapt</goal> </goals>

    <configuration > <sourceDirs > <sourceDir >src/main/kotlin </sourceDir > <sourceDir >src/main/java </sourceDir > </sourceDirs > <annotationProcessorPaths > <!-- Specify your annotation processors here. --> <annotationProcessorPath > <groupId>com.google.dagger </groupId> <artifactId >dagger-compiler </artifactId > <version>2.9</version> </annotationProcessorPath > </annotationProcessorPaths > </configuration > </execution > • kaptプラグイン ◦ Annotation Processingが使えるよ うになる
  10. 38 - フロントエンド Angular/Dart, Vue/TypeScript... - バックエンド Kotlin, Clojure, Go,

    Rust, Elixir, Python... - インフラ Docker, Kubernetes - そのほか GCP, Jenkins, Buildkite... ユーザベースでの技術選択 採用技術