- バックエンド / リーダー候補
- PdM
- Webエンジニア(シニア)
- Other occupations (18)
- Development
- Business
こんにちは、Infrastructure Squad でエンジニアをしている田中です。
今回はGo言語での開発を行うエンジニアのために社内で運用している GoDoc について紹介します。
この記事は Go3 Advent Calendar 2019 の6日目です。
なぜ社内 GoDoc が必要なのか
Go言語公式のGoDoc は公開リポジトリであれば特に何もせずドキュメントを見ることができますが、社内に閉じているようなプライベートリポジトリでは見ることができません。
Wantedly ではプロダクトのコードを GitHub のプライベートリポジトリで開発しているため公式 GoDoc は使えず、少し不便ですがコマンドライン上でドキュメントを閲覧していました。
社内ではマイクロサービス化の推進により目的に合わせて言語が選べるようになったことで Go を書く人口が増えたり、各サービスから利用する共通ライブラリの重要性が高まっていることもあり、Go を書くエンジニアの生産性を上げるためにはプライベートリポジトリのドキュメントが見れる GoDoc が必要でした。
プライベートリポジトリが見れる GoDoc
公式 GoDoc のコードは https://github.com/golang/gddo で公開されています。
https://github.com/golang/gddo/wiki/Development-Environment-Setup を見ると GITHUB_TOKEN
という環境変数を起動時に指定できることがわかります。
手元の環境で起動してみると社内のプライベートリポジトリのドキュメントを見ることができたのでこれをほぼそのまま利用しています。
GoDoc を Kubernetes 上で動かす
github.com/golang/gddo/gddo-server は GAE(Google App Engine)上で運用されることを想定してコードが書かれており GAE API server を用意する必要があります。
API server については GAE にデプロイすれば何も問題はないのですが、アプリケーションを動かす環境を Kubernetes に寄せて運用を統一化したいという Wantedly 特有の事情もあり、パッチを当てた https://github.com/bgpat/gddo を作りました。
Kubernetes 上で GoDoc を運用するためには下記3つのコンポーネントが必要です。
- gddo-server (GoDoc 本体)
- Redis (キャッシュ用、GAE でも必要)
- GAE API server
GAE API server は google-cloud-sdk に同梱されているものを使います。
Kubernetes で動かすためには Docker 化する必要があるため自作しました。 https://github.com/bgpat/docker-gae
これらのサーバーを組み合わせるとプライベート GoDoc が Kubernetes 上で運用できます。
Kubernetes 用のマニフェストファイルのサンプルは https://github.com/bgpat/k8s-godoc に置いてあるので参考にしてください。