Model
C4 モデルを用いたアーキテクチャ図をコードとして管理 — バージョン管理され、自動生成でき、インタラクティブに編集できます。
Goa のエコシステムには、マイクロサービス開発で頻出するニーズを満たす コンパニオンライブラリ が含まれます。これらのツールは Goa と自然に連携するように設計されていますが、単体でも利用できます。
| ライブラリ | 用途 | 主な機能 |
|---|---|---|
| Model | アーキテクチャ図 | C4 図をコードとして記述、バージョン管理、インタラクティブエディタ |
| Pulse | 分散イベント | イベントストリーミング、ワーカープール、レプリケートマップ |
| Clue | 観測可能性 | トレーシング、ロギング、メトリクス、ヘルスチェック |
Model は、C4 model を用いてソフトウェアアーキテクチャを記述するための Go DSL を提供します。GUI ツールで図を描く代わりに、アーキテクチャをコードで定義します:
var _ = Design("My System", "System description", func() {
var System = SoftwareSystem("My System", "Does something useful")
Person("User", "A user of the system", func() {
Uses(System, "Uses")
})
Views(func() {
SystemContextView(System, "Context", "System context diagram", func() {
AddAll()
AutoLayout(RankLeftRight)
})
})
})
メリット:
詳しくは: Model Documentation
Pulse は、イベント駆動の分散システムを構築するためのプリミティブを提供します。トランスポートに依存せず、Goa サービスの有無にかかわらず利用できます:
// Publish events to a stream
stream.Add(ctx, "user.created", userEvent)
// Subscribe to events
reader.Subscribe(ctx, func(event *Event) error {
return processEvent(event)
})
ユースケース:
詳しくは: Pulse Documentation
Clue は、OpenTelemetry を基盤にした Goa サービス向けの計測(インストルメンテーション)を提供します。観測可能性の 3 本柱をカバーします:
// Configure OpenTelemetry
cfg := clue.NewConfig(ctx, "myservice", "1.0.0", metricExporter, spanExporter)
clue.ConfigureOpenTelemetry(ctx, cfg)
// Context-based logging
log.Info(ctx, "processing request", log.KV{"user_id", userID})
// Health checks
checker := health.NewChecker(health.NewPinger("db", dbAddr))
機能:
詳しくは: Clue Documentation
| ガイド | 説明 | ~トークン |
|---|---|---|
| Model | C4 図、DSL リファレンス、mdl CLI | ~2,500 |
| Pulse | ストリーミング、ワーカープール、レプリケートマップ | ~2,200 |
| Clue | ロギング、トレーシング、メトリクス、ヘルスチェック | ~2,800 |
セクション合計: ~7,500 tokens
目的に合うライブラリを選んでください:
いずれも go get で取得できます:
go get goa.design/model
go get goa.design/pulse
go get goa.design/clue