生成プロセス

生成パイプライン、式の評価、出力構造を含め、Goaがあなたのデザインをコードに変換する方法を理解します。

生成パイプライン

goa genを実行すると、Goaは以下の体系的なプロセスに従ってデザインを動作する コードに変換します:

1. ブートストラップフェーズ

Goaはまず一時的なプログラムを作成して実行します: このフェーズでは、Goaは以下を行う一時的なmain.goプログラムを作成します:

  1. コード生成と評価に必要なGoaパッケージをインポート
  2. デザインパッケージをインポート
  3. デザインを処理するためにDSL評価を実行
  4. コード生成プロセスを開始

この一時的なプログラムは、デザインをコードに変換するためのエントリーポイントとして 機能します。生成プロセス中に自動的に作成および削除されるため、直接管理する必要は ありません。

2. デザイン評価

このフェーズでは、Goaはデザインパッケージを読み込んで評価します:

  1. DSL関数が実行され、APIデザインを表現する式オブジェクトを作成
  2. これらの式がAPIの構造と動作の完全なモデルに結合
  3. システムが異なる式間の関係を分析および確立
  4. すべてのデザインルールと制約が正確性を確保するために慎重に検証

この評価フェーズは、宣言的なデザインをコード生成に使用できる構造化モデルに 変換するため、重要です。

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    # 生成されるサービス実装スタブ

生成されるコードの詳細については、 生成されるコードセクション を参照してください。