dart compile
dart compile
コマンドを使用して、Dartプログラムをターゲットプラットフォームにコンパイルします。サブコマンドを使用して指定する出力には、Dartランタイムを含めることも、モジュール(スナップショットとも呼ばれる)にすることもできます。
自己完結型実行ファイル(myapp.exe
)を作成するためにexe
サブコマンドを使用する例を以下に示します。
$ dart compile exe bin/myapp.dart
Generated: /Users/me/myapp/bin/myapp.exe
次の例では、aot-snapshot
サブコマンドを使用して、Ahead-of-Time(AOT)コンパイルされたモジュール(myapp.aot
)を作成します。その後、dartaotruntime
コマンド(Dartランタイムを提供する)を使用してAOTモジュールを実行します。
$ dart compile aot-snapshot bin/myapp.dart
Generated: /Users/me/myapp/bin/myapp.aot
$ dartaotruntime bin/myapp.aot
出力ファイルへのパスを指定するには、-o
または--output
オプションを使用します。
$ dart compile exe bin/myapp.dart -o bin/runme
詳細なオプションと使用方法については、dart compile [<subcommand>] --help
を実行してください。
$ dart compile exe --help
dart compile
コマンドは、dart2native
、dart2aot
、dart2js
コマンドに取って代わります。
native_appサンプルを参照して、dart compile
を使用してネイティブアプリをコンパイルし、そのアプリを実行する例を確認してください。
サブコマンド
#次の表に、dart compile
のサブコマンドを示します。
サブコマンド | 出力 | 詳細情報 |
---|---|---|
exe | 自己完結型実行ファイル | ソースコードを機械語にコンパイルしたものと、小さなDartランタイムを含む、アーキテクチャ固有のスタンドアロン実行ファイルです。 詳細はこちら。 |
aot-snapshot | AOTモジュール | ソースコードを機械語にコンパイルしたものですが、Dartランタイムは含まれません。 詳細はこちら。 |
jit-snapshot | JITモジュール | すべてのソースコードの中間表現と、プログラムのトレーニング実行中に実行されたソースコードの最適化された表現を含む、アーキテクチャ固有のファイルです。トレーニングデータが適切であれば、JITコンパイルされたコードの方がAOTコードよりもピークパフォーマンスが速くなる可能性があります。 詳細はこちら。 |
kernel | Kernelモジュール | ソースコードのポータブルな中間表現です。 詳細はこちら。 |
js | JavaScript | ソースコードからコンパイルされた、デプロイ可能なJavaScriptファイルです。 詳細はこちら。 |
wasm | WebAssembly | スタックベースの仮想マシン用のポータブルなバイナリ命令形式です。現在開発中です。 詳細はこちら。 |
出力の種類
#次のセクションでは、dart compile
で生成できる各出力の種類について詳しく説明します。
自己完結型実行ファイル(exe)
#exe
サブコマンドは、Windows、macOS、またはLinux用のスタンドアロン実行ファイルを作成します。**スタンドアロン実行ファイル**は、指定されたDartファイルとその依存関係からコンパイルされたネイティブ機械語と、型チェックやガベージコレクションを処理する小さなDartランタイムで構成されています。
出力ファイルは、他の実行ファイルと同様に配布して実行できます。
アプリをコンパイルして出力ファイルを設定する
$ dart compile exe bin/myapp.dart -o /tmp/myapp
成功すると、このコマンドは次の出力を生成します。
Generated: /tmp/myapp
/tmp
ディレクトリからコンパイル済みのアプリを実行する
$ ./tmp/myapp
署名
#dart compile exe
で作成された実行ファイルは、macOSとWindowsで署名をサポートしています。
プラットフォーム固有のコード署名について詳しくは、各オペレーティングシステムのプラットフォームドキュメントを参照してください。
既知の制限事項
#exe
サブコマンドには、いくつかの既知の制限事項があります。
- クロスコンパイルのサポートなし(issue 28617)
- コンパイラは、コンパイルしているオペレーティングシステムに対してのみ機械コードを作成できます。macOS、Windows、Linux用の実行ファイルを作成するには、コンパイラを3回実行する必要があります。3つのオペレーティングシステムすべてをサポートする継続的インテグレーション(CI)プロバイダーを使用することもできます。
dart:mirrors
とdart:developer
はサポートされていません。- 使用できるコアライブラリの完全なリストについては、マルチプラットフォームとネイティブプラットフォームのライブラリ表を参照してください。
AOTモジュール(aot-snapshot)
#複数のコマンドラインアプリを配布する場合、AOTモジュールを使用してディスク容量の要件を削減します。aot-snapshot
サブコマンドは、アプリをコンパイルする現在のアーキテクチャに固有の出力ファイルを作成します。
たとえば、macOSを使用して.aot
ファイルを作成した場合、そのファイルはmacOSでのみ実行できます。Dartは、Windows、macOS、LinuxでAOTモジュールをサポートしています。
$ dart compile aot-snapshot bin/myapp.dart
Generated: /Users/me/myapp/bin/myapp.aot
$ dartaotruntime bin/myapp.aot
aot-snapshot
サブコマンドには、いくつかの既知の制限事項があります。
- クロスコンパイルのサポートなし(issue 28617)
- コンパイラは、コンパイルしているオペレーティングシステムに対してのみ機械コードを作成できます。macOS、Windows、Linux用の実行ファイルを作成するには、コンパイラを3回実行する必要があります。3つのオペレーティングシステムすべてをサポートする継続的インテグレーション(CI)プロバイダーを使用することもできます。
dart:mirrors
とdart:developer
はサポートされていません。- 使用できるコアライブラリの完全なリストについては、マルチプラットフォームとネイティブプラットフォームのライブラリ表を参照してください。
詳細については、dartaotruntime
のドキュメントを参照してください。
JITモジュール(jit-snapshot)
#JITモジュールには、プログラムのトレーニング実行中に生成された、解析済みのすべてのクラスとコンパイル済みコードが含まれています。
$ dart compile jit-snapshot bin/myapp.dart
Compiling bin/myapp.dart to jit-snapshot file bin/myapp.jit.
Hello world!
$ dart run bin/myapp.jit
Hello world!
アプリケーションモジュールから実行する場合、Dart VMはトレーニング実行中に既に使用されていたクラスや関数を解析またはコンパイルする必要がないため、VMはユーザーコードの実行をより早く開始できます。
これらのモジュールは、kernel
サブコマンドを使用して作成されたモジュールとは異なり、アーキテクチャ固有です。
ポータブルモジュール(kernel)
#kernel
サブコマンドを使用して、すべてのオペレーティングシステムとCPUアーキテクチャで実行できる単一のポータブルファイルにアプリをパッケージ化します。Kernelモジュールには、Dartプログラムの抽象構文木(Kernel AST)のバイナリ形式が含まれています。
Kernelモジュールの作成と実行の例を以下に示します。
$ dart compile kernel bin/myapp.dart
Compiling bin/myapp.dart to kernel file bin/myapp.dill.
$ dart run bin/myapp.dill
KernelモジュールはDartコードと比較して起動時間が短縮されますが、アーキテクチャ固有のAOT出力形式と比較すると、はるかに遅い起動時間になる可能性があります。
JavaScript(js)
#js
サブコマンドは、Dartコードをデプロイ可能なJavaScriptにコンパイルします。
オプション
#dart compile js
コマンドには、JavaScriptコードのコンパイルをカスタマイズするための複数のオプションがあります。
基本的なオプション
#一般的なオプションには次のものがあります。
-o <file>
または--output=<file>
出力を
<file>
に生成します。指定しない場合、出力はout.js
という名前のファイルに格納されます。--enable-asserts
アサーションチェックを有効にします。
-O{0|1|2|3|4}
ファイルサイズを削減し、コードのパフォーマンスを向上させるための最適化を制御します。これらの最適化の詳細については、
dart compile js -hv
を実行してください。-O0
:多くの最適化を無効にします。-O1
:デフォルトの最適化を有効にします。-O2
:-O1
最適化と、言語のセマンティクスを尊重し、すべてのプログラムで安全な追加の最適化(ミニファイなど)を有効にします。-O3
:-O2
最適化と、暗黙的な型チェックの省略を有効にします。-O4
:-O3
よりも積極的な最適化を有効化しますが、前提条件は同じです。
--no-source-maps
ソースマップファイルを作成しません。
-h
または--help
ヘルプを表示します。すべてのオプションに関する情報を入手するには、
-hv
を使用します。
パスと環境オプション
#その他の便利なオプションには、以下が含まれます。
--packages=<path>
- パッケージ解決構成ファイルへのパスを指定します。詳細については、Dartパッケージ構成ファイル仕様を参照してください。
-D<flag>=<value>
String.fromEnvironment
、int.fromEnvironment
、bool.fromEnvironment
、またはbool.hasEnvironment
でアクセスできる環境宣言と値のペアを定義します。環境宣言の詳細については、コンパイル環境宣言を使用したアプリの設定を参照してください。--version
dart
のバージョン情報を表示します。
表示オプション
#次のオプションは、コンパイラの出力を制御するのに役立ちます。
--suppress-warnings
- 警告を表示しません。
--suppress-hints
- ヒントを表示しません。
--terse
- 診断された問題の解決方法を提案せずに、診断を出力します。
-v
または--verbose
- 多くの情報を表示します。
解析オプション
#次のオプションは、Dartコードに対して実行される解析を制御します。
--fatal-warnings
- 警告をコンパイルエラーとして扱います。
--enable-diagnostic-colors
- 診断メッセージに色を追加します。
--show-package-warnings
- パッケージから生成された警告とヒントを表示します。
--csp
- 生成された出力でのコードの動的生成を無効にします。これは、CSPの制限を満たすために必要です(W3C Content Security Policyを参照)。
--dump-info
- 生成されたコードに関する情報を含むファイル(接尾辞
.info.json
)を生成します。dart2js_infoのツールを使用して、生成されたファイルを検査できます。
ウェブアプリのコンパイル例
#たとえば、Dartアプリケーションを最適化されたJavaScriptにコンパイルするには、次のコマンドを実行します。
$ dart compile js -O2 -o out/main.js web/main.dart
本番環境向けウェブコンパイルの改善
#型推論の改善、ファイルサイズの削減、JavaScriptのパフォーマンス向上のためには、次の手順に従ってください。
Function.apply()
を使用しないでください。noSuchMethod()
をオーバーライドしないでください。- 変数を
null
に設定することは避けてください。 - 各関数またはメソッドに渡す引数の型を統一してください。
JavaScriptアプリケーションのビルドとデプロイの詳細については、ウェブデプロイを参照してください。
特に記載がない限り、このサイトのドキュメントはDart 3.5.3を反映しています。ページは2024年5月13日に最終更新されました。 ソースを表示 または 問題を報告する。