Open4

GoのソースコードをHomebrewでどのようにインストールさせるべきか

HIMURA TomohikoHIMURA Tomohiko

homebrewでインストールできるようにする予定のツールのレビューを受けた。
いまどきのHomebrewでgoのツールをインストールできるようにするのはどうするのがいいのだろうか。

気になっている点

  • brew installしたユーザがローカル環境でビルドすべきか、バイナリインストールすべきか
  • バイナリインストールさせる場合、用意させるバイナリはどんな物が必要か。例えば、macOSのメジャーバージョン単位で必要なのか
    • 後方互換性は確認した。おそらくOSのAPIに直接アクセスしてない限りは大丈夫なのでは(仮説)
  • いろんなツールがいろいろ複数管理しているリポジトリからgo installできるのか。
    • できない保証はないが簡単しらべたところわからず。
HIMURA TomohikoHIMURA Tomohiko

brew installしたユーザがローカル環境でビルドすべきか、バイナリインストールすべきか

  • ビルドさせるとinstallがコスト高なので、バイナリを配布を基本としつつ、ビルドができるのが理想だろう
    • ただし、複数OS、複数アーキテクチャをサポート仕様とするとバイナリ生成やアップロードが手間である
  • goはGo 1である限りは古いソースコードがビルド出来るようなので、ビルドのみという選択肢もありだろう
    • Xcodeがインストールされていない場合、installができない。しかし、brew installする際に基本インストールしているはずなので、そんなに気にしなくて良いはずである。
    • メジャーバージョンアップしているとアップデートが必要なので、その後に更新が必要ならひと手間存在する -> ユーザの問題としてもよいだろう
    • brewなのでwindowsサポートは不要だがLinuxサポートは最近されているのであるとベター

結論

  • バイナリインストール可能が理想
    • Go言語のツールチェーンをインストールは避けたいため
  • 対応アーキテクチャの広さからソースビルド配布も初期状態としてはよいだろう
  • すべてのアーキテクチャ、OSに対してバイナリ提供は実装コストが存在する。とりあえず、配布するためにソースビルドさせるのはありだろう
HIMURA TomohikoHIMURA Tomohiko

バイナリインストールさせる場合、用意させるバイナリはどんな物が必要か。例えば、macOSのメジャーバージョン単位で必要なのか

  • 最小限
    • x86_64
      • Rosetta2 でarm64は動作できるはず
      • OSのマイナーバージョンもおそらくご完成があるんじゃないだろうか
  • 理想
    • arm64_monterey
    • arm64_big_sur
    • x86_64_monterey
    • x86_64_big_sur
    • x86_64_catalina
    • x86_64_linux
  • これぐらいやってもいいだろう
    • arm64
    • x86_64

古いOSは過去2年分程度あれば十分ではないだろうか。(根拠0)

ここで気になるのは、 arm64とx86_64だけ用意すれば過去のmacOSで動作するのか。

試しにghqのバイナリをダウンロードして利用したところ利用できた。
https://github.com/x-motemen/ghq/releases/tag/v1.2.1
後方互換性はある

結論

一つだけで十分な可能性がある。後方互換性は確認できたので、古いOSビルドするのが確実だろう。
前方互換性は現時点で確認できてない。

HIMURA TomohikoHIMURA Tomohiko

いろんなツールがいろいろ複数管理しているリポジトリからgo installできるのか。

Goで書かれたツールなのでgo installでinstallできても良さそう。
githubのサブディレクトリに対してgo installできるのか。

go install github.com/xxx/xxx@ブランチ名などためしたけどinstallできず。
そこまで調べる必要はないとおもったので、有識者にきく。