Go開発に最適な構成:TypeSpec + ogen + sqlc + orval + MSW + Docker Compose + Taskfile で爆速プロトタイピング
最近、Go(Golang) の開発プロジェクトでは以下のような構成を採用していて、開発体験がかなり快適になっている。
- API定義:TypeSpec
- バックエンド生成:ogen
- DBクエリ定義:sqlc
- フロントAPIクライアント生成:orval
- モックAPI:MSW
- ローカル統合:Docker Compose + air
- タスク管理:Taskfile
📝 TypeSpec:省量・高視認性・AIフレンドリー
TypeSpec は OpenAPI を生成するための DSL。記述量が少なく、構造がシンプルなので全体を把握しやすい。記述が冗長にならないので AI にそのまま投げても補完や変換がしやすい のが地味に便利。設計を進めるフェーズでのスピード感が全然違う。
最近やっと 1.0.0 が出たので安心して使えるようになりました。
⚙️ ogen:OpenAPI仕様に基づくバリデーションが神
OpenAPI から Go サーバーコードを自動生成してくれる ogen
は、スキーマに基づいた自動バリデーション付きのハンドラを生成してくれる。形式チェック、型制約、minLength
, enum
, pattern
などが一切の手書きコードなしでサポートされるのが最高。
ogen が interface を定義してくれるので、中身を実装していけば良いのでわかりやすい。
🗃️ sqlc:SQLファースト、型安全なDB操作
RDB には生SQLでアクセスしたい派なので sqlc
を採用。スキーマとクエリを書くと、Goの型付き関数が自動生成される。ORMに頼らず、SQL最適化や複雑なJOINもコントロールしやすいし、IDE補完が効くのも安心。
🧰 Taskfile:Goでgo install
できるシンプルビルド管理
Makefile より直感的で、YAMLベースで読みやすい。しかも Go 製なので、go install
一発でプロジェクトに導入できるのが最高にラク。
go install github.com/go-task/task/v3/cmd/task@latest
で使えるし、CI にもそのまま組み込みやすい。
🖼️ 開発時のために react + mui で ui を構築。 orval で API アクセス。MSW モックして GitHub Pagesにも展開
実装した golang のサーバーを動作確認するには web ui を作るのが手っ取り早い。web ui を作ることで、実際にどういう風に api が呼ばれるかのイメージがつくので API 自体の品質も上がる気がします。 orval で openapi 定義からクライアントを生成し、CORS で API にアクセスする形になっています。
フロントエンドエンジニアに実際の動作を体感してほしいわけですが、サーバーを動かしてもらうのはハードルが高いです。 というわけで orval のモック機能をつかって msw/browser で API 呼び出しをエミュレートします。 この構成にすると、バックエンドが完成する前でも静的なフロントで UI を確認できるのもメリットですね。 そのまま GitHub Pages にデプロイして、関係者に URL 共有しておけばコミュニケーションもスムーズ。
🐳 Docker Compose + air:即時フィードバックでサーバー開発が捗る
バックエンド側は Docker Compose
を使って開発環境を管理。中で air
を動かすことで、ファイル変更 → 自動ビルド → 再起動 の流れがサクッと作れる。
DBやValKey等も同時に起動できて、依存環境の整備も一発。
✅ まとめ
技術 | 役割 | 快適ポイント |
---|---|---|
TypeSpec | API設計 | 少ない記述で設計と見通しが良く、AIにも強い |
ogen | Goサーバー生成 | 自動バリデーションと型安全 |
sqlc | DBアクセス | SQLファースト + コンパイル時の型保証 |
orval + MSW | フロント確認 + モック | 開発用フロントエンド兼、モック生成してデモに使える |
Docker Compose + air | 統合環境 | air による即時フィードバック |
Taskfile | タスク管理 | go install 一発 + YAMLで読みやすい |
全体的に型で守られるようになっているので、typespec と schema.sql を真面目に実装すれば、あとはだいたい AI で生成できる気がしてます。
この構成にしてから、設計・実装・動作確認・共有までが非常にスムーズな気がしています。 もっとこういうの使った方が良いよ、とかあれば教えて欲しいっす。
Published: 2025-06-06(Fri) 10:54