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
130
Convention Plugin を通して学ぶ Gradle Plugin入門
2024/12/06に行われたshibuya.apk #50 の5分枠(登壇初めての方優先)にて発表したスライドです。
bayastea
December 06, 2024
Tweet
Share
More Decks by bayastea
See All by bayastea
可読性の低いコードを生み出してしまった時の反省記録 with レガシーコード
bayastea
1
67
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
PRO
50
11k
Navigating Team Friction
lara
183
15k
Adopting Sorbet at Scale
ufuk
74
9.2k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.1k
How GitHub (no longer) Works
holman
314
140k
Visualization
eitanlees
146
15k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Typedesign – Prime Four
hannesfritz
40
2.5k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
BBQ
matthewcrist
87
9.5k
YesSQL, Process and Tooling at Scale
rocio
172
14k
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