自動生成されるファイル 先ほどのサンプルアプリケーションの作業ディレクトリには、 以下のファイル・ディレクトリがあります。 design/ app/ client/ swagger/ tool/ helloworld .go main .go 一つ一つ見ていきましょう。 生成物一覧 design/design.go これは、最初に実装したデザインファイルになります。 アプリケーションの枠組みを決める設計図のようなものです。 goa独自の DSL(domain-specific language) を使って、APIの仕様を定義していきます。 app/ ここには、デザインされたアプリケーションの、実際に動くコードが生成されていきます。 基本的に、このディレクトリに格納されたファイルは 編集不可(できるけど、しちゃだめ) と考えて良いです。 プログラマが追加実装しても、次にまたコード生成した場合、プログラマの追加実装は上書きされて消されてしまいます。 app/contexts.go コンテキストが実装されています。 goaでは基本的に、API一つ一つに対して対応するコンテキストが実装されていきます。 コンテキストとは、HTTPリクエストを受け付けてからレスポンスを返すまで、 一連の流れが終わるまでの状態を表します。 2つのHTTPリクエストがあった場合、コンテキストは別々のオブジェクトとなります。 どのHTTPリクエストなのかを識別できるような、リクエスト毎の固有情報ですね。 コンテキストは3つのプロパティを持ち、 type ShowHelloworldContext struct { context . Context * goa . ResponseData * goa . RequestData } Go標準のContextと、リクエスト・レスポンスを持っています。 app/controllers.go コントローラの interface が定義されています。 コントローラとは、Webアプリケーションでよく使われるデザインパターン MVC(Model View Controller) のControllerです。 コントローラ