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
Gradleとちょっと仲良くなろう
Search
Kazuhiro Seo
December 29, 2024
Programming
120
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Gradleとちょっと仲良くなろう
Kazuhiro Seo
December 29, 2024
More Decks by Kazuhiro Seo
See All by Kazuhiro Seo
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
510
GitHub ActionsとAWSをOIDC認証で連携する
kazuhiro1982
1
230
JavaとWebAssembly
kazuhiro1982
0
160
SpringBoot 3.0 のNative Imageを試してみた
kazuhiro1982
0
460
セッションデータの管理にSpring Sessionを利用する
kazuhiro1982
0
3.6k
AWSのLake Formation Governed Tablesを触ってみた
kazuhiro1982
0
460
VS CodeとRemote Containerで開発環境もコード管理しよう
kazuhiro1982
1
770
SpringBootをコンテナで動かしてみる
kazuhiro1982
0
440
Serverless FrameworkでWebサイトの更新を検知して通知する
kazuhiro1982
0
540
Other Decks in Programming
See All in Programming
Jindong: Introducing Declarative Haptics in Compose Multiplatform
l2hyunwoo
0
140
Dockerfile CMD for Node.js
grazie1999
0
160
이 함수, 실패하면 어떻게 되나요? null부터 Rich Errors까지, Kotlin 에러 처리 15년
haeti2
0
110
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
790
[DroidKaigi 26] How We Moved from Android Studio to Slack
thisaay
0
150
MySQLとPostgreSQLって何が違うの?
akagami
0
150
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
650
楽しそうなつよつよエンジニアと目が死んでる僕/A brilliant engineer having a blast, and dead-eyed me.
3l4l5
2
270
書籍「プロフェッショナルAI駆動開発」紹介スライド
juntaromatsumoto
0
880
kubernetes コンポーネント開発入門 / 新卒N年目の勉強会&交流会!〜〇〇への誘い〜 #n_study
mazrean
0
130
週末にAI-DLCを本気で回したら$1,600溶けた
hbashimizu
0
120
PHPプロジェクトの結合バランスを可視化する #php_night
kajitack
0
190
Featured
See All Featured
Are puppies a ranking factor?
jonoalderson
2
3.9k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
490
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
710
It's Worth the Effort
3n
188
29k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
990
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Transcript
Gradle とちょっと仲良くなろう
自己紹介 妹尾一弘 サーバーサイドエンジニア Java Do スタッフ 来年の目標 心穏やかに過ごしたい
Gradle 前回のJavaDo でモブプロを実施 多くのチームでGradle を扱った 人によって馴染みが無い人もいた 改めてGradle を学んでみるのもよいのでは? 本日のテーマ
今日のゴール Gradle とちょっと仲良くなる Gradle がやっていることの解像度を上げる なんとなく使っている状態から一歩抜け出す
アジェンダ About Gradle : Gradle 概要 Walk Around : 基本的な構成・機能
Various Uses : 様々な利用例
About Gradle
Gradle ビルドツール 他にはAnt やMaven などがある
ビルドとは ソースコードファイルや各種リソースファイルを独 立したソフトウェア生成物に変換するコンピュータ 上で実行されるプロセス、またはその結果 ⇒ 設計図であるソースコードから 動くものを作るために必要な作業のすべて 具体的には.. コンパイル 依存ライブラリのダウンロード&リンク
( 場合によっては) テストの実行 リソースファイルのパッケージング などが含まれることがある
ビルドツールとは ビルド作業全般を支援するツール 幅広く多機能になりやすい 全体像を把握しにくい 職人が作成した設定を使い回すだけになりがち
Gradle の特徴 DSL(Domain Specific Language) を採用 プログラミングに近い記述でビルド設定を記述できる プラグインを利用して機能を追加できる 柔軟にビルド設定ができる
Gradle のDSL は現在2 種類 Groovy Kotlin 初期からのDSL 比較的最近登場したDSL 動的型付け言語 静的型付け言語
サンプルやドキュメントが豊富 IDE のサポートが強い
Walk Around
settings.gradle プロジェクト設定を記述 rootProject.name = "gradle-sample" include("app")
build.gradle ビルド設定を記述 plugins { application } repositories { mavenCentral() }
dependencies { testImplementation(libs.junit.jupiter) testRuntimeOnly("org.junit.platform:junit-platform-launc implementation(libs.guava) }
None
Gradle の基本構造 build.gradle
Gradle Wrapper Gradle のバージョンを固定してチームで共有するためのツール プロジェクトに同梱して使う プロジェクトのビルドに必要なGradle を自動でダウンロードしてくれる 何が嬉しいのか ユーザーごとにGradle をインストールする必要がない
CI/CD 環境での利用が容易 . ├── gradle │ └── wrapper │ ├── gradle-wrapper.jar # Wrapper 本体 │ └── gradle-wrapper.properties # バージョンなどを指定 ├── gradlew # Unix 用 Wrapper 起動スクリプト └── gradlew.bat # Windows 用 Wrapper 起動スクリプト
Various Uses 用法用量を守ってお使いください
制御構文の利用 dependencies { implementation("org.springframework.boot:spring-boot-starter-web") ... if (System.getProperty("os.name").lowercase().contains("mac") && System.getProperty("os.arch").lowercase().contains("aarch64")) {
runtimeOnly("io.netty:netty-resolver-dns-native-macos:4.1.114.Final:osx-aarch_64") } }
toml でバージョンを管理 gradle.build libs.version.toml [versions] mysql-connector = "8.4.0" flyway-version =
"11.1.0" [libraries] mysql-connector = { module = "com.mysql:mysql-connector-j", version.ref = "mysql-connector" } flyway-mysql = { module = "org.flywaydb:flyway-mysql", version.ref = "flyway-version" } flyway-core = { module = "org.flywaydb:flyway-core", version.ref = "flyway-version" } dependencies { implementation(libs.mysql.connector) implementation(libs.flyway.core) }
カスタムタスクの定義 独自のタスクを作成できる tasks.register("generateRandomStrings") { description = " ダミーユーザー用パスワードを生成" val chars
= ('a'..'z') + ('A'..'Z') + ('0'..'9') val randomPasswd = (1..32).map { chars.random() }.joinToString("") println("Password: $randomPasswd") }
既存タスクの複製・カスタマイズ 既存のタスクから新しいタスクを登録できる import org.springframework.boot.gradle.tasks.run.BootRun tasks.register<BootRun>("bootRun For E2E") { group =
"application" description = "E2E テスト用のプロファイルを利用して起動" val bootRunTask = tasks.named<BootRun>("bootRun").get() mainClass.set(bootRunTask.mainClass) classpath = bootRunTask.classpath systemProperty("spring.config.location", "classpath:/application-test.yaml") }
依存関係の制御 それぞれのタスクで、どのタスクに依存しているか定 義されている build check assemble bootDistTar bootJar bootDistZip test
compileJava タスクには依存関係がある
タスクの実行順序 有向非巡回グラフ(DAG) を利用して実行順序を決定して いる # 特定のタスクを実行すると、依存関係にあるタスクが順次実行される ./gradlew build --dry-run
依存関係を明示する 独自の依存関係を明示的に定義できる tasks.named("generateJooq") { dependsOn(tasks.named("flywayMigrate")) }
Build Scan 注意点 発行されるURL は認証されない コンソールログもアップロードされる DEVELOCITY # ビルドの詳細情報を取得できる ./gradlew
build --scan
まとめ ビルドは、成果物を作るために必要なプロセスをカバーする Gradle は拡張性の高いビルドツール 上手に活用することで、開発効率を向上させることができる
ありがとうございました