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
Mobile First: as difficult as doing things right
swwweet
222
9k
Speed Design
sergeychernyshev
25
660
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
How STYLIGHT went responsive
nonsquared
95
5.2k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Raft: Consensus for Rubyists
vanstee
136
6.7k
Site-Speed That Sticks
csswizardry
1
180
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
95
17k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
Being A Developer After 40
akosma
87
590k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
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