スキップしてメイン コンテンツに移動

投稿

5月, 2017の投稿を表示しています

自動生成されるファイル

自動生成されるファイル 先ほどのサンプルアプリケーションの作業ディレクトリには、 以下のファイル・ディレクトリがあります。 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です。 コントローラ
Goa Hello World この章では、goaを使って Hello World! と表示させるAPIのサンプルを作ってみます。 何となくgoaとはどういうものか、感覚が掴めると思います。 セットアップ サンプルを作る土台作りをしましょう。 gvm golang 1.7.5 goa の3つをインストールします。 ※既にインストールしている場合は読み飛ばしてください gvmをインストール サンプルはGoのバージョン 1.7.5 を使って作っていきます。  それではまず、Goのバージョン管理ツールである gvm をインストールしましょう。 $ bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer) $ source ~/.gvm/scripts/gvm $ gvm version これで、gvmのバージョンが表示されたら成功です。 Goをインストール gvmを使ってGoをインストールします。 通常、gvmを使ってGoをインストールする場合は $ gvm install go1.7.5 で良いのですが、Mac OSが Sierra以上 だと、コンパイルが失敗します。 ※ このブログを執筆している時点での話なので、そのうち解消しているかも知れません なので -B オプションを付けて、バイナリのみをインストールします。 $ gvm install go1.7.5 -B $ gvm use go1.7.5 $ go vesion Goのバージョンが表示されたら成功 です。 goaのインストール $ go get -u github.com/goadesign/goa/... $ goagen version goagenのバージョンが表示されたら成功 です。 実装 セットアップが完了したところで、goaを使ってアプリケーションのデザインをしていきます。  作業ディレクトリは goasample としましょう。 $ cd $GOPATH/src $ mkdir goasample $ cd goasamp

goa -Golang Web Application Framework-

 Webアプリケーションフレームワーク goa goaとは、GolangでWebアプリケーションを構築していくフレームワークです。 今流行りのマイクロサービスやAPIサーバを 早急に構築 できます。(HTMLを返すWebサーバももちろん、実装可能です) 早急 といった言葉を使ったのは、Webアプリケーションを構築する際の ルーティング リクエストパラメータの定義 レスポンスパラメータの定義 パラメータのバリデーション コントローラの定義 といった、ビジネスロジック以外の土台部分を自動で生成してくれて、 ビジネスロジックの実装に専念できるからです。 自動生成といっても、思い描いたものが勝手にできる訳ではなく、 goa独自のDSLを記述してアプリケーションの仕様を定義する( デザイン する) 必要があります。 goaではアプリケーションの枠組みを、 design.go (デザインファイル)というAPIの定義書を作って生成していきます。 DSLを覚える学習コストはありますが、それに見合った以上の働きをしてくれます。 Webアプリケーションのフレームワークとして有名な Ruby on Rails も、 お作法を知らないと、レールから外れた実装をする事になり複雑な実装になってしまいます。 が、Railsは世界中で使われてる有名なフレームワークとなっています。 その学習コスト以上に見合った以上の働きがあるからでしょう。 goaは、ビジネスロジックに没頭できる点において、 Railsに匹敵できるほどポテンシャル を持っていると思います。 もちろん、RubyではなくGo言語なので、言語仕様上の違いがあり単純に比較はできません。 このブログでは、自分の学習結果のアウトプットとして、 goaについての紹介を連載 していきたいと思います。