Hasura CLI のバージョン管理ツールを作りました
はじめに
いろいろな言語のバージョン管理ツールとして頻繁に使われる「~env」的なものの Hasura CLI バージョンを作りました。
複数のバージョンの Hasura プロジェクトを触る機会のある方はぜひ使っていただければと思います。
開発経緯
私の所属する会社で開発するプロダクトでは Hasura を全面的に採用し、Hasura を使ったプロダクトがいくつか存在します。それぞれのプロダクトごとに Hasura のバージョンが違うため、開発対象のプロダクトが変わるごとに hasura update-cli
で CLI をインストールし直す必要がありました。その作業が毎度面倒なので nodebrew や rbenv のような簡単にバージョンを切り替えられるツールを作ることにしました。
基本的に Hasura のサーバのバージョンと Hasura CLI のバージョンは揃えるべきだと思っています。というのも、Hasura CLI はバージョンによって 生成される metadata が違ったり、CLI 内部で使われている API の仕様変更が発生したりします。(ある程度の後方互換性は保ってリリースされているとは思いますが) 特別な事情がない限り CLI とサーバのバージョンを揃えておいたほうが賢明だと思っています。
使い方・機能
README に書いたことを噛み砕いて書いただけなので、README を読めばいいやという方は読み飛ばしていただいて構いません。
インストール
go install
でバイナリをインストールします。
$ go install github.com/kmtym1998/hasuraenv/cmd/hasuraenv@latest
hasuraenv init
での初期化処理をし、hasuraenv でインストールした Hasura CLI への PATH を通します。init
を実行すると自動的に最新の Hasura CLI をインストールし、そのバージョンの Hasura CLI が使われるようになります。
$ hasuraenv init
$ export PATH=$HOME/.hasuraenv/current:$PATH;
hasura
コマンドの向き先が hasuraenv でインストールした Hasura CLI のものになっていることを確認します。
$ which hasura
~/.hasuraenv/current/hasura
機能
主な機能は以下のとおりです。
- リリース済みの Hasura CLI のバージョンを一覧する
- ローカルにインストール済みの Hasura CLI のバージョンを一覧する
- バージョン指定して Hasura CLI をインストールする
- 使用する Hasura CLI のバージョンを切り替える
コマンドのインターフェースは nodebrew を大いに参考にさせていただきました。
Hasura CLI のバージョンを新たにインストール ~ 切替の例を示します。
# 元の Hasura CLI のバージョンを確認
$ hasura version
INFO hasura cli version=v2.1.0
# リリース済みの Hasura CLI のバージョンの最新 10 件を確認
$ hasuraenv ls-remote --limit 10
INFO Latest 10 releases
v2.13.0-beta.1
v2.12.0
...
# v2.13.0-beta.1 をインストール
$ hasuraenv install v2.13.0-beta.1
# インストール済みの Hasura CLI のバージョン一覧を確認
$ hasuraenv ls
INFO Installed hasura cli
v2.1.0
v2.9.0
v2.9.0-beta.3
v2.13.0-beta.1
# v2.13.0-beta.1 を使う
$ hasuraenv use v2.13.0-beta.1
# バージョンが切り替わったことを確認
$ hasura version
INFO hasura cli version=v2.13.0-beta.1
実装内容と仕様を軽く紹介
使い慣れているので開発言語は Go を、CLI フレームワークには spf13/cobra を採用しました。
$HOME/.hasuraenv/versions
配下にはインストールした Hasura CLI のバイナリが入るようになっています。$HOME/.hasuraenv/current
には使用中のバージョンのバイナリを指すシンボリックリンクが置かれています。このシンボリックリンクに PATH を通してあげることで指定したバージョンの Hasura CLI が使えるようになります。hasuraenv use
を使ったときにシンボリックリンクを向き先を変えて作り直すことでバージョンの切り替えを実現しています。
$ tree ~/.hasuraenv
├── current -> ~/.hasuraenv/versions/default
└── versions
├── default
│ └── hasura
├── v2.1.0
│ └── hasura
└── v2.13.0-beta.1
└── hasura
Hasura CLI のインストールは公式ドキュメントに書かれた Linux / Mac 向けのインストール方法で行うようにしました。(windows では使えません...🙇♂️)
インストールスクリプトの実行時にバージョンとインストールパスを渡してインストールしています。
おわりに
複数のバージョンの Hasura プロジェクトを触る機会のある方はぜひ使っていただければと思います。同じようなパターンで実装すれば Hasura CLI に限らずいろいろなツールで「~env」は作れそうですね。
Discussion