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
Convention Plugin を通して学ぶ Gradle Plugin入門
Search
bayastea
December 06, 2024
1
65
Convention Plugin を通して学ぶ Gradle Plugin入門
2024/12/06に行われたshibuya.apk #50 の5分枠(登壇初めての方優先)にて発表したスライドです。
bayastea
December 06, 2024
Tweet
Share
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
94
13k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Adopting Sorbet at Scale
ufuk
73
9.1k
Building Adaptive Systems
keathley
38
2.3k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.3k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
800
A Philosophy of Restraint
colly
203
16k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Transcript
@MIXI shibuya.apk #50 2024.12.06 ConventionPluginを通して学ぶ Gradle Plugin入門 1
自己紹介 • ばやすてぃー(髙林明日美) ▪ X: @bayastea • Androidエンジニア @株式会社MIXI ▪
サロンスタッフ直接予約アプリ「minimo」開発
minimoについて
目次 • Plugin概説 ◦ Pluginの種類 ◦ Custom Plugins • Convention
Plugins ◦ 作成手順 • まとめ
Plugin概説 - Pluginの種類 • Core plugins ◦ Gradleから提供されるPlugin • Community
plugins ◦ Gradle Plugin Portal等から入手できる公開されたPlugin • Custom plugins ◦ 自分で作ったPlugin https://docs.gradle.org/current/userguide/plugins.html https://docs.gradle.org/current/userguide/plugins.html Gradle Plugin:ビルドプロセスを拡張・カスタマイズするためのもの
Plugin概説 - Custom plugins • Script Plugin ◦ プラグインは自動的にコンパイルされ、ビルドスクリプトのクラスパスに含まれる ◦
使用の際はapply from 構文を使う ◦ 使用は非推奨 • Precompiled Plugin ◦ プラグインは自動的にコンパイルされ、テストされ、ビルドスクリプトのクラスパスで利用可能になる ◦ 使用の際はplugins { } ブロックを使う ◦ Kotlin DSLまたはGroovy DSLを用いてプラグインを作成する • Binary Plugin ◦ Plugin JARが作成され公開される ◦ 使用する際はplugins{ } ブロックを使う ◦ パフォーマンスや保守性は他の 2つよりも上 ◦ 今回はこちらを使用 https://docs.gradle.org/current/userguide/plugins.html https://docs.gradle.org/current/userguide/custom_plugins.html#custom_plugins_2
Convention Plugin - 1 • 複数のモジュールに共通するビルドロジックをカプセル化して作成したプラグインのこと • ビルドロジックを共通化して各モジュールで使用することができるので、build.gradle内の記述量 を減らすことができる https://docs.gradle.org/current/userguide/sharing_build_logic_between_subprojects.html#sec:sharing_logic_via_convention_plugins
Convention Plugin - 2 • buildSrc内で Convention Pluginを実装する やり方もあるが、buildSrcにはいくつか落とし 穴がある
▪ ビルドのたびにコンパイル・テストが実行される (Gradle8以降では多少改善) ▪ 小さな変更がプロジェクト全体に影響を及ぼし、実行時 間が延びる • 主流はComposite build + Convention Plugin ▪ Now In AndroidもComposite buildを使用している • Composite build = ビルドを含んだビルド ▪ マルチモジュールのsubprojectsに似ているが、ビル ド全体を含んでいる点が異なる • そのためComposite buildでは settings.gradleを追加する必要がある https://docs.gradle.org/current/userguide/composite_builds.html https://developer.squareup.com/blog/herding-elephants/#from-buildsrc-to-build-logic https://speakerdeck.com/mkeeda/5fen-defen-karubirudorozitukugong-tong-hua-nojin?slide=8
作成手順 1. モジュールを作る 2. settings.gradleの整備 ◦ モジュール内のsettings.gradlePlugin実装 3. build.gradleに作成したPluginを登録 4.
使用側で呼び出す
モジュールの作成 build-logicモジュールを作成 • Android Studioの 「New Module…」を使うといら ないファイルも生成されてしまうので、普通にディ レクトリを作る方が楽 https://github.com/android/nowinandroid/tree/fe4e8ec7c1b4438cda8d3cd7962ebc7b407f2263/build-logic
settings.gradleの整備 - モジュール内のsettings.gradle build-logic > settings.gradleに必要事項を記載 • versionCatalogの設定 ◦ プロジェクトのVersionCatalogを参
照したい場合は必要 • 作成するディレクトリの定義 dependencyResolutionManagement { // versionCatalogの設定 versionCatalogs { create("libs") { from(files("/./gradle/libs.versions.toml")) } } } // 作成するディレクトリの定義 include(":convention")
settings.gradleの整備 - プロジェクト側のsettings.gradle root > settings.gradleで追加した モジュールを定義する • pluginManagementブロックに書く必要 があるので注意
pluginManagement { includeBuild("build-logic") }
Pluginの実装 class TestPlugin : Plugin<Project> { override fun apply(target: Project)
{ println("convention plugin test!") } } Pluginインターフェースを継承し、apply関数の中に実装内容を書いていく
build.gradleに作成したPluginを登録 (前略) gradlePlugin { plugins { // 作成したPluginを登録する register("TestPlugin") {
// PluginのIDを定義 id = "test.convention" // Pluginを実装したクラスを記載 implementationClass = "TestPlugin" } } } 作成したプラグインを登録する build-logic > convention > build.gradle.kts
使用側で呼び出す plugins { id("test.convention") } build-logic > convention > build.gradle
にて定義したIDを記載することで Convention Pluginが利用可能 使用したいモジュール > build.gradle.kts
実行結果 > Configure project : convention plugin test!
まとめ • Gradle Pluginは自分で作ることができる • Convention Pluginを使うとbuild.gradle内の記述を共通化することができる • Convention Pluginを実装する場合はComposite
buildを使うのが主流 • Composite build + Convention Pluginで作成する際は下記の手順で行う ▪ モジュールを作る ▪ settings.gradleの整備 ▪ build.gradleに作成したPluginを登録 ▪ 使用側で呼び出す
@MIXI