RSS

gRPC ❤ Kotlin

Gradle でビルドされた Kotlin プロジェクトの gRPC Java が、すぐに使えるサポートを提供していることをご存知でしたか? Kotlin は JetBrains によって開発された、JVM および Android をターゲットとするモダンな静的型付け言語です。Kotlin プログラムは既存の Java ライブラリとの相互運用が一般的に容易です。このエクスペリエンスをさらに向上させるために、protobuf-gradle-plugin にサポートを追加し、生成された Java ライブラリが Kotlin によって自動的に取得されるようにしました。これで、protobuf-gradle-plugin を Kotlin プロジェクトに追加し、通常の Java プロジェクトと同じように gRPC を使用できます。

以下の例では、Kotlin を使用した JVM アプリケーションと Android アプリケーションのプロジェクト設定方法を示します。

Kotlin gRPC クライアントとサーバー

完全な例は こちら にあります。

Kotlin プロジェクトの gRPC 設定は、Java プロジェクトの設定と同じです。

以下は、Kotlin 関連のセクションを強調した、サンプルプロジェクトの build.gradle のスニペットです。

apply plugin: 'kotlin'
apply plugin: 'com.google.protobuf'

// Generate IntelliJ IDEA's .idea & .iml project files.
// protobuf-gradle-plugin automatically registers *.proto and the gen output files
// to IntelliJ as sources.
// For best results, install the Protobuf and Kotlin plugins for IntelliJ.
apply plugin: 'idea'

buildscript {
  ext.kotlin_version = '1.2.21'

  repositories {
    mavenCentral()
  }
  dependencies {
    classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.5'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
  }
}

dependencies {
  compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
  // The rest of the projects dep are added below, refer to example URL
}

// The standard protobuf block, same as normal gRPC Java projects
protobuf {
  protoc { artifact = 'com.google.protobuf:protoc:3.5.1-1' }
    plugins {
      grpc { artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}" }
    }
    generateProtoTasks {
      all()*.plugins { grpc {} }
    }
}

これで、Kotlin ソースファイルから proto で生成されたメッセージと gRPC スタブを使用できます。デフォルトでは、Kotlin ソースは src/main/kotlin および src/test/kotlin に配置されるべきです。必要に応じて、./gradlew generateProto generateTestProto を実行し、IntelliJ をリフレッシュすると、生成されたソースが IDE に表示されます。最後に、./gradlew installDist を実行してプロジェクトをビルドし、./build/install/examples/bin/hello-world-client または ./build/install/examples/bin/hello-world-server を使用して例を実行します。

Kotlin の設定については、こちら で詳しく読むことができます。

Kotlin Android gRPC アプリケーション

完全な例は こちら にあります。

Kotlin Android プロジェクトの gRPC 設定は、通常の Android プロジェクトの設定と同じです。

トップレベルの build.gradle ファイルで

buildscript {
  ext.kotlin_version = '1.2.21'

  repositories {
    google()
    jcenter()
  }
  dependencies {
    classpath 'com.android.tools.build:gradle:3.0.1'
    classpath "com.google.protobuf:protobuf-gradle-plugin:0.8.5"
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
  }
}

allprojects {
  repositories {
    google()
    jcenter()
  }
}

そして、アプリモジュールの build.gradle ファイルで

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'com.google.protobuf'

repositories {
  mavenCentral()
}

dependencies {
  compile "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
  // refer to full example for remaining deps
}

protobuf {
  // The normal gRPC configuration for Android goes here
}

android {
  // Android Studio 3.1 does not automatically pick up 'src/main/kotlin' as source files
  sourceSets {
    main.java.srcDirs += 'src/main/kotlin'
  }
}

非 Android プロジェクトと同様に、./gradlew generateProto generateProto を実行して proto コードジェネレーターを実行し、./gradlew build を実行してプロジェクトをビルドします。

最後に、Android Studio でプロジェクトを開き、Run > Run 'app' を選択して Android アプリをテストします。

Kotlin Android app example

Kotlin 開発者の gRPC エクスペリエンスを改善できることを楽しみにしています。protobuf-gradle-plugin の issue tracker または grpc-java の issue tracker に、改善のアイデアやバグを追加してください。