LoginSignup
1
4

More than 5 years have passed since last update.

goaに触ってみる - 開発フローについて

Last updated at Posted at 2017-08-21

前回にgoa公式のgoaを始めるでapiを一本だけ作成しました(goaに触ってみる)

今回はその続きでgithubに上がってるgoaセラーの参考例
手元で動かしながら開発スタイルに慣れていこうと思います

基本的にはgithubに上がってるソースを見ながら
気づいた点をまとめていきます

controllersディレクトリの作成

controllersディレクトリを作って生成されるcontrollerを移す

$ tree ./ -L 1
./
├── Gopkg.lock
├── Gopkg.toml
├── app
・
・
├── bottle.go # ← こいつを下記のcontrollersに移す
├── controllers # ←
・
・
・
  • goaによって生成されるcontrolllerから差分のみ既存のコードに適用していくため

  • controllerに相当するコードは一度しか生成されないので

同じくapp_dev.goをmain.goと同じように設定する

ローカルで動かす実行ファイルも作っておく
基本はmain.goで生成されたものをコピペするだけ
ファイルの頭に下記のような記述をして、buildを分けられるようにする

app_dev.go
// +build app_dev

package main

こうすることでtagの記述でビルドを分けることができる

# local
$ go build -tags=app_dev -o cellar-dev

# prod
go build -o cellar-prod

Makefile作っとくといいですね

Makefile
#! /usr/bin/make
#
# Makefile for goa cellar example

build:
    @go build -o cellar

build-dev:
    @go build -o -tags=app_dev cellar-dev

ついでにコード生成のタスクも書いておく

Makefile
gen:
    @ls | grep -E '.go$$' | grep -v -E 'app_dev' | xargs rm -f
    @./vendor/github.com/goadesign/goa/goagen/goagen bootstrap -d path/to/design

# ↑のインデントがタブでないとMakefileではエラーになる難儀ですね。。
# Makefile:n: *** missing separator.  Stop.

designパッケージの分割

githubのリポジトリに従ってdesignパッケージを分割してみる

$ tree -L 1 design
design
├── api_difinition.go # API定義、hostとか全体の設定
├── health.go         # healthチェック、API自体が落ちてないか確認する用?
├── media_types.go    # レスポンス内容の定義
├── resources.go      # ルーティングの定義
└── user_types.go     # ユーザーが設定する基本型の拡張定義

ex.)

design/user_types.go
    Attribute("name", func() {
        MinLength(2)
        Example("Number 8")
    })

最後に

あとは実際にdesignに定義書いていって開発を進めていけば概ねokなのでしょうか
実際に書いていって詰まった点や、これが便利等あれば書いていきたいです

地味にScheme("ws")でwebsocket処理もサポートしているのがすごい
ただ、使っているのはgolang.org/x/net/websocketであり
gorilla/websocketではないです。。

このやり方がいいよというようなツッコミ歓迎です!

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4