Go で業務システムAPI を開発する
CRUD な業務システムAPI を Go で開発しています。規模は約20テーブル、エンドポイントが70程度です。(2021/01 現在)
基本構成
至ってシンプルです。エンドポイントがあって、DB から JSON 返すだけなので、コレで事足りています。他の選択肢としては、echo や xorm 等があるようです。gin と gorm を選んだ理由としては、スター数、コミット頻度、ドキュメントの充実ぶり等を考慮しました。
帳票出力には go-wkhtmltopdf を使用しています。別途、Puppeteer で帳票サービスを用意することも考えましたが、パフォーマンス的に Go で HTML を生成するほうが優れているだろうと考え採用しませんでした。逆にデメリットとしては、wkhtmltopdf では使用できる CSS が限られます 1。
開発環境
規模に依りますが、Docker for Mac でも十分な速度が出ています。VSCode との相性もよく、コード上からテストを実行したり、リファクタも快適です。
ライブリロード機能は紆余曲折ありましたが、Air に落ち着いています。少し前のバージョンは重たい印象がありましたが、最新版では改善されています。
API の検証には Postman、帳票には Insomnia と使い分けています。Insomnia は PDF を表示してくれるので重宝しています。
DB 管理には goose を使用しています。SQL、Go どちらでもマイグレーションが書けますが、私は SQL で運用しています。tbls は DBドキュメント作成ツールです。出力が markdown なので、同じリポジトリに含めておけば、GitHub 上で確認できるので大変便利です。
モック作成や、テナント、アカウント管理ツールとして、mitchellh/cli で CLIツールを作成しています。色々と試しましたが、mitchellh/cli に落ち着いています。
終わりに
小規模な API ですが、業務システムということで、静的型言語である Go を採用しました。開発体験、実行速度ともに素晴らしく、こういった事例には向いていると感じています。