Eevee
Generate model, repository, dao sources for Go application
Install / Use
/learn @blastrain/EeveeREADME
eevee
Generate model, repository, dao sources for Go application
<img width="500px" src="https://user-images.githubusercontent.com/209884/79103149-0ed3e680-7da7-11ea-8b89-474a01db7bad.png"></img>
eevee はアプリケーション開発時に必要となる
キャッシュやデータベースといったミドルウェアとの効率的なデータのやりとりや
開発時に生じる冗長な作業を自動化するための仕組みを提供します。
データをいかに簡単かつ効率的に参照し書き込めるかということにフォーカスしているため、
ルーティングなどの機能は提供していません。
そのため、 echo や chi や goji といったアプリケーションフレームワークと同時に利用することを想定しています。
goa が提供しているような APIリクエスト・レスポンス を自動生成する機能等も存在しますが、
プロジェクトにあわせて導入するしないを判断することができます。
eevee が提供する機能は主に次のようなものです。
- スキーマ駆動開発によるモデル・リポジトリ層の自動生成
- モデル間の依存関係の自動解決
Eager Loading/Lazy Loadingを利用した効率的なデータ参照- テスト開発を支援する mock インスタンス作成機能
- モデルからJSON文字列への高速な変換
- API リクエスト・レスポンスとそのドキュメントの自動生成
- プラグインを用いた柔軟なカスタマイズ
eevee は 600 を超えるテーブル、150万行を超える規模のアプリケーション開発を日々支えており、
小規模開発から大規模開発まで様々な用途で利用することができます。
目次
- 使い方
- 設定ファイル
- 各機能について
- eevee による実践的な開発方法
- Committers
- License
使い方
まずは実際に eevee を利用することで何ができるようになるのかを見ていきます。
ここで紹介しているコードは _example/01_simple 配下に置かれています。
eevee のインストール
$ go get go.knocknote.io/eevee/cmd/eevee
無事インストールできていれば、 $GOPATH/bin/eevee があるはずです。
eevee --help が実行できれば、インストールは完了です
作業ディレクトリの作成
アプリケーション開発のための作業用ディレクトリを作成してください
go.mod ファイルの作成
いつものように go.mod ファイルを作成してください
$ go mod init simple
アプリケーションコードの作成
今回は echo の https://echo.labstack.com/cookbook/crud をベースに
eevee を利用したいと思います。
リンク先にあるコードは以下のようになっています。
package main
import (
"net/http"
"strconv"
"github.com/labstack/echo"
"github.com/labstack/echo/middleware"
)
type (
user struct {
ID int `json:"id"`
Name string `json:"name"`
}
)
var (
users = map[int]*user{}
seq = 1
)
func createUser(c echo.Context) error {
u := &user{
ID: seq,
}
if err := c.Bind(u); err != nil {
return err
}
users[u.ID] = u
seq++
return c.JSON(http.StatusCreated, u)
}
func getUser(c echo.Context) error {
id, _ := strconv.Atoi(c.Param("id"))
return c.JSON(http.StatusOK, users[id])
}
func updateUser(c echo.Context) error {
u := new(user)
if err := c.Bind(u); err != nil {
return err
}
id, _ := strconv.Atoi(c.Param("id"))
users[id].Name =
