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.2k
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
5k
KubernetesのマニフェストをそれなりにCIしたい
stormcat24
4
1.4k
令和時代のSaaS開発
stormcat24
1
280
History in 5 years of CircleCI and CyberAgent
stormcat24
3
860
Kubernetes Handson Osaka
stormcat24
5
590
Kubernetes Handson
stormcat24
5
4.3k
DockerとKubernetesでアプリケーション開発にコンテナをフル活用!
stormcat24
0
330
Base Image Journey 2018
stormcat24
29
140k
kotlin-fest
stormcat24
13
18k
Other Decks in Programming
See All in Programming
Railsアプリケーションと パフォーマンスチューニング ー 秒間5万リクエストの モバイルオーダーシステムを支える事例 ー Rubyセミナー 大阪
falcon8823
4
1k
エラーって何種類あるの?
kajitack
5
340
#kanrk08 / 公開版 PicoRubyとマイコンでの自作トレーニング計測装置を用いたワークアウトの理想と現実
bash0c7
1
670
ペアプロ × 生成AI 現場での実践と課題について / generative-ai-in-pair-programming
codmoninc
0
630
PHPで始める振る舞い駆動開発(Behaviour-Driven Development)
ohmori_yusuke
2
240
5つのアンチパターンから学ぶLT設計
narihara
1
140
なぜ適用するか、移行して理解するClean Architecture 〜構造を超えて設計を継承する〜 / Why Apply, Migrate and Understand Clean Architecture - Inherit Design Beyond Structure
seike460
PRO
1
720
Azure AI Foundryではじめてのマルチエージェントワークフロー
seosoft
0
150
AIコーディング道場勉強会#2 君(エンジニア)たちはどう生きるか
misakiotb
1
280
データの民主化を支える、透明性のあるデータ利活用への挑戦 2025-06-25 Database Engineering Meetup#7
y_ken
0
340
Discover Metal 4
rei315
2
110
プロダクト志向ってなんなんだろうね
righttouch
PRO
0
180
Featured
See All Featured
Navigating Team Friction
lara
187
15k
Building a Modern Day E-commerce SEO Strategy
aleyda
42
7.4k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Optimising Largest Contentful Paint
csswizardry
37
3.3k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.5k
RailsConf 2023
tenderlove
30
1.1k
Producing Creativity
orderedlist
PRO
346
40k
Being A Developer After 40
akosma
90
590k
How to Think Like a Performance Engineer
csswizardry
24
1.7k
What's in a price? How to price your products and services
michaelherold
246
12k
Why Our Code Smells
bkeepers
PRO
337
57k
Raft: Consensus for Rubyists
vanstee
140
7k
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への意識高めていこう