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
500
GitHub ActionsとAWSをOIDC認証で連携する
kazuhiro1982
1
230
JavaとWebAssembly
kazuhiro1982
0
150
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
760
SpringBootをコンテナで動かしてみる
kazuhiro1982
0
440
Serverless FrameworkでWebサイトの更新を検知して通知する
kazuhiro1982
0
530
Other Decks in Programming
See All in Programming
片田舎のおっさん、 Swift Buildのダイアモンド問題解決の不具合修正PRを出すが、解決方法がキャッシュをしないようにすることであり、ビルド時間が伸びると言われてマージされないので高速化もする/swiftbuild
yimajo
0
250
楽しそうなつよつよエンジニアと目が死んでる僕/A brilliant engineer having a blast, and dead-eyed me.
3l4l5
2
230
源内ハンズオン概要編
hideg
0
210
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
7
2.1k
freee が目指す データ マネジメント戦略 AI-Ready 時代を支える 攻めのガバナンスとは
freee
PRO
0
460
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
240
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
250
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
350
仕様駆動開発の消費期限
watany
20
8.9k
AWS DevOps AgentのAzure接続機能を検証して見えた活用法/Use Cases Verified for the AWS DevOps Agent's Azure Connectivity Feature
masakiokuda
1
260
複数の Claude Code が"放置"されてしまう問題をCLI ダッシュボードを自作して解決した話
sumihiro3
1
720
Cloudflare is Agents
chimame
0
180
Featured
See All Featured
Prompt Engineering for Job Search
mfonobong
0
410
How STYLIGHT went responsive
nonsquared
100
6.2k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
800
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
290
4 Signs Your Business is Dying
shpigford
187
23k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
440
How to train your dragon (web standard)
notwaldorf
97
6.8k
YesSQL, Process and Tooling at Scale
rocio
174
15k
My Coaching Mixtape
mlcsv
0
260
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 は拡張性の高いビルドツール 上手に活用することで、開発効率を向上させることができる
ありがとうございました