goa のイントロダクション


goa とは ?

goa は、独立したサービスを扱う際に時間を節約し、システム全体の一貫性を維持するのに役立つ、マイクロサービスを開発するための新しいアプローチを提供します。 goa は、ドキュメント、クライアントモジュール、クライアントツールなどの定型的な成果物と補助的な成果物の両方を処理するためにコード生成を使用します。生成される成果物の内容はマイクロサービスの デザイン から計算されます。したがって、デザインは信頼できる唯一の情報源(Single Source of Truth)であり、そこから API 実装、ドキュメンテーション、クライアントおよびその他の生成される成果物が導出されます。設計の変更はサービスのメンテナンスを大幅に簡素化して自動的に反映されます。

goa フレームワークは3つの部分に分けられます:

  • goa デザイン言語 はマイクロサービスの設計を記述できるビルトイン DSL です。
  • コードジェネレータ は DSL の出力を使用して成果物を生成します。
  • goa パッケージ は、サービスを実装するために生成されたコードとユーザーコードの両方を利用する完全なプラガブル・フレームワークを提供します。

デザイン言語とコードジェネレータはプラグインを介して拡張可能です。たとえば、 gorma プラグインはデザインでデータベースモデルを定義し、自動的に作成およびレンダリングするコードを生成します。 プラグインはデザインを信頼できる唯一の情報源として維持するのに役立ちます。

goa デザイン言語

マイクロサービスの設計は、プラグイン DSL で任意に補足されたビルトインの goa 設計言語を使用して記述されています。言語そのものは Go で実装されており、それぞれの「キーワード」はパッケージ関数で構成されています。これにより構文が分かりやすくなり、必要に応じて実際の Go コードをミキシングすることができます。デザインのセクションにはその言語が紹介されています。

成果物生成

goaには、マイクロサービスデザインからさまざまな出力を生成する goagen ツールが付属しています。コード生成の仕方は、メモリ内のマイクロサービス API を記述するデータ構造を構築するために、関数呼び出しからなる DSL を実行することです。 goagen は、生成された成果物に固有の出力生成コードをすべて1つの実行可能ファイルにラップした DSL 関数を含む完全なプログラムをまとめます。その後、実際の出力を生成するプログラムを実行します。このように goagen は メタジェネレータ なのです。

goa パッケージ

goa パッケージとそのサブパッケージは、実際のサービス、そのコントローラー、およびルーターを表すデータ構造を含むサービス実装の足場を提供します。生成されたコードは、これらのデータ構造などを利用して、完全に機能するサービスをそのまま提供します。 goaは 「バッテリー同梱 (battery included) 」の思想に従い、ロガー、エンコーダ、デコーダ、ミドルウェア、またはルータ自体を交換することができます。あなたのロギングパッケージを選択しても、デザイン・ファースト・アプローチの恩恵を得ることができます。実装するのセクションではこれらのコンポーネントについて説明します。