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

ビルドプロセスをデバッグしよう!

 ビルドプロセスをデバッグしよう!

2025/11/1 Kotlin Fest 2025 にて発表

Avatar for Yuta Tomiyama

Yuta Tomiyama

November 01, 2025
Tweet

More Decks by Yuta Tomiyama

Other Decks in Programming

Transcript

  1. 今回のセッションの想定受講対象者 • Kotlin開発中級者以上 • IntelliJ IDEAの基本的な使い方がわかる ◦ 特にDebugger • Gradleの基礎がわかる

    ◦ 自力でbuild.gradle.ktsなどのビルドスクリプトが書ける • 単純なコンパイルエラー以外のビルド時のエラーで困ったことがある • KMPなどで、ビルド結果(Objective-CやJavaScriptなど)が意図したようにならず に疑問を抱いたことがある
  2. ぼくの実体験 • Gradle Convention Pluginを初めて書いたときに、意図通りに動いているか確か めたかった ◦ (printデバッグでも良かったんだけど、ログを見るのが面倒くさかった ) •

    導入したGradleプラグインが自分の意図通りに動かなくて原因を確かめたかった ◦ ビルドエラーにならないのがポイント • KMPでObjective-Cを生成する際に、Kotlinのバージョンを上げるたびにある型 のプロパティ名のsuffixが増減してビルドが通らなくなる問題を改善したかった
  3. 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
  4. デバッグを有効にする際のちょっとしたコツ ./gradlew clean $task -Dorg.gradle.debug=true --no-daemon • 前回のビルドの結果が残っているとビルドのタスクがスキップされることがあるた め、目的のタスクの前にcleanを挟む •

    デーモンが有効な状態でデバッグを有効にして実行すると、2回目以降の実行で Debuggerの接続を待ってくれないことがあるため、--no-daemonをつけて実行 する
  5. Gradleプラグインをデバッグしたい場合 • デバッグしたいGradleプラグインのリポジトリをローカルにcloneする • 手元のプロジェクトで利用しているバージョンにgit checkoutする • Gradleプラグインのリポジトリ をIntelliJ IDEAで開き、目的の処理にブレークポイ

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

    Remote JVM DebugのConfigurationを作成する ◦ Kotlinコンパイラーの構成を把握していると目的の処理を見つけやすい ▪ おすすめ記事: Kotlinコンパイラの全体像を理解する https://zenn.dev/tommykw/articles/69c64b13d8aec4 • 手元のプロジェクト のGradleタスクをデバッグを有効にして実行する • Kotlinリポジトリ のDebuggerを起動する
  7. まとめ • Gradleのビルドプロセスはデバッグできる ◦ 自分のプロジェクトのコードだけでなく、 Gradleプラグインやコンパイラーのコードも ◦ Remote JVM Debug

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