Slide 1

Slide 1 text

ビルドプロセスをデバッグしよ う! 2025/11/1 Kotlin Fest 2025

Slide 2

Slide 2 text

自己紹介 HN: マヤミト 本名: 富山雄太 Kotlin Fest運営 DMMでAndroidエンジニアをしています GitHub: https://github.com/yt8492 趣味: Kotlin, Twitter, 同人, 車 Twitter: yt8492

Slide 3

Slide 3 text

今回のセッションの想定受講対象者 ● Kotlin開発中級者以上 ● IntelliJ IDEAの基本的な使い方がわかる ○ 特にDebugger ● Gradleの基礎がわかる ○ 自力でbuild.gradle.ktsなどのビルドスクリプトが書ける ● 単純なコンパイルエラー以外のビルド時のエラーで困ったことがある ● KMPなどで、ビルド結果(Objective-CやJavaScriptなど)が意図したようにならず に疑問を抱いたことがある

Slide 4

Slide 4 text

皆さんはこんな経験ありませんか? ● Gradleでカスタムのタスクを書いてみたけどうまく動かない ● ビルドスクリプトのリファクタリングをして、意図通りに動いているか確かめたい ● プロジェクトにGradleプラグインを導入しようとしたらよくわからないエラーが出る ● KMPで生成されるコードに納得がいかない

Slide 5

Slide 5 text

ぼくの実体験 ● Gradle Convention Pluginを初めて書いたときに、意図通りに動いているか確か めたかった ○ (printデバッグでも良かったんだけど、ログを見るのが面倒くさかった ) ● 導入したGradleプラグインが自分の意図通りに動かなくて原因を確かめたかった ○ ビルドエラーにならないのがポイント ● KMPでObjective-Cを生成する際に、Kotlinのバージョンを上げるたびにある型 のプロパティ名のsuffixが増減してビルドが通らなくなる問題を改善したかった

Slide 6

Slide 6 text

● build.gradle.ktsに書いたビルドスクリプト ● pluginsで追加したGradleプラグイン ● Kotlinコンパイラー これらの挙動は、通常のKotlinプログラムと同じようにIntelliJ IDEAの Debuggerでデバッグできます

Slide 7

Slide 7 text

ビルドプロセスのデバッグの手順 1. デバッグしたい対象のプロジェクトをIntelliJ IDEA(※1)で開く 2. 目的の処理にブレークポイントを貼る 3. ビルド自体のデバッグを有効にするオプションをtrueにしてGradleタスクを実行す る 4. IntelliJ IDEAのRemote JVM DebugのDebuggerをAttachする これだけ ※1: Android Studioも含みます

Slide 8

Slide 8 text

Gradleのビルドプロセスのデバッグを有効にする方法 ./gradlew $task -Dorg.gradle.debug=true ● -Dorg.gradle.debug=true でビルドプロセスのデバッグが有効になる ● これをデバッグしたいGradleタスクにオプションでつけて実行すると、Debuggerの 接続待機状態になり、Debuggerが接続されるとタスクの実行が始まる ● デフォルトだとポート5005でDebuggerの接続を待ち受けるが、ポートを変更した い場合は -Dorg.gradle.debug.port=5006 のように指定する 参考: https://docs.gradle.org/current/userguide/troubleshooting.html#sec:troubleshooting_build_logic

Slide 9

Slide 9 text

Gradleのビルドプロセスのデバッグを有効にする方法

Slide 10

Slide 10 text

デバッグを有効にする際のちょっとしたコツ ./gradlew clean $task -Dorg.gradle.debug=true --no-daemon ● 前回のビルドの結果が残っているとビルドのタスクがスキップされることがあるた め、目的のタスクの前にcleanを挟む ● デーモンが有効な状態でデバッグを有効にして実行すると、2回目以降の実行で Debuggerの接続を待ってくれないことがあるため、--no-daemonをつけて実行 する

Slide 11

Slide 11 text

IntelliJ IDEAのDebuggerの設定 Run -> Edit Configurations… を開く

Slide 12

Slide 12 text

IntelliJ IDEAのDebuggerの設定 Add New ConfigurationからRemote JVM Debugを選択

Slide 13

Slide 13 text

IntelliJ IDEAのDebuggerの設定 各種項目はデフォルトのままでOK(タスク起動時にportを指定する場合は変更)

Slide 14

Slide 14 text

Debuggerを起動する 前述の手順で作成したRemote JVM Debugのconfigurationを選択、通常のアプリ ケーションのデバッグ時と同じようにDebuggerを起動する

Slide 15

Slide 15 text

いくつかのパターンごとにデバッグのポイントを紹介 1. 自分のプロジェクトのビルドスクリプトをデバッグしたい場合 2. プロジェクトに導入したGradleプラグインをデバッグしたい場合 3. Kotlinコンパイラーをデバッグしたい場合

Slide 16

Slide 16 text

自分のプロジェクトのデバッグしたい場合 ● 手元のIntelliJ IDEAでプロジェクトを開き、通常のアプリケーションのデバッグと同 じように目的の処理にブレークポイントを貼る ● プロジェクト内でRemote JVM DebugのConfigurationを作成し、前述の手順でタ スクを起動、Debuggerを起動する ○ 一番簡単なユースケース ○ ブレークポイントを貼る場所がアプリケーションコードからビルドスクリプトに変わっただけ ○ build.gradle.ktsでもbuildSrcやconvention pluginでも同じ

Slide 17

Slide 17 text

自分のプロジェクトのデバッグしたい場合

Slide 18

Slide 18 text

自分のプロジェクトのデバッグしたい場合

Slide 19

Slide 19 text

Gradleプラグインをデバッグしたい場合 ● デバッグしたいGradleプラグインのリポジトリをローカルにcloneする ● 手元のプロジェクトで利用しているバージョンにgit checkoutする ● Gradleプラグインのリポジトリ をIntelliJ IDEAで開き、目的の処理にブレークポイ ントを貼り、Remote JVM DebugのConfigurationを作成する ○ 目的のGradleタスクの実装を探す ● 手元のプロジェクト のGradleタスクをデバッグを有効にして実行する ● Gradleプラグインのリポジトリ のDebuggerを起動する

Slide 20

Slide 20 text

目的のGradleタスク名でコード検索すると目的の実装を見つけやすいかも Gradleプラグインをデバッグしたい場合

Slide 21

Slide 21 text

Kotlinコンパイラーをデバッグしたい場合 ● Kotlin自体のリポジトリをローカルにcloneする ● 手元のプロジェクトで利用しているバージョンにgit checkoutする ● Kotlinリポジトリ をIntelliJ IDEAで開き、目的の処理にブレークポイントを貼り、 Remote JVM DebugのConfigurationを作成する ○ Kotlinコンパイラーの構成を把握していると目的の処理を見つけやすい ■ おすすめ記事: Kotlinコンパイラの全体像を理解する https://zenn.dev/tommykw/articles/69c64b13d8aec4 ● 手元のプロジェクト のGradleタスクをデバッグを有効にして実行する ● Kotlinリポジトリ のDebuggerを起動する

Slide 22

Slide 22 text

Kotlinコンパイラーをデバッグしたい場合

Slide 23

Slide 23 text

Kotlinコンパイラーをデバッグしたい場合 ● たとえばKotlinの定義からObjective-Cのコードを生成する部分をデバッグする場 合、ただブレークポイントを貼るだけだとすべての定義に対して実行が止まってしま う ● ブレークポイントの設定で条件を追加して目的の処理だけで止まるようにするなど の工夫が必要 ○ おすすめ資料: Debugging: All You Need to Know https://2024.droidkaigi.jp/timetable/694440/

Slide 24

Slide 24 text

(おさらい)ビルドプロセスのデバッグの手順 1. デバッグしたい対象のプロジェクトをIntelliJ IDEAで開く 2. 目的の処理にブレークポイントを貼る 3. ビルド自体のデバッグを有効にするオプションをtrueにしてGradleタスクを実行す る 4. IntelliJ IDEAのRemote JVM DebugのDebuggerをAttachする

Slide 25

Slide 25 text

まとめ ● Gradleのビルドプロセスはデバッグできる ○ 自分のプロジェクトのコードだけでなく、 Gradleプラグインやコンパイラーのコードも ○ Remote JVM Debug と -Dorg.gradle.debug=true を使う ● デバッグの手法は通常のアプリケーションコードのデバッグと同じ ○ まずはブレークポイントを貼る場所を決める ○ 複雑なものはブレークポイントの設定で条件を絞る ● 「プラグイン側だから」や「コンパイラー側だから」と諦めず、困ったときにはビルドプ ロセスのデバッグも選択肢として持ってみてください