Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Convention Plugin を通して学ぶ Gradle Plugin入門

bayastea
December 06, 2024
65

Convention Plugin を通して学ぶ Gradle Plugin入門

2024/12/06に行われたshibuya.apk #50 の5分枠(登壇初めての方優先)にて発表したスライドです。

bayastea

December 06, 2024
Tweet

Transcript

  1. 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:ビルドプロセスを拡張・カスタマイズするためのもの
  2. 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
  3. 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
  4. settings.gradleの整備 - モジュール内のsettings.gradle build-logic > settings.gradleに必要事項を記載 • versionCatalogの設定 ◦ プロジェクトのVersionCatalogを参

    照したい場合は必要 • 作成するディレクトリの定義 dependencyResolutionManagement { // versionCatalogの設定 versionCatalogs { create("libs") { from(files("/./gradle/libs.versions.toml")) } } } // 作成するディレクトリの定義 include(":convention")
  5. Pluginの実装 class TestPlugin : Plugin<Project> { override fun apply(target: Project)

    { println("convention plugin test!") } } Pluginインターフェースを継承し、apply関数の中に実装内容を書いていく
  6. build.gradleに作成したPluginを登録 (前略) gradlePlugin { plugins { // 作成したPluginを登録する register("TestPlugin") {

    // PluginのIDを定義 id = "test.convention" // Pluginを実装したクラスを記載 implementationClass = "TestPlugin" } } } 作成したプラグインを登録する build-logic > convention > build.gradle.kts
  7. 使用側で呼び出す plugins { id("test.convention") } build-logic > convention > build.gradle

    にて定義したIDを記載することで Convention Pluginが利用可能 使用したいモジュール > build.gradle.kts
  8. まとめ • Gradle Pluginは自分で作ることができる • Convention Pluginを使うとbuild.gradle内の記述を共通化することができる • Convention Pluginを実装する場合はComposite

    buildを使うのが主流 • Composite build + Convention Pluginで作成する際は下記の手順で行う ▪ モジュールを作る ▪ settings.gradleの整備 ▪ build.gradleに作成したPluginを登録 ▪ 使用側で呼び出す