Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Tour of build system in Kotlin
Search
stormcat24
June 15, 2017
Programming
3.5k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Tour of build system in Kotlin
2017/06/15 CA.kt #1
stormcat24
June 15, 2017
Transcript
36 slides
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への意識高めていこう
More Decks by stormcat24
See All by stormcat24
素早く賢く失敗するDeveloper Productivityの実現を目指して
stormcat24
4
5.5k
KubernetesのマニフェストをそれなりにCIしたい
stormcat24
4
1.6k
令和時代のSaaS開発
stormcat24
1
380
History in 5 years of CircleCI and CyberAgent
stormcat24
3
930
Kubernetes Handson Osaka
stormcat24
5
660
Kubernetes Handson
stormcat24
5
4.6k
DockerとKubernetesでアプリケーション開発にコンテナをフル活用!
stormcat24
0
420
Base Image Journey 2018
stormcat24
30
140k
kotlin-fest
stormcat24
13
19k
Other Decks in Programming
See All in Programming
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
660
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
6
2.3k
Будущее локальных LLM – Алексей Голобурдин, PythoNN
sobolevn
0
120
AI時代のシニアエンジニアとは
yosuke_furukawa
PRO
15
11k
ビジネスロジックを堅牢に~Scala 3のドメインプリミティブ~
j5ik2o
0
140
学びを記事・スライド・Xへ高速展開する― AI-assisted Learning Loopで回すコンテンツ生成術
ochtum
0
210
TS 7.0 で baseUrl が使えなくなった今、パスエイリアスをどうするか
bicstone
2
630
Getting Started with Vibe Coding
miccheng
0
220
高橋メソッドでCVE解説シリーズ 〜CVE-2026-112816〜
hakkadaikon
0
250
AWS CDKを理解するために公式の定義を深掘って解説してみる / Understanding AWS CDK by Digging into Its Official Definition
akihisaikeda
3
300
AmebaブログはKMPから卒業します
kmars0605
0
350
AIがコードを書いてくれる時代、我々は何を確かめるのか
yosuke_furukawa
PRO
13
5.9k
Featured
See All Featured
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
60k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
4
1.2k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
750
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Crafting Experiences
bethany
1
440
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
350
Game over? The fight for quality and originality in the time of robots
wayneb77
1
330
How to build a perfect <img>
jonoalderson
1
6.2k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
A Tale of Four Properties
chriscoyier
163
24k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
610