コマンドラインツール
インストール
Goaのコマンドラインツールを以下のようにインストールします:
go install goa.design/goa/v3/cmd/goa@latest
利用可能なコマンド
コードの生成(goa gen)
goa gen <design-package-import-path> [-o <output-dir>]
goa genコマンドは、Goaにおけるコード生成の主要なツールです。実行すると、
デザインパッケージを処理し、サービスの完全な実装コードを生成します。gen/
ディレクトリ全体を最初から再作成し、生成されたコードがデザインと同期している
ことを保証します。デザインを変更するたびにこのコマンドを実行して、実装コードを
再生成する必要があります。
例の作成(goa example)
goa example <design-package-import-path> [-o <output-dir>]
goa exampleコマンドは、初期のサービス実装のスキャフォールディングを支援します。
サンプル実装を作成し、開始点となるプレースホルダーロジックを含むハンドラースタブを
生成します。このコマンドは新しいプロジェクトを開始する時に1回だけ実行することを
想定しており、カスタム実装の基礎を提供します。重要なのは、このコマンドは安全に
設計されていることです - すでに作成したカスタムコードを上書きすることはなく、
既存の作業を保持します。
バージョンの表示(goa version)
goa version
インストールされているGoaのバージョンを表示します。
使用上のガイドライン
パッケージパスとファイルパス
すべてのコマンドはファイルシステムのパスではなく、Goパッケージのインポートパスを 期待します:
# ✅ 正しい:Goパッケージのインポートパスを使用
goa gen goa.design/examples/calc/design
# ❌ 誤り:ファイルシステムのパスを使用
goa gen ./design
開発ワークフロー
新しいGoaプロジェクトの初期化手順:
- 初期デザインを作成
goa genを実行してベースコードを生成goa exampleを実行して実装スタブを作成- スタブサービスをデプロイ
スタブサービスを早期にデプロイすることで、初期開発を通常の保守ワークフローに 合わせることができます。このアプローチにより以下が可能になります:
- 複雑なロジックを追加する前にデプロイ手順を検証
- 初日からモニタリングと可観測性を設定
- 新規および既存のサービスで同じ開発サイクルに従う
スタブサービスがデプロイされると、通常の開発サイクルが始まります。これには、
生成されたハンドラーに実際のサービスロジックを実装し、デザインを変更するたびに
goa genを実行し、実装を継続的にテストおよび反復することが含まれます。この
サイクルにより、実装がデザインと同期を保ちながら、サービスのコアビジネスロジック
の構築に集中できます。
ベストプラクティス
生成されたコードは、CI/CDパイプライン中に生成するのではなく、バージョン管理に コミットする必要があります。その理由は以下の通りです:
- 再現可能なビルド:コミットされた生成コードにより、環境間で一貫したビルドを保証
- 依存関係の解決:
go getなどのツールがリポジトリ内のコミットされたコードで確実に動作 - バージョン管理の利点:
- 生成されたコードの変更を時間とともに追跡
- コードレビュー時に生成されたコードの変更を確認
- 必要に応じて以前のバージョンにロールバック
- CI/CDの効率性:CI/CDでジェネレーターを実行しないことで、パイプラインが高速で信頼性が向上
コマンドラインのヒント
- 開発の早期にスタブサービスをデプロイしてデザインを検証
- デザインの変更後は毎回
goa genを実行して実装を同期 - バージョン管理を使用して生成されたコードの変更を体系的に追跡