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
GitHub ActionsとAWSをOIDC認証で連携する
kazuhiro1982
1
210
JavaとWebAssembly
kazuhiro1982
0
150
SpringBoot 3.0 のNative Imageを試してみた
kazuhiro1982
0
450
セッションデータの管理にSpring Sessionを利用する
kazuhiro1982
0
3.4k
AWSのLake Formation Governed Tablesを触ってみた
kazuhiro1982
0
440
VS CodeとRemote Containerで開発環境もコード管理しよう
kazuhiro1982
1
750
SpringBootをコンテナで動かしてみる
kazuhiro1982
0
430
Serverless FrameworkでWebサイトの更新を検知して通知する
kazuhiro1982
0
530
Other Decks in Programming
See All in Programming
はてなアカウント基盤 State of the Union
cockscomb
1
1.3k
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
SLOをサービス品質の共通言語にするために 取り組んできたこと
wakana0222
0
380
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
3
640
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
360
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
3
830
スマートグラスで並列バイブコーディング
hyshu
0
280
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
160
初めてのKubernetes 本番運用でハマった話
oku053
0
120
act1-costs.pdf
sumedhbala
0
170
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
220
ランチタイムLT会3周年!ランチタイムLT会を3年間続けられたお話
y0hgi
1
130
Featured
See All Featured
The agentic SEO stack - context over prompts
schlessera
0
840
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
320
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
420
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
150
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Side Projects
sachag
455
43k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Discover your Explorer Soul
emna__ayadi
2
1.2k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
300
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
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 は拡張性の高いビルドツール 上手に活用することで、開発効率を向上させることができる
ありがとうございました