Goで小さく始める時のディレクトリ構成とアーキテクチャを考える
ディレクトリ構成は下記が説明もしっかりあって必要十分にまとまってる気がするので、これを元に不要な部分を削ると良さそう。
Clean Architectureのサンプル。
ぱっと見下記は変えたい気がするが、概ねいい感じな気はする。
- entity分けなくても良さそう?repoに入れておいても良さそう。entityをなくすとオニオンぽくなるのかも?
- routing定義が分散するのやめたい?
下記も結構良き。JWTで認証組み込みたい時に参考になりそう。
レイヤーで分ける or 機能毎で分けるの発想が微妙に違うとディレクトリ構成が微妙に変わるぽい。
例えば下記の場合だとinternal/album
配下にservice, repositoryが入ってるけど、上記2つのrepoだとそれぞれpackageに分けてる。
参考
下記の記事で紹介されていたリポジトリを参照した。
ざっくり分かったのでいける気がする。
認証は一旦なしで良いので下記を真似て作ってみる。
これにした理由は前職がこれぽい感じだったから構成に慣れてそうな気がするから。
templateから作りたいときはUse this template
から作れるの便利。
postgresをmysqlにしつつ、不要なコード(ex. rabbitmq)を消したい。
make run
を叩くためにはローカルにswagを入れてあげる必要がある。
make runはswagを入れてもなんかエラーが出るので一旦無視。
go-migrateを入れてあげてmigrationを実行する。
なかなかに不親切。
手順的には下記。
# ~/go/bin/swagに入った。人によっては違う場所に入るかも。
go install github.com/swaggo/swag/cmd/swag@latest
# https://zenn.dev/keyamin/articles/24695c455c1591#cli-%E3%81%A7%E8%A9%A6%E3%81%99
brew install golang-migrate
make migrate-up
テーブルができる。
make runを叩くためにはswagのversionを1.7.8にすれば行けた。
詳しくはこのissueにあるようにswag.Specっていう定数が1.7.8までにしかなくてエラーを発生してしまうのが原因ぽい。
下記で立ち上がるはず
go install github.com/swaggo/swag/cmd/swag@v1.7.8
~/go/bin/swag -v
swag version v1.7.8
make run
# http://localhost:8080/v1/translation/historyにアクセスするとレスポンスが返される
swagいるかなぁ。試しにやるくらいならちょっとオーバーな気もする。
docker compose up appを使う形に修正で良い気もする。
swagちゃんとググったらめっちゃ便利そうなのでやっぱり残そう
hot-reloadしたい気分
マルチステージビルド便利
監視を自作しなければpromhttpはなくても良いな
そんなに大きな問題じゃないけど、repo, webApiはusecaseディレクトリ外にある方がクリーンアーキテクチャぽい気はする。
結構見えてきた感あるな。
参考
mockgenもローカルに必要だった。
コンテナ立てて、そこにinstallしてそれで動かした方が良い説
make bin-depsを叩けば良いぽいな。
MITライセンスなのでLICENSEファイルは残す必要があるぽい。
下記をやったら動作確認してみる。