Gradle ビルドスクリプトを Kotlin DSL に移行する
Kotlin DSL は、Gradle ビルドスクリプトを書く推奨方法です。 型安全なアクセサ、コード補完やインラインドキュメントを備えた IDE の完全なサポート、また構成エラーをランタイムではなくコンパイル時に検出できます。
このチュートリアルでは、Groovy DSL の build.gradle ファイルを Kotlin DSL の build.gradle.kts ファイルに変換する方法と、IntelliJ IDEA が補完・インスペクション・リファクタリングでどのように支援してくれるかを紹介します。
ステップ 1. ビルドスクリプトの名前を変更する
ファイル名を変更するだけで、Gradle は DSL を切り替えます。 IntelliJ IDEA は変更を検出し、すぐにビルドの再インデックスを行います。
build.gradle を build.gradle.kts にリネームする
プロジェクト ツールウィンドウで、 build.gradle を右クリックし、 リファクタリング | 名前の変更 Shift+F6 を選択します。
お名前を
build.gradle.ktsに変更し、 リファクタリング をクリックします。IntelliJ IDEA はファイル名を変更し、Gradle の同期をトリガーします。 Gradle ツールウィンドウで同期の進捗が表示されます。
プロジェクトを同期してください。 同期が完了したら、修正が必要な構文を確認しましょう。
ステップ 1. スクリプトの構文を更新する
Kotlin DSL は Kotlin 構文を使用するため、いくつかのコンストラクトを更新する必要があります。 最も一般的な変更点を以下に示します。 ファイルを開くと、IntelliJ IDEA によりエディターでKotlin のコード補完やインラインドキュメントがすべて利用できます。 任意のシンボルで Ctrl+Q を押すとドキュメントが表示されます。
文字列とメソッド呼び出し
Groovy のシングルクォート文字列を Kotlin のダブルクォート文字列に置き換え、Groovy で丸括弧が省略されていたメソッド呼び出しには丸括弧を追加してください。
Groovy リストリテラル [] も忘れずに変更してください。 次の例を確認してください。
applicationDefaultJvmArgs = ["-Dfile.encoding=UTF-8"]
applicationDefaultJvmArgs = listOf ("-Dfile.encoding=UTF-8")
また、Kotlin には動的な拡張機能はない点にも注意してください。 ext ブロックを build.gradle 内に持つ場合も、次の Kotlin DSL の構文例を確認してください。
Groovy の map 構文("key": value )を使う attributes ブロックがある場合は、Kotlin はコロンの代わりに mapOf(...) と 終了 のペアで map を作るため、構文を変更してください。 次の例を確認してください。
タスク構成
Kotlin DSL では、タスクの構成に型安全なアクセサが使われます。 動的な test のショートハンドの代わりに tasks.test を使用してください。
ステップ 2. プラグインブロックに移行する
ビルドスクリプトで既存の apply plugin: 構文を使用している場合、IntelliJ IDEA はそれを 「apply plugin」ではなく「plugins」ブロックを使用する インスペクションでハイライトします。 plugins {} ブロックへ移行すると、プラグインの拡張機能やタスクに型安全なアクセサが有効化されます。
apply プラグインをプラグインブロックに置き換える
エディターで build.gradle.kts を開きます。
スクリプトで
apply(plugin = "...")によってプラグインを適用している場合、IntelliJ IDEA が下線を表示し警告を出します。apply(plugin = "java") // highlighted by inspection apply(plugin = "application")ハイライトされた呼び出しにキャレットを置き、 Alt+Enter を押してインテンション一覧を開きます。 'plugins' ブロックを使用する を選択します。
IntelliJ IDEA は、すべての
apply(plugin = ...)呼び出しを、ファイル冒頭の単一のplugins {}ブロックにまとめます。plugins { java application }ただし、サードパーティ製プラグインを使っている場合は、次の構文を使用します:
plugins { id("com.github.johnrengelman.shadow") version "8.1.1" }Gradle プロジェクトを同期して変更を適用してください。
同期後、(例えば
application { ... }などの)プラグイン用の型安全なアクセサが補完付きで利用可能になります。
ステップ 3. 冗長な Kotlin 標準ライブラリの依存関係を除去する
Kotlin Gradle プラグインを使うと、Kotlin 標準ライブラリが自動的に依存関係として追加されます。 ビルドスクリプトでこれを明示的に宣言している場合、IntelliJ IDEA は冗長なエントリを 冗長な Kotlin 標準ライブラリの依存関係 インスペクションでハイライトします。
冗長な stdlib 依存関係を除去する
build.gradle.kts を開きます。
kotlin("jvm")プラグインを適用し、さらにstdlibも明示的に宣言している場合、IntelliJ IDEA がその依存関係を冗長としてマークします:plugins { kotlin("jvm") version "2.1.0" } dependencies { implementation(kotlin("stdlib")) // highlighted as redundant }ハイライトされた依存関係にキャレットを置き、 Alt+Enter を押します。 冗長な依存関係を除去する を選択します。
IntelliJ IDEA は明示的な
stdlib宣言を除去します。 依存関係は Kotlin プラグイン経由でクラスパス上に引き続き存在します。
ステップ 4. ビルドファイル全体でシンボル名を変更する
IntelliJ IDEA は Gradle ビルドファイルを第一級の Kotlin ソースファイルとして扱います。 名前変更 リファクタリングは build.gradle.kts 、 settings.gradle.kts だけでなく、同じプロジェクト内の任意の buildSrc ファイルにも有効です。
ビルドファイルで使用されているシンボル名を変更する
リネームしたい任意のシンボルにキャレットを置きます。例えば、 buildSrc で宣言され、 build.gradle.kts で参照されているプロパティなどです。
Shift+F6 を押して 名前変更 ダイアログを開きます。
新しいお名前を入力し、 リファクタリング をクリックします。
IntelliJ IDEA はビルドファイル全体の参照を自動で更新します。
今後の予定
Kotlin DSL へ移行後、Gradle プロジェクトのより多くの IDE 機能を活用できます: