kkeisuke blog

Go で業務システムAPI を開発する

CRUD な業務システムAPI を Go で開発しています。規模は約20テーブル、エンドポイントが70程度です。(2021/01 現在)

基本構成

至ってシンプルです。エンドポイントがあって、DB から JSON 返すだけなので、コレで事足りています。他の選択肢としては、echoxorm 等があるようです。gingorm を選んだ理由としては、スター数、コミット頻度、ドキュメントの充実ぶり等を考慮しました。

帳票出力には 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 に落ち着いています。

Insomnia で 帳票出力の確認
Insomnia で 帳票出力の確認

終わりに

小規模な API ですが、業務システムということで、静的型言語である Go を採用しました。開発体験、実行速度ともに素晴らしく、こういった事例には向いていると感じています。

Footnotes

  1. 次期バージョン 0.13.x で WebKit Engine の更新が予定されているようです。