🉐

GoとMySQLを使ったWebアプリケーションの便利ツール

に公開

こんにちは!株式会社Finatextで証券事業のバックエンドエンジニアをしております、@Goryudyumaです。
今日は、私が運用に関わっているGoとMySQLを使ったWebアプリケーションで活用している便利ツールを紹介します。

公開できる部分だけを抽出したリポジトリも用意しましたので、ぜひ参考にしてください。
👉 https://github.com/Goryudyuma/techblog-go-mysql-tools

この記事はFinatext Advent Calendar 2025 2日目の記事として書かれました!


sql-migrate

https://github.com/rubenv/sql-migrate

Go製のシンプルなマイグレーションツールです。
CLIとして実行することもできますし、ライブラリとして組み込むことも可能です。
GoのEmbedding機能を使ってマイグレーションファイルをバイナリに組み込めば、デプロイ先の環境に依存せず実行できます。


tbls

https://github.com/k1LoW/tbls

データベースのドキュメントを自動生成できるツールです。
ER図やDBスキーマをGitで管理でき、ER図はMermaid記法で出力するのがおすすめです。
GitHubはMermaidを標準対応しており、画像ファイルを直接埋め込むよりも差分が見やすくなります。

https://github.com/Goryudyuma/techblog-go-mysql-tools/blob/main/docs/schema/README.md

tblsにはLint機能もあり、とくに requireColumnComment が便利です。
これは、カラムにコメントがない場合に警告してくれる機能で、長期間運用されているサービスでありがちな「使われ方がわからないカラムが生まれる」問題を防いでくれます。

また、requireColumns によって created_atupdated_at の存在を強制することも可能です。
データの追加・更新日時は調査時に役立つことが多いため、基本的には入れておくのがおすすめです。
もちろん、固定データテーブル(たとえば都道府県マスタのようなもの)では、例外設定を行えばこれらのカラムを除外できます。


gorm/gen

https://gorm.io/gen/index.html

gorm.io/gen を利用して、実際のデータベーススキーマからGoの型を自動生成しています。
型変換やnullable対応、独自の便利メソッド追加なども柔軟に設定できます。
実データベースから生成することで、モデルとスキーマの不整合を防げるのが最大の利点です。

https://github.com/Goryudyuma/techblog-go-mysql-tools/blob/main/tools/modelgen/main.go


diff-pr-management

ここまで紹介したツールで、ドキュメントやコードを自動生成できるようにしていても、「生成し忘れ」や「git add し忘れ」で不完全なままマージされるリスクがあります。
人間はミスをする生き物なので、こうした部分は機械に任せましょう。CIを整備するのが大切です。

そこで活躍するのが diff-pr-management です。
あなたがPull Requestを作ると、CI上でブランチをcheckoutし、自動でコード生成を実行します。
もし生成結果とあなたが作ったPRに差分があれば、自動でその修正を行うPR(PRを修正するPR)が作られます。
作られたPRをマージするだけで、あなたの作ったPRは常に正しい状態に保たれます。

https://github.com/Goryudyuma/techblog-go-mysql-tools/blob/main/.github/workflows/test.yml#L72-L76
以下のようなPRを自動で生成してくれます:
https://github.com/Goryudyuma/techblog-go-mysql-tools/pull/3


おわりに

以上、Go×MySQL環境で便利に使えるツールを紹介しました。
参考コードを見ながら、ぜひ取り入れてみてください。
他にもおすすめツールがあれば、ぜひコメント欄で教えてください!

また、株式会社Finatextでは、開発体験を一緒に改善してくださるエンジニアを募集中です。
https://herp.careers/v1/finatexthd/iRI8okPMACP_

カジュアル面談も絶賛募集中です!
https://herp.careers/v1/finatexthd/vZWzSlI_B-qk

ここまで読んでくださり、ありがとうございました!

Finatext Tech Blog

Discussion