2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Shell ScriptAdvent Calendar 2016

Day 12

rgの最新バージョンをチェックするシェルスクリプト

Posted at

 Shell Script Advent Calendar 2016の今日の枠が埋まってなかったのでコネタを書きます。

やりたいこと

 rg(ripgrep)はテキスト検索ツールです。ag(The Silver Searcher)と同様にgrep -r相当の検索を高速に実行します。rgについての詳細はすでにいろいろ解説エントリーが書かれていますし、今回の本題ではないので割愛します。

 rgは、GitHubからダウンロードしてきて、静的リンクされた1バイナリを~/binなどに置くだけで使えるので、インストールも楽です。ただし、開発がえらく速いので、こまめにチェックしていないとバージョンがすぐ古くなってしまいます。

 そこで、現在インストールされているバージョンとGitHubのreleasesに上がっているバージョンを比較する簡単なシェルスクリプトを作りました。

作ったシェルスクリプト

 GitHubのreleases APIでとってきたlatest情報のJSONから、jqコマンドでバージョン番号を抜き出して比較します。

#!/bin/sh
APIURL=https://api.github.com/repos/BurntSushi/ripgrep/releases/latest
{
    rg --version | tr -d '\n'
    echo -n ' -> '
    curl -s "$APIURL" | jq -r .tag_name
} | sed -e 's/^ripgrep \(.*\) -> \1$/now up to date/'

 最新版の場合は「now up to date」と、最新版でない場合は「ripgrep 0.3.1 -> 0.3.2」のような形式で表示されます。

シェルスクリプトとしての工夫点

 最初に書いたときには、インストールされているバージョンと最新バージョンをそれぞれ変数に入れてから比較していました。しかし、コマンドの結果を変数に入れるのはシェルスクリプトらしくないなあと思っていました。

 そんなときにpiroorさんの「プログラマーの君! 騙されるな! シェルスクリプトはそう書いちゃ駄目だ!! という話 - Qiita」を読んで、やっぱりそうだなあと思い、パイプで処理するよう書き直しました。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?