SlideShare a Scribd company logo
1 of 23
Download to read offline
vendoring が無くなると
Go x Github private repo x Docker
運⽤用が地味に⾯面倒になって困る話 (未完)
Itsuki Sakitsu
⾃自⼰己紹介:猟師系webエンジニア
とあるGoプロジェクト
コードはGithub private repoで管理理
コードは
別のGithub private repoにも依存
想定ケース
• マイクロサービスが相互のgrpcサービスクライアントを参照
• ⾃自作ライブラリを切り出してprivate repoで管理理
素直にDockerfileを書くと…
Go get -d -v ./… がfail
Dockerイメージに
認可情報が無いので通信拒否
→認可情報を渡せばよい?
動くが…どうなんだろう?
—build-arg等を利利⽤用してGithub認可トークンを渡し、.netrcに保存
• github認可トークンは「アカウント」単位、無関係な個⼈人リポジトリも参照可
• ビルド専⽤用のgithubアカウント発⾏行行…?
救世主:depの濫⽤用
(実質vendoring)
depは何をしてくれるのか?
使い⽅方は `brew install dep` してから `dep init` とか `dep ensure` するだけ
1. Gopkg.lock による依存バージョンの管理理
2. 同時に全依存コードを リポジトリ直下の vendorフォルダ以下に永続化してくれる
• Private repoからのダウンロードもマシンローカルの認可情報を使うので当然普通に動く
dep導⼊入後のDockerfile
• 事前に dep ensure を実⾏行行、COPY . . でvendorフォルダごと⼀一括でCOPYする
• 不不必要に認可情報を取り回す必要なし
• Dockerfileもビルドコマンドもスッキリ
※コード改変毎に go getが⾛走るが、実質ダウンロードは発⽣生しない
vendorフォルダごと渡すため
githubとの通信は不不要
ところがどっこい…
Dep → vgo移⾏行行の流れ?
vgoでは依存の永続化先が変わる
$GOPATH/pkg/mod配下で⼀一括管理理
• vendorフォルダは使わない
• 環境全体で⼀一括管理理するのでリソース効率は良い
Go公式もvendoringは無くしたい
というお気持ち (当⾯面は残すとか)
意訳:vendoring消そうと思ってたけどフィー
ドバック⾊色々あったから残すことにはしたよ
dep導⼊入後のDockerfile
• 事前に dep ensure を実⾏行行、COPY . . でvendorフォルダごと⼀一括でCOPYする
• 依存コードが全てあるので後続のgo getは実質不不要
• 認可情報も渡す必要がなくなり、Dockerfileも起動コマンドもスッキリ
• コード改変毎に go getされてしまうが、動くのはCOPYだけなので実害なし
→go mod vendor で当座を凌ぐ
意訳:Go mod vendorコマンドを実⾏行行すれば
vendor 配下にビルドとテストに必要な全依存を
永続化するやで
1. おとなしくgithub認可トークンをdockerfileに⻝⾷食わせる?
• 適切に運⽤用すればセキュリティ懸念も少ないはず
• ビルド専⽤用のアカウントとトークンを⽤用意するとか
2. Go build処理理はいっそローカルで実⾏行行?
• Go versionなど、ビルド環境⾃自体に差分が⽣生まれる懸念が
3. $GOPATH直下でdocker buildして /pkg/mod 配下を COPY でぶち込む?
• Docker build毎に cd させられるのが流⽯石にちょっと…
4. Github enterpriseを使う?
• そもそもprivate repoを使うことをやめればよいのだ
最終的なベスプラは⾒見見えぬまま
vendoring が無くなると Go x Github private repo x Docker 運用が地味に面倒になって困る話 (未完)

More Related Content

Similar to vendoring が無くなると Go x Github private repo x Docker 運用が地味に面倒になって困る話 (未完)

地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれKazumi IWANAGA
 
Azure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整える
Azure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整えるAzure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整える
Azure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整えるKazumi IWANAGA
 
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込むKazumi IWANAGA
 
20130608 git-3
20130608 git-320130608 git-3
20130608 git-3Kasu Unko
 
Metahub for github
Metahub for githubMetahub for github
Metahub for githubSuguru Oho
 
GitHub Copilotとともに次の開発体験へ
GitHub Copilotとともに次の開発体験へGitHub Copilotとともに次の開発体験へ
GitHub Copilotとともに次の開発体験へKazumi IWANAGA
 
GitHub最新情報キャッチアップ 2023年6月
GitHub最新情報キャッチアップ 2023年6月GitHub最新情報キャッチアップ 2023年6月
GitHub最新情報キャッチアップ 2023年6月Kazumi IWANAGA
 
GitHub Codespaces と Azure でつくる、エンタープライズレベルの開発環境
GitHub Codespaces と Azure でつくる、エンタープライズレベルの開発環境GitHub Codespaces と Azure でつくる、エンタープライズレベルの開発環境
GitHub Codespaces と Azure でつくる、エンタープライズレベルの開発環境Kazumi IWANAGA
 
パフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したいパフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したいzaru sakuraba
 
@s_ssk13さん向けGitHub入門
@s_ssk13さん向けGitHub入門@s_ssk13さん向けGitHub入門
@s_ssk13さん向けGitHub入門Takashi Imagire
 
LingrBotを作ってみた/ ownCloud+Andoroid+Picasa+Flickr連携/Chromecast をLinuxで遊ぶ
LingrBotを作ってみた/ ownCloud+Andoroid+Picasa+Flickr連携/Chromecast をLinuxで遊ぶLingrBotを作ってみた/ ownCloud+Andoroid+Picasa+Flickr連携/Chromecast をLinuxで遊ぶ
LingrBotを作ってみた/ ownCloud+Andoroid+Picasa+Flickr連携/Chromecast をLinuxで遊ぶKenichiro MATOHARA
 
2015.04.19 WordBench 埼玉 Git & WordPress
2015.04.19 WordBench 埼玉 Git & WordPress2015.04.19 WordBench 埼玉 Git & WordPress
2015.04.19 WordBench 埼玉 Git & WordPressYutaro Miyazaki
 
git gitにされたオレの屍を超えていけ
git gitにされたオレの屍を超えていけgit gitにされたオレの屍を超えていけ
git gitにされたオレの屍を超えていけDaisuke Kasuya
 
WindowsでGitを使う際のベストプラクティス
WindowsでGitを使う際のベストプラクティスWindowsでGitを使う際のベストプラクティス
WindowsでGitを使う際のベストプラクティスRyo Sumasu
 
Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!ymmt
 
「CodeYourRuby」で オープンなコードレビューを体験しよう
「CodeYourRuby」で オープンなコードレビューを体験しよう「CodeYourRuby」で オープンなコードレビューを体験しよう
「CodeYourRuby」で オープンなコードレビューを体験しよう中條 剛
 
日本androidの会 中国支部 29回勉強会 github
日本androidの会 中国支部 29回勉強会 github日本androidの会 中国支部 29回勉強会 github
日本androidの会 中国支部 29回勉強会 githubTomohiko Himura
 

Similar to vendoring が無くなると Go x Github private repo x Docker 運用が地味に面倒になって困る話 (未完) (20)

地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ
 
Azure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整える
Azure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整えるAzure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整える
Azure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整える
 
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む
 
20130608 git-3
20130608 git-320130608 git-3
20130608 git-3
 
Metahub for github
Metahub for githubMetahub for github
Metahub for github
 
GitHub Copilotとともに次の開発体験へ
GitHub Copilotとともに次の開発体験へGitHub Copilotとともに次の開発体験へ
GitHub Copilotとともに次の開発体験へ
 
今さら聞けない人のためのGitLabの始め方 Ubuntu編
今さら聞けない人のためのGitLabの始め方 Ubuntu編今さら聞けない人のためのGitLabの始め方 Ubuntu編
今さら聞けない人のためのGitLabの始め方 Ubuntu編
 
GitHub最新情報キャッチアップ 2023年6月
GitHub最新情報キャッチアップ 2023年6月GitHub最新情報キャッチアップ 2023年6月
GitHub最新情報キャッチアップ 2023年6月
 
GitHub Codespaces と Azure でつくる、エンタープライズレベルの開発環境
GitHub Codespaces と Azure でつくる、エンタープライズレベルの開発環境GitHub Codespaces と Azure でつくる、エンタープライズレベルの開発環境
GitHub Codespaces と Azure でつくる、エンタープライズレベルの開発環境
 
パフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したいパフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したい
 
@s_ssk13さん向けGitHub入門
@s_ssk13さん向けGitHub入門@s_ssk13さん向けGitHub入門
@s_ssk13さん向けGitHub入門
 
Yapc2012資料
Yapc2012資料Yapc2012資料
Yapc2012資料
 
LingrBotを作ってみた/ ownCloud+Andoroid+Picasa+Flickr連携/Chromecast をLinuxで遊ぶ
LingrBotを作ってみた/ ownCloud+Andoroid+Picasa+Flickr連携/Chromecast をLinuxで遊ぶLingrBotを作ってみた/ ownCloud+Andoroid+Picasa+Flickr連携/Chromecast をLinuxで遊ぶ
LingrBotを作ってみた/ ownCloud+Andoroid+Picasa+Flickr連携/Chromecast をLinuxで遊ぶ
 
2015.04.19 WordBench 埼玉 Git & WordPress
2015.04.19 WordBench 埼玉 Git & WordPress2015.04.19 WordBench 埼玉 Git & WordPress
2015.04.19 WordBench 埼玉 Git & WordPress
 
git gitにされたオレの屍を超えていけ
git gitにされたオレの屍を超えていけgit gitにされたオレの屍を超えていけ
git gitにされたオレの屍を超えていけ
 
WindowsでGitを使う際のベストプラクティス
WindowsでGitを使う際のベストプラクティスWindowsでGitを使う際のベストプラクティス
WindowsでGitを使う際のベストプラクティス
 
Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!
 
「CodeYourRuby」で オープンなコードレビューを体験しよう
「CodeYourRuby」で オープンなコードレビューを体験しよう「CodeYourRuby」で オープンなコードレビューを体験しよう
「CodeYourRuby」で オープンなコードレビューを体験しよう
 
日本androidの会 中国支部 29回勉強会 github
日本androidの会 中国支部 29回勉強会 github日本androidの会 中国支部 29回勉強会 github
日本androidの会 中国支部 29回勉強会 github
 
P4p20120408
P4p20120408P4p20120408
P4p20120408
 

vendoring が無くなると Go x Github private repo x Docker 運用が地味に面倒になって困る話 (未完)