fzfコマンド便利すぎ!外貨を日本円に換算するスクリプト作ってみた
どもども!コロナウイルスのオミクロン株が猛威をふるっていますね…一刻も早く収束することを願うばかりです。
さて、前日職場の先輩にfzfコマンドという素晴らしいコマンドを教えていただいたので、知識の定着がてら簡単な外貨を日本円に変換するシェルスクリプトを作成してみました!
fzfコマンドの基本的な使用方法とともに記事にしていきたいと思います。
fzfコマンドとは
fzfコマンドはある出力一覧からインタラクティブに結果を一つ選択することができるツールです。言葉では説明が難しいので実際に使用してみましょう。
下記のgithubから入手することができます。
https://github.com/junegunn/fzf
例えば下記の三行が記載されたファイルがあったとします。ファイル名を"greeting.txt"とでもしておきましょう。
おはよう
こんにちは
こんばんは
まずはこのファイルの中身をechoコマンドで普通に呼び出してみます。
echo $(cat greeting.txt)
次にfzfコマンドを使用してみます。使用方法はパイプで渡すだけです。
echo $(cat greeting.txt | fzf)
このように出力結果からインタラクティブに一つ取り出すことができます。なんと素敵なことでしょう。
実例としてはsshの接続先を選択できるようにするなど幅広く活躍できるコマンドです。
今回はfzfコマンドを使用して、タイトルの通り外貨を日本円に換算するスクリプトを組んでみたいと思います。
スクリプトを作成する
今回作成したのは以下のようなものです。動画では使用しやすいように
alias exrate='スクリプトのパス $(cat currency.txtのパス | fzf)'
とエイリアスを設定しています。
僕は日本であまり販売されていない楽器を趣味としているのですが、これからこのスクリプトを購入金額の参考に使用する予定です!
実際に作成していきましょう。今回のスクリプトの作成にあたり下記APIを使用させていただきました。こちらのAPIが廃止されるとこのスクリプトも機能しないので、事前に確認をお願いします。
https://api.aoikujira.com/index.php?fx&show
用意するファイルは2つです。
まずはこちらのAPIで利用できる外貨一覧を記載したファイルを作成します(今回ファイル名は"currency.txt"としています)。その中に使用したい通貨と、認識しやすいように日本語メモをつけておきましょう。
usd (米ドル)
eur (ユーロ)
gbp (ポンド)
aud (豪ドル)
...
次に、実際のスクリプトを作成します。今回は下記のようにしました。(変数名はぐだぐだです…。)
#!/bin/bash
CURRENCY=$1
CURRENCY_JPN=$(echo $2 | cut -d"(" -f2 | cut -d")" -f1)
read -p "日本円に変換するのは何$2? > " NUM
VALUE=$(curl -s http://api.aoikujira.com/kawase/csv/$CURRENCY | grep JPY | cut -d , -f2 )
CULC=$(echo "scale=5; $VALUE * $NUM" | bc)
RESULT=$(echo $CULC | awk '{printf("%d\n",$1)}')
echo "$NUM:$CURRENCY_JPN は $RESULT:円 だよ"
exrateを実行した時、このスクリプトに渡される引数は
通貨 日本語メモ
の順になります。価格は下記のread文で取得しています。
read -p "日本円に変換するのは何$2? > " NUM
APIは下記の形式で呼び出すと対応した他の国の1単位にたいする通貨が換算されて出力されるため
http://api.aoikujira.com/kawase/形式/通貨
例:)http://api.aoikujira.com/kawase/csv/usd
とすると1usdあたりの他の国の通貨の価格を取得することができます。なので日本円の部分のみ抽出し価格の部分だけ切り取っているのが下記です。
VALUE=$(curl -s http://api.aoikujira.com/kawase/csv/$CURRENCY | grep JPY | cut -d , -f2 )
あとはスクリプト実行時指定した金額をもとに計算し、小数点を切り捨てていきます。
CULC=$(echo "scale=5; $VALUE * $NUM" | bc)
RESULT=$(echo $CULC | awk '{printf("%d\n",$1)}')
そして結果を良しなに出力すればOKです!
まとめ
もともとこのスクリプトは作成していたのですが、引数に価格と通貨を指定しなければならないため非常に面倒で使用していなかったのですが、fzfコマンドでパワーアップした今ならガンガン使用できそうです!
かなり汎用的なコマンドなので日頃の業務にもどんどん取り入れていきたいですね!
以上、最後まで読んでいただきありがとうございました!
↓オススメ教材