生成プロセス
生成パイプライン、式の評価、出力構造を含め、Goaがあなたのデザインをコードに変換する方法を理解します。
生成パイプライン
goa genを実行すると、Goaは以下の体系的なプロセスに従ってデザインを動作する
コードに変換します:
1. ブートストラップフェーズ
Goaはまず一時的なプログラムを作成して実行します:
このフェーズでは、Goaは以下を行う一時的なmain.goプログラムを作成します:
- コード生成と評価に必要なGoaパッケージをインポート
- デザインパッケージをインポート
- デザインを処理するためにDSL評価を実行
- コード生成プロセスを開始
この一時的なプログラムは、デザインをコードに変換するためのエントリーポイントとして 機能します。生成プロセス中に自動的に作成および削除されるため、直接管理する必要は ありません。
2. デザイン評価
このフェーズでは、Goaはデザインパッケージを読み込んで評価します:
- DSL関数が実行され、APIデザインを表現する式オブジェクトを作成
- これらの式がAPIの構造と動作の完全なモデルに結合
- システムが異なる式間の関係を分析および確立
- すべてのデザインルールと制約が正確性を確保するために慎重に検証
この評価フェーズは、宣言的なデザインをコード生成に使用できる構造化モデルに 変換するため、重要です。
3. コード生成
式が検証されると、それらはGoaのコードジェネレーターに渡されます。ジェネレーターは
これらの式を入力データとして使用して、さまざまなコードテンプレートをレンダリング
します。HTTPとgRPCのトランスポート固有のコードを生成し、必要なすべてのサポート
ファイルを作成し、完全な出力をgen/ディレクトリに書き込みます。この生成ステップ
では、コードベース全体で一貫性を維持しながら、サービスを実行するために必要な
すべてのコードを生成します。
生成される構造
一般的な生成されるプロジェクト構造:
myservice/
├── cmd/ # 生成されるサンプルコマンド
│ └── calc/
│ ├── grpc.go
│ └── http.go
├── design/ # デザインファイル
│ └── design.go
├── gen/ # 生成されるコード
│ ├── calc/ # サービス固有のコード
│ │ ├── client/
│ │ ├── endpoints/
│ │ └── service/
│ └── http/ # トランスポート層
│ ├── client/
│ └── server/
└── myservice.go # 生成されるサービス実装スタブ
生成されるコードの詳細については、 生成されるコードセクション を参照してください。