1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Goでマルチバイナリ構成のレポジトリを作る

Posted at

背景

下記の意図があり、1レポジトリでマルチバイナリの構成にするためのディレクトリ構造を考えていた。

  • go getで全てのバイナリがインストール出来ること
  • 共通で利用するコードが結構あるので、これをトップディレクトリに置いておきたい
  • 開発時は、docker-composeで全部立ち上げたい

ディレクトリ構成

先にディレクトリ構成を晒す。
省略しているものがあるけど、実際のものと大体同じ。

├── Gopkg.lock
├── Gopkg.toml
├── Makefile
├── entity
├── contrib
│   ├── admin-server
│   │   ├── Dockerfile
│   │   ├── main.go
│   └── api-server
│       ├── Dockerfile
│       ├── main.go
├── docker-compose.yml
├── middleware
├── repository
├── service
└── vendor

こんな感じでcontrib配下にディレクトリを掘って、管理画面とAPIサーバをそれぞれ内包しています。

開発時のdocker-compose

開発時は管理画面とAPIサーバ、あとMongoDBと管理用のmongo-expressも立ち上げるようにしている。

docker-compose.yml
version: '3'
services:
  api:
    build:
      context: .
      dockerfile: contrib/api-server/Dockerfile
    volumes:
      - .:/go/src/app
    ports:
      - 18080:18080
    links:
      - mongo
    environment:
      API_SERVER_STORE_URL: mongodb://mongo/example
  admin:
    build:
      context: .
      dockerfile: contrib/admin-server/Dockerfile
    volumes:
      - .:/go/src/app
    ports:
      - 19080:19080
    links:
      - mongo
    environment:
      ADMIN_SERVER_STORE_URL: mongodb://mongo/example
  mongo:
    image: mongo:3.4
    volumes:
      - store-data:/data/db
    ports:
      - 27017:27017
  mongo-admin:
    image: mongo-express:0.38
    ports:
      - 18081:8081
    links:
      - mongo
    environment:
      ME_CONFIG_MONGODB_ENABLE_ADMIN: "false"
volumes:
  store-data:
    driver: local

今のところこんなディレクトリ構成、docker-composeで開発は問題ない。
公開用Dockerイメージのビルドは、

$ docker build -f contrib/api-server/Dockerfile -t hoge:fuga .
$ docker build -f contrib/admin-server/Dockerfile -t hoge:fuga .

上記のようなコマンドを実行するタスクをMakefileに定義している。

go getで全てのバイナリをインストールするには

本記事でのレポジトリを仮に、
github.com/neko-neko/mutiple-binary
だとすると

$ go get -v -u github.com/neko-neko/mutiple-binary/contrib...

上記コマンド実行後、$GOPATH/bin/配下に

  • api-server
  • admin-server
    が格納される。

最後に

APIサーバ / 管理画面 / 共通コード(この例だとentityとかrepositoryとかmiddlewareとかのセット)ごとにレポジトリを分ければ良いじゃんって思うけど、1人で全部メンテするのは面倒くさかったのよね。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?