コマンドラインツール

インストール、使用法、ベストプラクティスを含め、Goaのコード生成用コマンドラインツールについて学びます。

インストール

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プロジェクトの初期化手順:

  1. 初期デザインを作成
  2. goa genを実行してベースコードを生成
  3. goa exampleを実行して実装スタブを作成
  4. スタブサービスをデプロイ

スタブサービスを早期にデプロイすることで、初期開発を通常の保守ワークフローに 合わせることができます。このアプローチにより以下が可能になります:

  • 複雑なロジックを追加する前にデプロイ手順を検証
  • 初日からモニタリングと可観測性を設定
  • 新規および既存のサービスで同じ開発サイクルに従う

スタブサービスがデプロイされると、通常の開発サイクルが始まります。これには、 生成されたハンドラーに実際のサービスロジックを実装し、デザインを変更するたびに goa genを実行し、実装を継続的にテストおよび反復することが含まれます。この サイクルにより、実装がデザインと同期を保ちながら、サービスのコアビジネスロジック の構築に集中できます。

ベストプラクティス

生成されたコードは、CI/CDパイプライン中に生成するのではなく、バージョン管理に コミットする必要があります。その理由は以下の通りです:

  • 再現可能なビルド:コミットされた生成コードにより、環境間で一貫したビルドを保証
  • 依存関係の解決go getなどのツールがリポジトリ内のコミットされたコードで確実に動作
  • バージョン管理の利点
    • 生成されたコードの変更を時間とともに追跡
    • コードレビュー時に生成されたコードの変更を確認
    • 必要に応じて以前のバージョンにロールバック
  • CI/CDの効率性:CI/CDでジェネレーターを実行しないことで、パイプラインが高速で信頼性が向上