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

Tour of build system in Kotlin

Tour of build system in Kotlin

2017/06/15 CA.kt #1

stormcat24

June 15, 2017
Tweet

More Decks by stormcat24

Other Decks in Programming

Transcript

  1. Tour of build system in Kotlin
    2017.06.15 CA.kt #1 @stormcat24

    View full-size slide

  2. stormcat24
    ‣ CyberAgent, Inc.
    ‣ FRESH! https://freshlive.tv
    ‣ http://blog.stormcat.io
    ‣ 最近の興味はService Meshと仮想通貨

    View full-size slide

  3. https://speakerdeck.com/stormcat24/spark-framework-with-kotlin

    View full-size slide

  4. Kotlin、Android開発言語に

    View full-size slide

  5. 先見の明

    View full-size slide

  6. FRESH! + Kotlin
    ‣ Androidは最初から
    ‣ 2016年夏から一部Microservicesで利用開始
    ‣ OpenFRESH(Developer向けAPI)はKotlin + SparkFramework
    ‣ Server Sideの基軸言語に一方的に認定
    ‣ フルgRPC化に着手、ServerはもちろんKotlin(イマココ)

    View full-size slide

  7. 皆さんGradle好きですか

    View full-size slide

  8. 僕はpom.xmlが好きです
    ※ウソです

    View full-size slide

  9. GradleでKotlin
    特に不自由は無いですが

    View full-size slide

  10. 他の選択肢も模索しておきたい

    View full-size slide

  11. 今日はビルドツールの話をします

    View full-size slide

  12. Kobalt
    ‣ http://beust.com/kobalt/
    ‣ DSL based on Kotlin
    ‣ ver1.0.87
    ‣ brew cask install kobalt

    View full-size slide

  13. Create Kobalt Project
    $ mkdir kobalt-example && kobalt-example
    (~/kobalt-example) $ kobaltw --init kotlin
    _ __ _ _ _
    | |/ / ___ | |__ __ _ | | | |_
    | ' / / _ \ | '_ \ / _` | | | | __|
    | . \ | (_) | | |_) | | (_| | | | | |_
    |_|\_\ \___/ |_.__/ \__,_| |_| \__| 1.0.87
    Regular compilation time: 1553 ms
    Template "kotlin" installed
    Now you can run either `./kobaltw test` or `./kobaltw run`

    View full-size slide

  14. kobalt-intellij-plugin
    ‣ https://github.com/cbeust/kobalt-intellij-plugin

    View full-size slide

  15. Import to IDEA

    View full-size slide

  16. Create Project on IDEA

    View full-size slide

  17. Build.kt
    val p = project {
    name = "kobalt-example"
    group = "io.stormcat"
    artifactId = name
    version = "0.1"
    dependencies {
    compile("org.jetbrains.kotlin:kotlin-stdlib:1.1.2-5")
    compile("com.squareup.okhttp3:okhttp:3.8.0")
    }
    assemble {
    jar {}
    }
    application {
    mainClass = "io.stormcat.example.MainKt"
    }
    }

    View full-size slide

  18. Code Completion

    View full-size slide

  19. Kobalt所感
    ‣ Build含めてKotlinで書ける
    ‣ 必要最小限のプラグインは揃ってる
    ‣ IDEAサポートちゃんとある
    ‣ Gradleの資産を使えるわけではない

    View full-size slide

  20. Bazel
    ‣ Google謹製, 現在0.5.1
    ‣ 多言語/環境対応を統一されたDSLで
    ‣ C/C++, Java, Android, Objective-C, Go, Rust
    ‣ Shell, Docker, .deb(Debian Package)
    ‣ KotlinはKotlin Rules for Bazelを使う
    ‣ https://github.com/pubref/rules_kotlin

    View full-size slide

  21. Bazel WORKSPACE file
    git_repository(
    name = "org_pubref_rules_kotlin",
    remote = "https://github.com/pubref/rules_kotlin.git",
    tag = "v0.3.1", # update as needed
    )
    load("@org_pubref_rules_kotlin//kotlin:rules.bzl", "kotlin_repositories")
    kotlin_repositories()
    maven_jar(
    name = "com_squareup_okhttp3_okhttp",
    artifact = "com.squareup.okhttp3:okhttp:3.8.0",
    )

    View full-size slide

  22. Bazel BUILD file
    package(default_visibility = ["//visibility:public"])
    load("@org_pubref_rules_kotlin//kotlin:rules.bzl", "kotlin_binary",
    "kotlin_library")
    kotlin_binary(
    name = "main_kt",
    main_class = "io.stormcat.example.MainKt",
    srcs = glob(["src/main/kotlin/io/stormcat/example/**/*.kt"]),
    java_deps = [
    "@com_squareup_okhttp3_okhttp//jar",
    ],
    )

    View full-size slide

  23. Build artifact
    (~/bazel-kotlin) $ bazel build //:main_kt
    ...........................................................
    .....
    INFO: Found 1 target...
    Target //:main_kt up-to-date:
    bazel-bin/main_kt.jar
    bazel-bin/main_kt
    INFO: Elapsed time: 13.961s, Critical Path: 0.18s
    Jarや実行ファイルができる

    View full-size slide

  24. Bazel所感
    ‣ Release Engineer(ビルド職人)には良さそう
    ‣ Gradleからスイッチしたいとまでは現時点では思わない
    ‣ WindowsでAndroidビルドできない等、まだまだ途上
    ‣ 1.0安定版は2018年6月予定
    ‣ IDEAプラグイン、イマイチ使い方わからなかった

    View full-size slide

  25. _人人人人人人人_
    > Gradle 4.0 <
     ̄Y^Y^Y^Y^Y^Y ̄

    View full-size slide

  26. Gradle 4.0
    ‣ ビルドキャッシュ改善
    ‣ —offlineオプション
    ‣ ローカルキャッシュの自動クリーンアップ
    ‣ ローカルキャッシュのサイズを設定、FIFOで古いものから削除
    ‣ 並列ダウンロード
    ‣ Gradle Script Kotlin 0.9.1

    View full-size slide

  27. Upgrade to 4.0
    $ ./gradlew wrapper --gradle-version=4.0

    View full-size slide

  28. Pallarel Download
    $ ./gradlew build
    ...
    Download https://jcenter.bintray.com/io/springfox/springfox-swagger2/2.6.1/
    springfox-swagger2-2.6.1.jar
    Download https://jcenter.bintray.com/io/springfox/springfox-swagger-ui/2.6.1/
    springfox-swagger-ui-2.6.1.jar
    <-------------> 0% EXECUTING [1m 53s]
    > :compileKotlin > Resolve files of :compileClasspath
    > moshi-1.3.1.jar
    > aws-java-sdk-s3-1.11.61.jar
    > commons-lang3-3.5.jar
    > aws-java-sdk-core-1.11.61.jar
    > klaxon-0.27.jar
    > aws-java-sdk-sqs-1.11.61.jar
    > httpclient-4.5.2.jar
    > aws-java-sdk-kms-1.11.61.jar

    View full-size slide

  29. Gradle Kotlin Script
    ‣ https://github.com/gradle/gradle-script-kotlin
    ‣ GradleのDSLをKotlinで書くやつ
    ‣ build.gradleの代わりにbuild.gradle.ktsを書く

    View full-size slide

  30. build.gradle.kts
    val springbootVersion = "1.4.0.RELEASE"
    plugins {
    application
    kotlin("jvm")
    idea
    }
    application {
    mainClassName = "samples.HelloWorldKt"
    }
    fun springBoot(artifact: String) = "org.springframework.boot:$artifact:$springbootVersion"
    dependencies {
    compile(kotlin("stdlib"))
    compile(springBoot("spring-boot-starter-web"))
    compile(springBoot("spring-boot-actuator"))
    }
    repositories {
    gradleScriptKotlin()
    }

    View full-size slide

  31. Gradle Kotlin Script所感
    ‣ ちょっと勘所掴むまで手こずるかも
    ‣ IDEAがシンタックスエラーになるケースもある
    ‣ Kotlinでbuild.gradleを書けるのやっぱり(・∀・)イイ!!
    ‣ mv build.gradle build.gradle.ktsして、エラー箇所直してくスタイル

    View full-size slide

  32. まとめ
    ‣ 他の選択肢を模索したら結局Gradleだったw
    ‣ 色々ツールあるが、結局はGradleと仲良くやってくのが良さそう
    ‣ Gradle Kotlin Scriptへの意識高めていこう

    View full-size slide