mcpField
D
dart-compilation-deployment

dart-compilation-deployment

github.com/dart-lang開発53260 回インストール2 週間前に更新
リポジトリ

dart-compilation-deployment について

Dart 開発者向けのコンパイルとデプロイのガイドです。対象に応じたネイティブ、AOT、Web 向け形式の選び方を、コマンド例や検証手順とともに説明します。

主な機能

  1. 01コンパイル対象の選択
  2. 02スタンドアロン実行ファイルの作成
  3. 03AOT スナップショットの生成と実行
  4. 04JavaScript または WebAssembly へのコンパイル
  5. 05最適化とクロスコンパイルの指針

活用シーン

  1. 01Dart CLI のネイティブバイナリ化
  2. 02Dart ランタイム導入済み環境への AOT スナップショット配置
  3. 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 コマンドを実行します。
  • バリデーターを実行 -> 対象環境でバイナリを実行 -> エラーを確認 -> 修正します。

実装手順:

  1. ソースファイルをコンパイルし、-o を使用して出力先を指定します。
    dart compile exe bin/myapp.dart -o bin/myapp
    
  2. クロスコンパイル(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 を使用してスナップショットを実行します。

実装手順:

  1. AOT スナップショットを生成します。
    dart compile aot-snapshot bin/myapp.dart -o bin/myapp.aot
    
  2. スタンドアロンの AOT ランタイムを使用してスナップショットを実行します。
    dartaotruntime bin/myapp.aot
    

ワークフロー:Web 向けのコンパイル

Dart コードをデプロイ可能な JavaScript または WebAssembly にコンパイルします。

タスクの進捗チェックリスト:

  • 対象の形式(js または wasm)を選択します。
  • 最適化レベル(-O1 から -O4)を選択します。
  • アプリケーションをコンパイルします。
  • バリデーターを実行 -> ユーザー入力のエッジケースをテスト -> 実行時の型エラーを確認 -> 必要に応じて最適化レベルを下げる -> 修正します。

実装手順:

  1. 安全な既定値である最適化レベル -O2 を使用して、JavaScript にコンパイルします。
    dart compile js -O2 -o build/main.js web/main.dart
    
  2. 最適化レベル:
    • -O1:既定の最適化。
    • -O2:安全な縮小化を追加します。(推奨されるベースライン)。
    • -O3:暗黙的な型チェックを省略します。警告:TypeError 例外が発生しないことを確認するため、まず -O2 で十分にテストしてください。
    • -O4:積極的な最適化を行います。警告:入力データの違いによる影響を受けやすくなります。エッジケースを厳密にテストしてください。
  3. 環境宣言: -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.

コメント