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
不幸な GC
chencmd
0
610
複数の Claude Code が"放置"されてしまう問題をCLI ダッシュボードを自作して解決した話
sumihiro3
1
720
freee が目指す データ マネジメント戦略 AI-Ready 時代を支える 攻めのガバナンスとは
freee
PRO
0
460
仕様駆動開発の消費期限
watany
20
8.9k
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
0
1.9k
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
350
そこに3びきプロダクトがいるじゃろう——生成AI時代における“価値が届かない理由”の構造
kosuket
0
560
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.7k
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
240
What's New in Android 2026
veronikapj
0
270
仕様駆動開発へのトライを機に チームに適合する手法を模索し続けている話
freee
PRO
0
590
初めての模倣学習とVLA
natsutan
0
180
Featured
See All Featured
Mind Mapping
helmedeiros
PRO
1
330
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
220
The Limits of Empathy - UXLibs8
cassininazir
1
610
Code Reviewing Like a Champion
maltzj
528
40k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
3
470
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Docker and Python
trallard
47
4.1k
Technical Leadership for Architectural Decision Making
baasie
3
520
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.1k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.8k
Being A Developer After 40
akosma
91
590k
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 は拡張性の高いビルドツール 上手に活用することで、開発効率を向上させることができる
ありがとうございました