Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

Kotlin、Android開発言語に

Slide 5

Slide 5 text

先見の明

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

さて

Slide 8

Slide 8 text

皆さんGradle好きですか

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

Kobalt

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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`

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

Import to IDEA

Slide 18

Slide 18 text

Create Project on IDEA

Slide 19

Slide 19 text

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" } }

Slide 20

Slide 20 text

Code Completion

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

Bazel

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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", )

Slide 25

Slide 25 text

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", ], )

Slide 26

Slide 26 text

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や実行ファイルができる

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

Gradle4.0

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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() }

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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