# Goa：設計からサービスへ

GoでAPIの契約を定義し、型、通信コード、クライアント、検証、ドキュメントを生成します。

Source: https://goa.design/ja/docs/1-goa/

Relative links resolve against the source URL above.


## 概要

Goaは設計からGoサービスを構築するフレームワークです。Goで記述するドメイン固有言語（DSL）で、型、操作、エラー、通信の対応関係を定義します。ジェネレーターがその決定からコードを導出し、開発者は生成されたインターフェースに沿って動作を実装します。

**[最初のサービスをつくる](quickstart/)**、または**[コーディングエージェントとの開発手順](../ai-development/)**へ進んでください。

## コーディングエージェントに役立つ理由

エージェントは、個別に管理されたハンドラー、クライアント、スキーマから契約を推測する代わりに、設計を読みます。設計を変更し、再生成して、コンパイラーの指摘に沿って実装を更新します。反復的なコードはモデルではなくジェネレーターが書きます。通常は設計、関連インターフェース、変更対象の実装を渡し、必要に応じて生成された通信コードを調べます。

## Goaの開発手順

### 設計する {#phase-1-design-you-write}

`design/*.go`にメソッド、入力、結果、検証、HTTP・gRPC・JSON-RPCとの対応を定義します。説明と例はAPIドキュメントにも使われます。

### 生成する {#phase-2-generate-automated}

```bash
goa gen example.com/myservice/design
```

選択した通信方式に応じて、Goの型とインターフェース、サーバー、クライアント、検証、OpenAPI、Protocol Buffer定義を生成します。`gen/`は置き換えられるため編集しません。`goa example`は既存ファイルを上書きせず、初期の実装ファイルを作成します。

### 実装する {#phase-3-implement-you-write}

ロジック、認可、永続化、テストを書きます。メソッドのシグネチャを変更したら、再生成とコンパイルで適合しなくなった実装や呼び出しを特定します。

## 担当する範囲 {#whats-hand-written-vs-auto-generated}

開発者とエージェントは設計、ドメインの判断、ロジック、認可、起動処理、テストを管理します。Goaは型、インターフェース、ルーティング、コーデック、検証、クライアント、API仕様を生成します。生成された検証が確認するのは宣言された制約です。ビジネス上の正しさ、セキュリティ、稼働中のクライアントとの互換性は設計とテストで確認します。

## AI機能を追加する

[Goa-AI](../2-goa-ai/)は同じ設計モデルで型付きツール、構造化出力、エージェントを定義します。ツールはサービスの型とメソッドを再利用し、契約をつなげられます。

## ガイド

まずクイックスタートを試し、実装には通信方式別のガイドを、設計変更にはDSLリファレンスを参照してください。

