このレポジトリは動きません
goでwebアプリケーションを開発するときにBaalというドキュメントフォーマットとSQLからどんなファイルを生成してどうやって開発しているかと言うのを示すためのサンプルです
Baal はKAYACで使っているAPIドキュメントを兼ねたクライアントのコードをジェネレートするためのIDLです。
静的型付け言語のGoで開発するに当たってGoでのgenerateでも活用するようになりました。
baal/*
以下の.faced
ふぁいるから app/api/*.auto.go
app/data/**/*.auto.go
を生成します
ジェネレータはgo-baal を使ってIDL解析し、text/template などで生成し x/tools/imports でフォーマットしています
DSLとしてSQLでいいじゃん派でORMごとにオレオレDSLを覚えたくないので、SQLからコードを生成しています。
sqlをもとに app/database/table/*.auto.go
と app/database/row/*.auto.go
を生成しています。
ジェネレータはschemalexを使って解析し、text/template などで生成し x/tools/imports でフォーマットしています
このサンプルではありませんが、tableがmasterdataである場合はユニークインデックスをキーにしたキャッシュコードも自動生成しています。
- baal定義を書いてクライアントサイドエンジニアと同意を取る
- sqlを書いてスキーマを決め、サーバーサイドエンジニアでレビューをする
- baalからハンドラーをジェネレートする
app/database/*
いかのコードをジェネレートする- app/database/row/以下に手でコードを書いてrowからdataに変換する関数を無心で書く
- modelにAPIと対称となるコードを書く(ここに時間を使う)
- apiとmodelを結合しHandlerを登録する