GoコードをGitHubに結合させるな
मूल शीर्षक: Don't couple your Go code to GitHub
यह क्यों महत्वपूर्ण है
プロバイダー変更コストを下げ、ベンダーロックインを防ぐ設計指針としてGo開発チームに実践的な示唆を与える。
Go言語ではコードのimportパスにgithub.comなどのホスティングURLを直接使う慣習があるが、これがプロバイダー変更を困難にする。開発者Iain Cambridgeは、カスタムドメインを使うことでこの問題を回避できると解説している。
Go言語の特徴の一つは、コードの取得場所をimportパスに直接記述する仕組みだ。例えば「github.com/user/repo」のように書くと、Goツールが自動でfetchする。便利な反面、Gitホスティングプロバイダーにコードが強く結びついてしまうという欠点がある。
Cambridgeは実際にこの問題が深刻化した企業事例を紹介している。その企業はGitLab、GitHub、Azure DevOpsの三つのプラットフォームを同時に運用していた。コードのimportパスを変更するコストが大きすぎて「時間がない」という理由から移行できず、三サービスへの費用を同時に支払い続けることになったという。
解決策として提案されているのが、「go.uber.org」「go.mongodb.org」などに見られるカスタムドメインの活用だ。例えば「go.iain.rocks/boneclone」というimportパスを設定しておけば、裏側のホスティングをGitHubからGitLabに変更しても、ユーザー側のinstallコマンドは一切変わらない。
具体的な実装方法として、NginxとHTMLのメタタグを組み合わせた設定例が公開されている。`?go-get=1`クエリを持つGoツールのリクエストにはカスタムドメインのHTMLを返し、通常のブラウザアクセスはGitHubへ301リダイレクトする構成だ。Cambridgeは「商用Goプロジェクトはすべてカスタムドメインを使うべき」と主張している。