作ったもの
GitHubのレポジトリにはReleaseページがあり、そこに各プラットフォーム向けのビルド済みの実行バイナリを添付していることが多くあります。毎回このページをブラウザで開いて自分のプラットフォーム用のファイルをクリックして解凍してPATHが通ったディレクトリに入れるというのを繰り返すのも面倒なので自動化するツールを作りました。
機能説明
からバイナリをダウンロードするかcargo-binstallなどを使ってインストールしてください。
使い方は以下の通りです。
GitHub Release Downloader
Usage: grd.exe [OPTIONS] <REPO>
Arguments:
<REPO> GitHub repository (e.g., owner/repo)
Options:
-t, --tag <TAG> Version to download (e.g., v1.2.3). If omitted, uses latest
-l, --list List available release versions
-d, --destination <DESTINATION> Destination directory [default: .]
-b, --bin-name <BIN_NAME> Executable file name (defaults to repository name if not specified)
--first Always select the first matching asset without prompting
--exclude <EXCLUDE> Comma-separated list of words to exclude from asset matching
-m, --memory-limit <MEMORY_LIMIT> Memory limit in bytes; downloads larger than this use temp files [default: 104857600]
-h, --help Print help
-V, --version Print version
例えばこれでOpenCodeをインストールするには次のようにします。
grd -d D:\bin anomalyco/opencode
Selected version: v1.1.25
Multiple assets found. Select one:
1. opencode-desktop-windows-x64.exe (67.1 MB)
2. opencode-desktop-windows-x64.exe.sig (420 B)
3. opencode-windows-x64-baseline.zip (49.7 MB)
4. opencode-windows-x64.zip (49.7 MB)
Enter choice (1-4):
そうすると上記のようにいくつかの選択肢が出てきますのでさらに番号を入力するとそれをダウンロードされ、zipやtar.gzを解凍して指定したディレクトリに保存されます。ダウンロードするデータは基本的にはメモリ上にそのまま書き込まれますが、-mで指定した閾値を超えるサイズのデータについては一時ファイル(tempfileを使用)が利用されます。
実装
利用言語はRustです。ほとんどOpenCodeで無料のGrok Code Fast 1を使用してvibe codingしたのでそこまで特筆することもありませんが、事前に利用するライブラリをcargo addして実装する機能にそれを利用することを明記してPlanモードで実装計画を練り、Buildモードで実際に実装させました。
- httpクライアント:
ureq - エラー処理:
anyhow - コマンドライン処理:
clap - 解凍:
zip,flate2,tar - 一時ファイル:
tempfile - プログレスバー:
indicatif
全部で300行、関数も10つ程度と非常にコンパクトな実装です。
余談
やっぱり同じ目的のツールがすでにたくさんありますね。思いっきり車輪の再発明をしてしまいましたが、それらと比較して最もシンプルな設計になっているので初めてRustで便利ツールを開発したいという方は参考にしていただけると幸いです。