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
110
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
450
GitHub ActionsとAWSをOIDC認証で連携する
kazuhiro1982
1
220
JavaとWebAssembly
kazuhiro1982
0
150
SpringBoot 3.0 のNative Imageを試してみた
kazuhiro1982
0
460
セッションデータの管理にSpring Sessionを利用する
kazuhiro1982
0
3.5k
AWSのLake Formation Governed Tablesを触ってみた
kazuhiro1982
0
450
VS CodeとRemote Containerで開発環境もコード管理しよう
kazuhiro1982
1
760
SpringBootをコンテナで動かしてみる
kazuhiro1982
0
430
Serverless FrameworkでWebサイトの更新を検知して通知する
kazuhiro1982
0
530
Other Decks in Programming
See All in Programming
Build-to-own AI: Agentic Development for Humans
inesmontani
PRO
0
160
数百円から始めるRuby電子工作
tarosay
0
120
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
200
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
490
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
130
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
200
音楽のための関数型プログラミング言語mimiumにおける多段階計算の活用
tomoyanonymous
1
380
SREの積み重ねがAI駆動開発のガードレールになった ― 7つの実践/SRE Guardrails The 7
tomoyakitaura
9
5.9k
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
160
Google Apps Script で Ruby を動かす
kawahara
0
120
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
570
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
17k
Featured
See All Featured
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.2k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
370
Docker and Python
trallard
47
4k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
750
Building Adaptive Systems
keathley
44
3.2k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
560
Java REST API Framework Comparison - PWX 2021
mraible
34
9.6k
WCS-LA-2024
lcolladotor
0
780
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
310
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
600
The Language of Interfaces
destraynor
162
27k
Un-Boring Meetings
codingconduct
0
360
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 は拡張性の高いビルドツール 上手に活用することで、開発効率を向上させることができる
ありがとうございました