yanom blog

様々な技術について書きます

godocがproxyに阻まれていい感じに使えない

最近仕事でWeb APIをGo言語で開発していました。
せっかくなのでドキュメントをgodocで残そうかと考え試行錯誤していたのでここの書き残します。
結論から言うといい方法がまだ見つかっていません。proxy滅びろ~。

やりたいこと

  • docker-compose up したときにgodocで開発したAPIのドキュメントがブラウザで見れるようにしたい。

構成

簡単に言うとweb APIサーバ、mongodbなどをdocker-composeで管理運用しています。
また、APIサーバのコンテナイメージにgolang:1.11-alpine3.8を使用しています。

godocを使うために

docker-compose up でwebサーバとして起動させたかったのと、web APIと同居させたくなかったので、今回はweb APIとは別にgodoc用のコンテナを作成しました。
docker-compose up 時に godoc -http=:8080されるイメージです。

立ちはだかるproxy

弊社にはproxyがあります。
そのため、コンテナ内でgo getするためには一工夫必要なのですが、今回は事前にdepを使ってvendor配下にgodocをインポートしておこうと考えました。

godocのインストール

vgoが1.12で正式導入されるので、もはやあまり使うことはなくなっていきそうな雰囲気はありますが、今回は依存関係の管理ツールにdepを使いました。
以下のコマンドにてvendor配下にgodocをインストールします。

$ dep ensure -add golang.org/x/tools/cmd/godoc
 "golang.org/x/tools/cmd/godoc" is not imported by your project, and has been temporarily added to Gopkg.lock and vendor/.                                  
 If you run "dep ensure" again before actually importing it, it will disappear from Gopkg.lock and vendor/.     

困ったこと

  • 上記に書いてありますが、depでは実際に使われていないパッケージをaddした場合、dep ensureすると管理から削除されてしまいます。dep ensureを使わないのはdepを使う上で不便ですし、いずれ忘れて実行しちゃいそうです。
  • そのため、ここを何とかしないとこの方法では運用が難しそうです。

まとめ

  • 今検討中なので、いい方法が思いつけば追記したいと思います。
    • 1つの方法としてはgolang:1.11イメージを使い、かつgodocをapiサーバと同居させればいい気もしますが、golang:1.11のコンテナイメージはサイズが大きく取り回しずらくなりそうです。
  • apiサーバと別のコンテナ内でgodocを上手いこと使う方法誰か教えて下さい。