🕺

Hasura CLI のバージョン管理ツールを作りました

2022/10/09に公開約3,100字

はじめに

いろいろな言語のバージョン管理ツールとして頻繁に使われる「~env」的なものの Hasura CLI バージョンを作りました。

https://github.com/kmtym1998/hasuraenv

複数のバージョンの Hasura プロジェクトを触る機会のある方はぜひ使っていただければと思います。

開発経緯

私の所属する会社で開発するプロダクトでは Hasura を全面的に採用し、Hasura を使ったプロダクトがいくつか存在します。それぞれのプロダクトごとに Hasura のバージョンが違うため、開発対象のプロダクトが変わるごとに hasura update-cli で CLI をインストールし直す必要がありました。その作業が毎度面倒なので nodebrewrbenv のような簡単にバージョンを切り替えられるツールを作ることにしました。

基本的に 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 では使えません...🙇‍♂️)

https://hasura.io/docs/latest/hasura-cli/install-hasura-cli/

インストールスクリプトの実行時にバージョンとインストールパスを渡してインストールしています。

おわりに

複数のバージョンの Hasura プロジェクトを触る機会のある方はぜひ使っていただければと思います。同じようなパターンで実装すれば Hasura CLI に限らずいろいろなツールで「~env」は作れそうですね。

GitHubで編集を提案

Discussion

ログインするとコメントできます