コンテンツにスキップ

GitHub Releases からバイナリをインストールする手軽な方法

GitHub Releases には事前にビルドされたバイナリを置くことができる。これを利用して、CLI ツールなどをインストールできる。 インストールには curltar を使っていくつかのコマンドを実行する。このコマンド実行が少し手間なので、これを簡略化するためのスクリプトやツールがある。 今回は、それらのスクリプトやツールを使って、GitHub Releases からバイナリをインストールする方法を備忘録として残す。

この記事では次のツールについて触れる。

installer

Installer はシェルスクリプトを返す HTTP サーバーです。返されたスクリプトは、プラットフォームの OS とアーキテクチャを検出し、URL のセレクションから選択し、適切なファイルをダウンロードし、ファイルを un(zip|tar|gzip)し、バイナリ(最大ファイル)を見つけ、オプションで PATH に移動します。お気に入りのコンパイル済みプログラムを curl だけでインストールするのに便利です。

installer は、プラットフォームを自動検知し、適切なバイナリをダウンロード・展開・配置してくれるシェルスクリプトを返す HTTP サーバー。curl 1つでインストールを完結できる手軽さが魅力。

使い方

curl で対象のリポジトリを指定するだけでインストールできる。

# install <user>/<repo> from github
curl https://i.jpillora.com/<user>/<repo>@<release>! | bash
1
2
3
4
5
6
$ curl -s i.jpillora.com/mholt/caddy! | bash
Downloading mholt/caddy v0.8.2 (https://github.com/mholt/caddy/releases/download/v0.8.2/caddy_darwin_amd64.zip)
######################################################################## 100.0%
Downloaded to /usr/local/bin/caddy
$ caddy --version
Caddy 0.8.2

Private repository にも対応している。

gh-install

gh-install は GitHub Releases からバイナリをインストールするためのスクリプト。対象のリポジトリを指定して実行する。

使い方

1
2
3
$ ./install.sh --git <org>/<repo>
# Or
PS install.ps1 -git <org>/<repo>

dra

GitHub からリリースアセットをダウンロードするためのコマンドラインツール。

Rust で書かれており、シングルバイナリとして動作する。実行マシンのアーキテクチャにあるパッケージを自動でダウンロードすることもできるし、手動でダウンロードすることもできる。

setup

brew install dra

usage

1
2
3
4
dra download devmatteini/dra-tests

# you can use -a or --automatic
dra download -a devmatteini/dra-tests

install-release

install-release は、GitHub のリリースからあなたのデバイス用のツールを直接インストールし、それらを更新しておくための CLI ツールです。GitHub のリリースからツールをインストールするための小さなパッケージ・マネージャーと考えてください。

パッケージマネージャーとして紹介してるように、インストール以外に ls や upgrade など様々なコマンドが利用できる。

setup

# Install install-release
pip install -U install-release

usage

これまでのツールと少し違うのは、GitHub の URL を指定する点。

1
2
3
4
5
# Example Installation a tool named `gron` directly from its GitHub releases

# install-release get [GITHUB-URL]

 install-release get https://github.com/tomnomnom/gron
 install-release get "https://github.com/ahmetb/kubectx"

📑 Repo     : ahmetb/kubectx
🌟 Stars    : 13295
 Language : Go
🔥 Title    : Faster way to switch between clusters and namespaces in kubectl

                              🚀 Install: kubectx
┏━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┓
 Name     Selected Item                       Version  Size Mb  Downloads ┡━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━┩
 kubectx  kubectx_v0.9.4_linux_x86_64.tar.gz  v0.9.4   1.0      43811     └─────────┴────────────────────────────────────┴─────────┴─────────┴───────────┘
Install this tool (Y/n): y
 INFO     Downloaded: 'kubectx_v0.9.4_linux_x86_64.tar.gz' at /tmp/dn_kubectx_ph6i7dmk                                                               utils.py:159
 INFO     install /tmp/dn_kubectx_ph6i7dmk/kubectx /home/noobi/bin/kubectx                                                                  core.py:132
 INFO     Installed: kubectx

まとめ

GitHub Releases からバイナリをインストールについて、いくつかのツールを紹介した。個人的には install-release が使いやすいと感じた。Python 環境の pip でインストールできるので手軽に使える。Python への依存が気になる場合は、他のツールを使うのが良いだろう。