dart-compilation-deployment について
Dart 開発者向けのコンパイルとデプロイのガイドです。対象に応じたネイティブ、AOT、Web 向け形式の選び方を、コマンド例や検証手順とともに説明します。
主な機能
- 01コンパイル対象の選択
- 02スタンドアロン実行ファイルの作成
- 03AOT スナップショットの生成と実行
- 04JavaScript または WebAssembly へのコンパイル
- 05最適化とクロスコンパイルの指針
活用シーン
- 01Dart CLI のネイティブバイナリ化
- 02Dart ランタイム導入済み環境への AOT スナップショット配置
- 03Web 配信用 Dart アプリのビルド
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dart-lang/ skills --skill dart-compilation-deploymentインストール後、Claude Code で/dart-compilation-deploymentを入力して読み込まれたか確認します。
詳細
Dart アプリケーションのコンパイル
目次
コンパイル対象と条件付きロジック
デプロイ対象と制約に基づいて、適切な dart compile サブコマンドを選択します。
- Windows/macOS/Linux で自己完結型のネイティブバイナリをデプロイする場合:
exeを使用します。マシンコードと最小限の Dart ランタイムがバンドルされます。 - リソースに制約のある環境にデプロイする場合、または複数のコマンドラインアプリを配布する場合:
aot-snapshotを使用します。ランタイムを含まない、アーキテクチャ固有のモジュールが生成されます。dartaotruntimeを使用して実行します。 - Web 向けにデプロイする場合:
jsまたはwasmを使用します。(関連スキル:dart-web-development)。 - トレーニングデータを使用して起動を高速化する場合:
jit-snapshotを使用します。 - すべての OS/CPU アーキテクチャで使えるポータブルなモジュールが必要な場合:
kernelを使用します。AOT 形式より起動時間が長くなる点に注意してください。
注:exe コマンドと aot-snapshot コマンドは、dart:mirrors または dart:developer をサポートしていません。また、ビルドフックも実行しません。フックがある場合は dart build を使用してください。
ワークフロー:ネイティブ実行可能ファイルのコンパイル
スタンドアロンの実行可能ファイルを生成するには、次のワークフローに従います。
タスクの進捗チェックリスト:
- アプリケーションが
dart:mirrorsまたはdart:developerに依存していないことを確認します。 - 対象の OS とアーキテクチャを特定します。
- 適切なフラグを指定して
dart compile exeコマンドを実行します。 - バリデーターを実行 -> 対象環境でバイナリを実行 -> エラーを確認 -> 修正します。
実装手順:
- ソースファイルをコンパイルし、
-oを使用して出力先を指定します。dart compile exe bin/myapp.dart -o bin/myapp - クロスコンパイル(Linux の対象のみ): 64 ビットのホストで異なるアーキテクチャ向けにコンパイルする場合は、
--target-osと--target-arch(arm、arm64、riscv64、x64)を指定します。dart compile exe --target-os=linux --target-arch=arm64 bin/myapp.dart -o bin/myapp_arm64
ワークフロー:AOT スナップショットのコンパイル
対象環境に Dart ランタイムがすでにインストールされている場合は、AOT スナップショットを使用してパフォーマンスを最適化し、ディスク容量を削減します。
タスクの進捗チェックリスト:
- Dart コードを AOT スナップショットにコンパイルします。
-
.aotファイルを対象環境にデプロイします。 - 対象環境の
PATHからdartaotruntimeを利用できることを確認します。 -
dartaotruntimeを使用してスナップショットを実行します。
実装手順:
- AOT スナップショットを生成します。
dart compile aot-snapshot bin/myapp.dart -o bin/myapp.aot - スタンドアロンの AOT ランタイムを使用してスナップショットを実行します。
dartaotruntime bin/myapp.aot
ワークフロー:Web 向けのコンパイル
Dart コードをデプロイ可能な JavaScript または WebAssembly にコンパイルします。
タスクの進捗チェックリスト:
- 対象の形式(
jsまたはwasm)を選択します。 - 最適化レベル(
-O1から-O4)を選択します。 - アプリケーションをコンパイルします。
- バリデーターを実行 -> ユーザー入力のエッジケースをテスト -> 実行時の型エラーを確認 -> 必要に応じて最適化レベルを下げる -> 修正します。
実装手順:
- 安全な既定値である最適化レベル
-O2を使用して、JavaScript にコンパイルします。dart compile js -O2 -o build/main.js web/main.dart - 最適化レベル:
-O1:既定の最適化。-O2:安全な縮小化を追加します。(推奨されるベースライン)。-O3:暗黙的な型チェックを省略します。警告:TypeError例外が発生しないことを確認するため、まず-O2で十分にテストしてください。-O4:積極的な最適化を行います。警告:入力データの違いによる影響を受けやすくなります。エッジケースを厳密にテストしてください。
- 環境宣言:
-D<flag>=<value>を使用して環境変数を渡します。dart compile js -DAPI_URL=https://api.example.com -O2 -o build/main.js web/main.dart
例
例 1:Linux ARM64 向けのネイティブ実行可能ファイルのクロスコンパイル
# Input
dart compile exe --target-os=linux --target-arch=arm64 bin/server.dart -o build/server_linux_arm64
# Output
# Generates a standalone binary at build/server_linux_arm64 containing the compiled machine code and Dart runtime.
例 2:AOT スナップショットの生成と実行
# Input: Compilation
dart compile aot-snapshot bin/cli.dart -o build/cli.aot
# Input: Execution
dartaotruntime build/cli.aot
# Output
# Executes the pre-compiled AOT snapshot without the overhead of the full Dart SDK.
例 3:厳密な最適化を使用した Web 向けコンパイル
# Input
dart compile js -O3 --no-source-maps -DENVIRONMENT=production -o deploy/app.js web/app.dart
# Output
# Generates a highly optimized, minified JavaScript file (deploy/app.js) with type checks omitted and no source maps.
コメント
Markdown 対応