Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Tour of build system in Kotlin
Search
stormcat24
June 15, 2017
Programming
1
3.1k
Tour of build system in Kotlin
2017/06/15 CA.kt #1
stormcat24
June 15, 2017
Tweet
Share
More Decks by stormcat24
See All by stormcat24
素早く賢く失敗するDeveloper Productivityの実現を目指して
stormcat24
4
4.7k
KubernetesのマニフェストをそれなりにCIしたい
stormcat24
4
1.3k
令和時代のSaaS開発
stormcat24
1
250
History in 5 years of CircleCI and CyberAgent
stormcat24
3
810
Kubernetes Handson Osaka
stormcat24
5
550
Kubernetes Handson
stormcat24
5
4.2k
DockerとKubernetesでアプリケーション開発にコンテナをフル活用!
stormcat24
0
290
Base Image Journey 2018
stormcat24
29
130k
kotlin-fest
stormcat24
13
17k
Other Decks in Programming
See All in Programming
MCP with Cloudflare Workers
yusukebe
2
220
数十万行のプロジェクトを Scala 2から3に完全移行した
xuwei_k
0
270
rails statsで大解剖 🔍 “B/43流” のRailsの育て方を歴史とともに振り返ります
shoheimitani
2
930
創造的活動から切り拓く新たなキャリア 好きから始めてみる夜勤オペレーターからSREへの転身
yjszk
1
130
クリエイティブコーディングとRuby学習 / Creative Coding and Learning Ruby
chobishiba
0
3.9k
Mermaid x AST x 生成AI = コードとドキュメントの完全同期への道
shibuyamizuho
0
160
Refactor your code - refactor yourself
xosofox
1
260
SymfonyCon Vienna 2025: Twig, still relevant in 2025?
fabpot
3
1.2k
フロントエンドのディレクトリ構成どうしてる? Feature-Sliced Design 導入体験談
osakatechlab
8
4.1k
useSyncExternalStoreを使いまくる
ssssota
6
1k
命名をリントする
chiroruxx
1
410
短期間での新規プロダクト開発における「コスパの良い」Goのテスト戦略」 / kamakura.go
n3xem
2
170
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7k
Faster Mobile Websites
deanohume
305
30k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
The Cost Of JavaScript in 2023
addyosmani
45
7k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Facilitating Awesome Meetings
lara
50
6.1k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
810
Scaling GitHub
holman
458
140k
Fireside Chat
paigeccino
34
3.1k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Rails Girls Zürich Keynote
gr2m
94
13k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Transcript
Tour of build system in Kotlin 2017.06.15 CA.kt #1 @stormcat24
stormcat24 ‣ CyberAgent, Inc. ‣ FRESH! https://freshlive.tv ‣ http://blog.stormcat.io ‣
最近の興味はService Meshと仮想通貨
https://speakerdeck.com/stormcat24/spark-framework-with-kotlin
Kotlin、Android開発言語に
先見の明
FRESH! + Kotlin ‣ Androidは最初から ‣ 2016年夏から一部Microservicesで利用開始 ‣ OpenFRESH(Developer向けAPI)はKotlin +
SparkFramework ‣ Server Sideの基軸言語に一方的に認定 ‣ フルgRPC化に着手、ServerはもちろんKotlin(イマココ)
さて
皆さんGradle好きですか
僕はpom.xmlが好きです ※ウソです
GradleでKotlin 特に不自由は無いですが
他の選択肢も模索しておきたい
今日はビルドツールの話をします
Kobalt
Kobalt ‣ http://beust.com/kobalt/ ‣ DSL based on Kotlin ‣ ver1.0.87
‣ brew cask install kobalt
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`
kobalt-intellij-plugin ‣ https://github.com/cbeust/kobalt-intellij-plugin
Import to IDEA
Create Project on IDEA
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" } }
Code Completion
Kobalt所感 ‣ Build含めてKotlinで書ける ‣ 必要最小限のプラグインは揃ってる ‣ IDEAサポートちゃんとある ‣ Gradleの資産を使えるわけではない
Bazel
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
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", )
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", ], )
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や実行ファイルができる
Bazel所感 ‣ Release Engineer(ビルド職人)には良さそう ‣ Gradleからスイッチしたいとまでは現時点では思わない ‣ WindowsでAndroidビルドできない等、まだまだ途上 ‣ 1.0安定版は2018年6月予定
‣ IDEAプラグイン、イマイチ使い方わからなかった
Gradle4.0
_人人人人人人人_ > Gradle 4.0 <  ̄Y^Y^Y^Y^Y^Y ̄
Gradle 4.0 ‣ ビルドキャッシュ改善 ‣ —offlineオプション ‣ ローカルキャッシュの自動クリーンアップ ‣ ローカルキャッシュのサイズを設定、FIFOで古いものから削除
‣ 並列ダウンロード ‣ Gradle Script Kotlin 0.9.1
Upgrade to 4.0 $ ./gradlew wrapper --gradle-version=4.0
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
Gradle Kotlin Script ‣ https://github.com/gradle/gradle-script-kotlin ‣ GradleのDSLをKotlinで書くやつ ‣ build.gradleの代わりにbuild.gradle.ktsを書く
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() }
Gradle Kotlin Script所感 ‣ ちょっと勘所掴むまで手こずるかも ‣ IDEAがシンタックスエラーになるケースもある ‣ Kotlinでbuild.gradleを書けるのやっぱり(・∀・)イイ!! ‣
mv build.gradle build.gradle.ktsして、エラー箇所直してくスタイル
まとめ ‣ 他の選択肢を模索したら結局Gradleだったw ‣ 色々ツールあるが、結局はGradleと仲良くやってくのが良さそう ‣ Gradle Kotlin Scriptへの意識高めていこう