Kotlinコンパイラのオプション
Kotlinの各リリースには、サポートされているターゲット(JVM、JavaScript、対応プラットフォーム用のネイティブバイナリ)向けのコンパイラが含まれています。
これらのコンパイラは、以下によって使用されます。
- IDEで、Kotlinプロジェクトのコンパイルボタンまたは実行ボタンをクリックしたとき。
- Gradleで、コンソールまたはIDEで
gradle buildを呼び出したとき。 - Mavenで、コンソールまたはIDEで
mvn compileまたはmvn test-compileを呼び出したとき。
Kotlinコンパイラは、コマンドラインコンパイラでの作業チュートリアルで説明されているように、コマンドラインから手動で実行することもできます。
コンパイラオプション
Kotlinコンパイラには、コンパイルプロセスを調整するための多数のオプションがあります。 異なるターゲット向けのコンパイラオプションは、それぞれの説明とともにこのページにリストされています。
コンパイラオプションとその値(コンパイラ引数)を設定するには、いくつかの方法があります。
- IntelliJ IDEAで、Settings/Preferences | Build, Execution, Deployment | Compiler | Kotlin Compiler のAdditional command line parametersテキストボックスにコンパイラ引数を入力します。
- Gradleを使用している場合は、Kotlinコンパイルタスクの
compilerOptionsプロパティにコンパイラ引数を指定します。詳細については、Gradleコンパイラオプションを参照してください。 - Mavenを使用している場合は、Mavenプラグインノードの
<configuration>要素にコンパイラ引数を指定します。詳細については、Mavenを参照してください。 - コマンドラインコンパイラを実行する場合は、ユーティリティ呼び出しに直接コンパイラ引数を追加するか、引数ファイルに記述します。
例:
$ kotlinc hello.kt -include-runtime -d hello.jarWindowsでは、区切り文字(空白、
=、;、,)を含むコンパイラ引数を渡す場合、これらの引数を二重引用符(")で囲みます。$ kotlinc.bat hello.kt -include-runtime -d "My Folder\hello.jar"
コンパイラオプションのスキーマ
すべてのコンパイラオプションの共通スキーマは、org.jetbrains.kotlin:kotlin-compiler-arguments-descriptionの下でJARアーティファクトとして公開されています。このアーティファクトには、すべてのコンパイラオプションの説明(Kotlin以外のコンシューマ向け)のコード表現とJSON形式の両方が含まれています。また、各オプションが導入または安定化されたバージョンなどのメタデータも含まれています。
共通オプション
以下のオプションは、すべてのKotlinコンパイラに共通です。
-version
コンパイラのバージョンを表示します。
-verbose
コンパイルプロセスの詳細を含む、詳細なログ出力を有効にします。
-script
Kotlinスクリプトファイルを評価します。このオプションを指定して呼び出すと、コンパイラは指定された引数の中から最初のKotlinスクリプト(*.kts)ファイルを実行します。
-help (-h)
使用法情報を表示して終了します。標準オプションのみが表示されます。 高度なオプションを表示するには、-Xを使用します。
-X
高度なオプションに関する情報を表示して終了します。これらのオプションは現在不安定です。名前や動作は予告なく変更される場合があります。
-kotlin-home path
ランタイムライブラリの検出に使用されるKotlinコンパイラへのカスタムパスを指定します。
-P plugin:pluginId:optionName=value
Kotlinコンパイラプラグインにオプションを渡します。 コアプラグインとそのオプションは、ドキュメントのCore compiler pluginsセクションにリストされています。
-language-version version
指定されたKotlinバージョンとのソース互換性を提供します。
-api-version version
指定されたKotlinバンドルライブラリのバージョンからの宣言のみの使用を許可します。
-progressive
コンパイラのプログレッシブモードを有効にします。
プログレッシブモードでは、不安定なコードに対する非推奨化とバグ修正が、段階的な移行サイクルを経ずに直ちに適用されます。 プログレッシブモードで書かれたコードは後方互換性がありますが、非プログレッシブモードで書かれたコードは、プログレッシブモードでコンパイルエラーを引き起こす可能性があります。
@argfile
指定されたファイルからコンパイラオプションを読み取ります。このようなファイルには、値とソースファイルへのパスを持つコンパイラオプションを含めることができます。オプションとパスは空白で区切る必要があります。例:
-include-runtime -d hello.jar hello.kt空白を含む値を渡すには、一重引用符(')または二重引用符(")で囲みます。値に引用符が含まれる場合は、バックスラッシュ(\)でエスケープします。
-include-runtime -d 'My folder'複数の引数ファイルを渡すこともできます。例えば、コンパイラオプションとソースファイルを分離するためです。
$ kotlinc @compiler.options @classesファイルが現在のディレクトリとは異なる場所にある場合は、相対パスを使用します。
$ kotlinc @options/compiler.options hello.kt-opt-in annotation
指定された完全修飾名を持つ要件アノテーションで、オプトインが必要なAPIの使用を有効にします。
-Xrepl
Kotlin REPLをアクティブにします。
kotlinc -Xrepl-Xannotation-target-all
アノテーションの実験的なallユースサイトターゲットを有効にします。
kotlinc -Xannotation-target-all-Xannotation-default-target=param-property
アノテーションのユースサイトターゲットの新しい実験的なデフォルト設定ルールを有効にします。
kotlinc -Xannotation-default-target=param-property警告管理
-nowarn
コンパイル中のすべての警告を抑制します。
-Werror
すべての警告をコンパイルエラーとして扱います。
-Wextra
真の場合に警告を発する追加の宣言、式、および型コンパイラチェックを有効にします。
-Xrender-internal-diagnostic-names
警告とともに内部診断名を出力します。これは、-Xwarning-levelオプション用に設定されたDIAGNOSTIC_NAMEを識別するのに役立ちます。
-Xwarning-level
特定のコンパイラ警告の重大度レベルを設定します。
kotlinc -Xwarning-level=DIAGNOSTIC_NAME:(error|warning|disabled)error: 指定された警告のみをエラーに昇格させます。warning: 指定された診断に対して警告を発し、デフォルトで有効になっています。disabled: 指定された警告のみをモジュール全体で抑制します。
プロジェクト内の警告レポートは、モジュール全体のルールと特定のルールを組み合わせて調整できます。
| コマンド | 説明 |
|---|---|
-nowarn -Xwarning-level=DIAGNOSTIC_NAME:warning | 指定された警告を除くすべての警告を抑制します。 |
-Werror -Xwarning-level=DIAGNOSTIC_NAME:warning | 指定された警告を除くすべての警告をエラーに昇格させます。 |
-Wextra -Xwarning-level=DIAGNOSTIC_NAME:disabled | 指定されたチェックを除くすべての追加チェックを有効にします。 |
一般的なルールから除外する警告が多数ある場合は、@argfileを使用して別のファイルにリストできます。
DIAGNOSTIC_NAMEを検出するには、-Xrender-internal-diagnostic-namesを使用できます。
-Xdata-flow-based-exhaustiveness
when式に対するデータフローベースの網羅性チェックを有効にします。
-Xallow-reified-type-in-catch
inline関数のcatch句における実体化されたThrowable型パラメータのサポートを有効にします。
Kotlinコントラクトオプション
以下のオプションは、実験的なKotlinコントラクト機能を有効にします。
-Xallow-contracts-on-more-functions
プロパティアクセサ、特定の演算子関数、ジェネリック型に対する型アサーションを含む追加の宣言でコントラクトを有効にします。
-Xallow-condition-implies-returns-contracts
コントラクトでreturnsNotNull()関数を使用し、指定された条件に対して非nullの戻り値を想定することを許可します。
-Xallow-holdsin-contract
コントラクトでholdsInキーワードを使用し、ラムダ内でブール条件がtrueであると想定することを許可します。
Kotlin/JVMコンパイラオプション
Kotlin/JVMコンパイラは、KotlinソースファイルをJavaクラスファイルにコンパイルします。 KotlinからJVMへのコンパイルのためのコマンドラインツールは、kotlincおよびkotlinc-jvmです。 これらを使用してKotlinスクリプトファイルを実行することもできます。
共通オプションに加えて、Kotlin/JVMコンパイラは以下のオプションを持っています。
-classpath path (-cp path)
指定されたパスでクラスファイルを検索します。クラスパスの要素はシステムパス区切り文字(Windowsでは;、macOS/Linuxでは:)で区切ります。 クラスパスには、ファイルやディレクトリのパス、ZIPファイル、またはJARファイルを含めることができます。
-d path
生成されたクラスファイルを指定された場所に配置します。場所はディレクトリ、ZIPファイル、またはJARファイルにすることができます。
-include-runtime
結果のJARファイルにKotlinランタイムを含めます。これにより、結果のアーカイブはJavaが有効な任意の環境で実行可能になります。
-jdk-home path
デフォルトのJAVA_HOMEと異なる場合、カスタムのJDKホームディレクトリをクラスパスに含めるように指定します。
-Xjdk-release=version
生成されるJVMバイトコードのターゲットバージョンを指定します。クラスパス内のJDKのAPIを指定されたJavaバージョンに制限します。-jvm-target versionを自動的に設定します。 指定可能な値は1.8、9、10、...、24です。
このオプションは、各JDKディストリビューションに対して有効である保証はありません。
-jvm-target version
生成されるJVMバイトコードのターゲットバージョンを指定します。指定可能な値は1.8、9、10、...、24です。 デフォルト値は1.8です。
-java-parameters
メソッドパラメータに関するJava 1.8リフレクションのメタデータを生成します。
-module-name name (JVM)
生成される.kotlin_moduleファイルにカスタム名を指定します。
-no-jdk
Javaランタイムをクラスパスに自動的に含めません。
-no-reflect
Kotlinリフレクション(kotlin-reflect.jar)をクラスパスに自動的に含めません。
-no-stdlib (JVM)
Kotlin/JVM stdlib(kotlin-stdlib.jar)およびKotlinリフレクション(kotlin-reflect.jar)をクラスパスに自動的に含めません。
-script-templates classnames[,]
スクリプト定義テンプレートクラス。完全修飾クラス名を使用し、コンマ(,)で区切ります。
-Xjvm-expose-boxed
モジュール内のすべてのインライン値クラスのボックス化されたバージョンと、それらを使用する関数のボックス化されたバリアントを生成し、Javaから両方にアクセスできるようにします。詳細については、JavaからKotlinを呼び出すガイドのインライン値クラスを参照してください。
-jvm-default mode
インターフェースで宣言された関数がJVM上でデフォルトメソッドとしてどのようにコンパイルされるかを制御します。
| モード | 説明 |
|---|---|
enable | インターフェースにデフォルト実装を生成し、サブクラスとDefaultImplsクラスにブリッジ関数を含めます。(デフォルト) |
no-compatibility | 互換性ブリッジとDefaultImplsクラスをスキップし、インターフェースにのみデフォルト実装を生成します。 |
disable | デフォルトメソッドをスキップし、互換性ブリッジとDefaultImplsクラスのみを生成します。 |
Kotlin/JSコンパイラオプション
Kotlin/JSコンパイラは、KotlinソースファイルをJavaScriptコードにコンパイルします。 KotlinからJSへのコンパイルのためのコマンドラインツールは、kotlinc-jsです。
共通オプションに加えて、Kotlin/JSコンパイラは以下のオプションを持っています。
-target
指定されたECMAバージョン向けにJSファイルを生成します。
-libraries path
.meta.jsファイルと.kjsmファイルを含むKotlinライブラリへのパス。システムパス区切り文字で区切ります。
-main {call|noCall}
実行時にmain関数を呼び出すかどうかを定義します。
-meta-info
メタデータを含む.meta.jsファイルと.kjsmファイルを生成します。JSライブラリを作成する際にこのオプションを使用します。
-module-kind
コンパイラによって生成されるJSモジュールの種類:
umd- Universal Module Definitionモジュールcommonjs- CommonJSモジュールamd- Asynchronous Module Definitionモジュールplain- プレーンJSモジュール
異なる種類のJSモジュールとその違いについては、この記事を参照してください。
-no-stdlib (JS)
デフォルトのKotlin/JS stdlibをコンパイル依存関係に自動的に含めません。
-output filepath
コンパイル結果の出力先ファイルを指定します。値はファイル名を含む.jsファイルへのパスである必要があります。
-output-postfix filepath
指定されたファイルのコンテンツを出力ファイルの末尾に追加します。
-output-prefix filepath
指定されたファイルのコンテンツを出力ファイルの先頭に追加します。
-source-map
ソースマップを生成します。
-source-map-base-dirs path
指定されたパスをベースディレクトリとして使用します。ベースディレクトリはソースマップ内の相対パスを計算するために使用されます。
-source-map-embed-sources {always|never|inlining}
ソースファイルをソースマップに埋め込みます。
-source-map-names-policy {simple-names|fully-qualified-names|no}
Kotlinコードで宣言した変数名と関数名をソースマップに追加します。
| 設定 | 説明 | 出力例 |
|---|---|---|
simple-names | 変数名と単純な関数名が追加されます。(デフォルト) | main |
fully-qualified-names | 変数名と完全修飾関数名が追加されます。 | com.example.kjs.playground.main |
no | 変数名または関数名は追加されません。 | N/A |
-source-map-prefix
ソースマップ内のパスに指定されたプレフィックスを追加します。
-Xes-long-as-bigint
モダンJavaScript(ES2020)にコンパイルする際、KotlinのLong値を表現するためにJavaScriptのBigInt型へのサポートを有効にします。
Kotlin/Nativeコンパイラオプション
Kotlin/Nativeコンパイラは、Kotlinソースファイルを対応プラットフォーム向けのネイティブバイナリにコンパイルします。 Kotlin/Nativeコンパイルのためのコマンドラインツールは、kotlinc-nativeです。
共通オプションに加えて、Kotlin/Nativeコンパイラは以下のオプションを持っています。
-enable-assertions (-ea)
生成されたコードでランタイムアサーションを有効にします。
-g
デバッグ情報の出力を有効にします。このオプションは最適化レベルを下げ、-optオプションと組み合わせて使用すべきではありません。
-generate-test-runner (-tr)
プロジェクトから単体テストを実行するためのアプリケーションを生成します。
-generate-no-exit-test-runner (-trn)
明示的なプロセス終了なしで単体テストを実行するためのアプリケーションを生成します。
-include-binary path (-ib path)
生成されたklibファイル内に外部バイナリをパックします。
-library path (-l path)
ライブラリとリンクします。Kotlin/Nativeプロジェクトでのライブラリの使用については、Kotlin/Nativeライブラリを参照してください。
-library-version version (-lv version)
ライブラリのバージョンを設定します。
-list-targets
利用可能なハードウェアターゲットをリスト表示します。
-manifest path
マニフェストアデンドファイルを提供します。
-module-name name (Native)
コンパイルモジュールの名前を指定します。 このオプションは、Objective-Cにエクスポートされる宣言の名前プレフィックスを指定するためにも使用できます。 KotlinフレームワークのカスタムObjective-Cプレフィックス/名前を指定するにはどうすればよいですか?
-native-library path (-nl path)
ネイティブビットコードライブラリを含めます。
-no-default-libs
コンパイラと一緒に配布されるビルド済みのプラットフォームライブラリとユーザーコードのリンクを無効にします。
-nomain
mainエントリポイントが外部ライブラリによって提供されるものと仮定します。
-nopack
ライブラリをklibファイルにパックしません。
-linker-option
バイナリビルド中にリンカに引数を渡します。これは、一部のネイティブライブラリとリンクするために使用できます。
-linker-options args
バイナリビルド中にリンカに複数の引数を渡します。引数は空白で区切ります。
-nostdlib
stdlibとリンクしません。
-opt
コンパイル最適化を有効にし、より良いランタイムパフォーマンスを持つバイナリを生成します。 最適化レベルを下げ-gオプションと組み合わせて使用することは推奨されません。
-output name (-o name)
出力ファイルの名前を設定します。
-entry name (-e name)
修飾されたエントリポイント名を指定します。
-produce output (-p output)
出力ファイルの種類を指定します。
programstaticdynamicframeworklibrarybitcode
-repo path (-r path)
ライブラリ検索パス。詳細については、ライブラリ検索シーケンスを参照してください。
-target target
ハードウェアターゲットを設定します。利用可能なターゲットのリストを表示するには、-list-targetsオプションを使用します。
