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
ビルドプロセスをデバッグしよう!
Search
Yuta Tomiyama
November 01, 2025
Programming
0
260
ビルドプロセスをデバッグしよう!
2025/11/1 Kotlin Fest 2025 にて発表
Yuta Tomiyama
November 01, 2025
Tweet
Share
More Decks by Yuta Tomiyama
See All by Yuta Tomiyama
モバイルアプリ開発を始めよう!
yt8492
0
71
Git勉強会
yt8492
0
160
なんでもやってみる勇気
yt8492
0
100
Android Autoが思ったよりしんどい話
yt8492
0
210
apollo-kotlinにcontributeした話
yt8492
0
150
DMM TVのSDカードダウンロード機能を実装した話
yt8492
1
870
今だからこそ知りたいKotlin Multiplatform
yt8492
0
300
State management and API calls in Jetpack Compose: Learning Apollo + Jetpack Compose through React Hooks
yt8492
0
1.3k
サーバーフレームワークの仕組みが気になったので車輪の再発明をしてみた
yt8492
0
210
Other Decks in Programming
See All in Programming
Claude Agent SDK を使ってみよう
hyshu
0
1.5k
フロントエンド開発のためのブラウザ組み込みAI入門
masashi
7
3.7k
Introduce Hono CLI
yusukebe
6
3.4k
Reactive Thinking with Signals and the Resource API
manfredsteyer
PRO
0
120
Node-REDのノードの開発・活用事例とコミュニティとの関わり(Node-RED Con Nagoya 2025)
404background
0
120
組織もソフトウェアも難しく考えない、もっとシンプルな考え方で設計する #phpconfuk
o0h
PRO
8
3.1k
contribution to astral-sh/uv
shunsock
0
580
MCPサーバー「モディフィウス」で変更容易性の向上をスケールする / modifius
minodriven
4
1.1k
エンジニアに事業やプロダクトを理解してもらうためにやってること
murabayashi
0
130
SODA - FACT BOOK(JP)
sodainc
1
9.3k
CSC305 Lecture 13
javiergs
PRO
0
370
CSC509 Lecture 11
javiergs
PRO
0
290
Featured
See All Featured
Bash Introduction
62gerente
615
210k
Designing for humans not robots
tammielis
254
26k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
How STYLIGHT went responsive
nonsquared
100
5.9k
Thoughts on Productivity
jonyablonski
73
4.9k
[RailsConf 2023] Rails as a piece of cake
palkan
57
6k
Designing for Performance
lara
610
69k
BBQ
matthewcrist
89
9.9k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Typedesign – Prime Four
hannesfritz
42
2.9k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6k
Transcript
ビルドプロセスをデバッグしよ う! 2025/11/1 Kotlin Fest 2025
自己紹介 HN: マヤミト 本名: 富山雄太 Kotlin Fest運営 DMMでAndroidエンジニアをしています GitHub: https://github.com/yt8492
趣味: Kotlin, Twitter, 同人, 車 Twitter: yt8492
今回のセッションの想定受講対象者 • Kotlin開発中級者以上 • IntelliJ IDEAの基本的な使い方がわかる ◦ 特にDebugger • Gradleの基礎がわかる
◦ 自力でbuild.gradle.ktsなどのビルドスクリプトが書ける • 単純なコンパイルエラー以外のビルド時のエラーで困ったことがある • KMPなどで、ビルド結果(Objective-CやJavaScriptなど)が意図したようにならず に疑問を抱いたことがある
皆さんはこんな経験ありませんか? • Gradleでカスタムのタスクを書いてみたけどうまく動かない • ビルドスクリプトのリファクタリングをして、意図通りに動いているか確かめたい • プロジェクトにGradleプラグインを導入しようとしたらよくわからないエラーが出る • KMPで生成されるコードに納得がいかない
ぼくの実体験 • Gradle Convention Pluginを初めて書いたときに、意図通りに動いているか確か めたかった ◦ (printデバッグでも良かったんだけど、ログを見るのが面倒くさかった ) •
導入したGradleプラグインが自分の意図通りに動かなくて原因を確かめたかった ◦ ビルドエラーにならないのがポイント • KMPでObjective-Cを生成する際に、Kotlinのバージョンを上げるたびにある型 のプロパティ名のsuffixが増減してビルドが通らなくなる問題を改善したかった
• build.gradle.ktsに書いたビルドスクリプト • pluginsで追加したGradleプラグイン • Kotlinコンパイラー これらの挙動は、通常のKotlinプログラムと同じようにIntelliJ IDEAの Debuggerでデバッグできます
ビルドプロセスのデバッグの手順 1. デバッグしたい対象のプロジェクトをIntelliJ IDEA(※1)で開く 2. 目的の処理にブレークポイントを貼る 3. ビルド自体のデバッグを有効にするオプションをtrueにしてGradleタスクを実行す る 4.
IntelliJ IDEAのRemote JVM DebugのDebuggerをAttachする これだけ ※1: Android Studioも含みます
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
Gradleのビルドプロセスのデバッグを有効にする方法
デバッグを有効にする際のちょっとしたコツ ./gradlew clean $task -Dorg.gradle.debug=true --no-daemon • 前回のビルドの結果が残っているとビルドのタスクがスキップされることがあるた め、目的のタスクの前にcleanを挟む •
デーモンが有効な状態でデバッグを有効にして実行すると、2回目以降の実行で Debuggerの接続を待ってくれないことがあるため、--no-daemonをつけて実行 する
IntelliJ IDEAのDebuggerの設定 Run -> Edit Configurations… を開く
IntelliJ IDEAのDebuggerの設定 Add New ConfigurationからRemote JVM Debugを選択
IntelliJ IDEAのDebuggerの設定 各種項目はデフォルトのままでOK(タスク起動時にportを指定する場合は変更)
Debuggerを起動する 前述の手順で作成したRemote JVM Debugのconfigurationを選択、通常のアプリ ケーションのデバッグ時と同じようにDebuggerを起動する
いくつかのパターンごとにデバッグのポイントを紹介 1. 自分のプロジェクトのビルドスクリプトをデバッグしたい場合 2. プロジェクトに導入したGradleプラグインをデバッグしたい場合 3. Kotlinコンパイラーをデバッグしたい場合
自分のプロジェクトのデバッグしたい場合 • 手元のIntelliJ IDEAでプロジェクトを開き、通常のアプリケーションのデバッグと同 じように目的の処理にブレークポイントを貼る • プロジェクト内でRemote JVM DebugのConfigurationを作成し、前述の手順でタ スクを起動、Debuggerを起動する
◦ 一番簡単なユースケース ◦ ブレークポイントを貼る場所がアプリケーションコードからビルドスクリプトに変わっただけ ◦ build.gradle.ktsでもbuildSrcやconvention pluginでも同じ
自分のプロジェクトのデバッグしたい場合
自分のプロジェクトのデバッグしたい場合
Gradleプラグインをデバッグしたい場合 • デバッグしたいGradleプラグインのリポジトリをローカルにcloneする • 手元のプロジェクトで利用しているバージョンにgit checkoutする • Gradleプラグインのリポジトリ をIntelliJ IDEAで開き、目的の処理にブレークポイ
ントを貼り、Remote JVM DebugのConfigurationを作成する ◦ 目的のGradleタスクの実装を探す • 手元のプロジェクト のGradleタスクをデバッグを有効にして実行する • Gradleプラグインのリポジトリ のDebuggerを起動する
目的のGradleタスク名でコード検索すると目的の実装を見つけやすいかも Gradleプラグインをデバッグしたい場合
Kotlinコンパイラーをデバッグしたい場合 • Kotlin自体のリポジトリをローカルにcloneする • 手元のプロジェクトで利用しているバージョンにgit checkoutする • Kotlinリポジトリ をIntelliJ IDEAで開き、目的の処理にブレークポイントを貼り、
Remote JVM DebugのConfigurationを作成する ◦ Kotlinコンパイラーの構成を把握していると目的の処理を見つけやすい ▪ おすすめ記事: Kotlinコンパイラの全体像を理解する https://zenn.dev/tommykw/articles/69c64b13d8aec4 • 手元のプロジェクト のGradleタスクをデバッグを有効にして実行する • Kotlinリポジトリ のDebuggerを起動する
Kotlinコンパイラーをデバッグしたい場合
Kotlinコンパイラーをデバッグしたい場合 • たとえばKotlinの定義からObjective-Cのコードを生成する部分をデバッグする場 合、ただブレークポイントを貼るだけだとすべての定義に対して実行が止まってしま う • ブレークポイントの設定で条件を追加して目的の処理だけで止まるようにするなど の工夫が必要 ◦ おすすめ資料:
Debugging: All You Need to Know https://2024.droidkaigi.jp/timetable/694440/
(おさらい)ビルドプロセスのデバッグの手順 1. デバッグしたい対象のプロジェクトをIntelliJ IDEAで開く 2. 目的の処理にブレークポイントを貼る 3. ビルド自体のデバッグを有効にするオプションをtrueにしてGradleタスクを実行す る 4.
IntelliJ IDEAのRemote JVM DebugのDebuggerをAttachする
まとめ • Gradleのビルドプロセスはデバッグできる ◦ 自分のプロジェクトのコードだけでなく、 Gradleプラグインやコンパイラーのコードも ◦ Remote JVM Debug
と -Dorg.gradle.debug=true を使う • デバッグの手法は通常のアプリケーションコードのデバッグと同じ ◦ まずはブレークポイントを貼る場所を決める ◦ 複雑なものはブレークポイントの設定で条件を絞る • 「プラグイン側だから」や「コンパイラー側だから」と諦めず、困ったときにはビルドプ ロセスのデバッグも選択肢として持ってみてください